GitHubリポジトリでのJenkinsビルドの現在の状態を表示する


182

プロジェクトのGitHub Readme.mdでJenkinsビルドステータスを表示する方法はありますか?

私はJenkinsを使用して継続的インテグレーションビルドを実行しています。各コミットの後、最終的にドキュメントとリリースバンドルを作成する前に、すべてがコンパイルされ、ユニットテストと統合テストが実行されることが保証されます。

ビルドを壊す何かを誤ってコミットするリスクはまだあります。GitHubプロジェクトページにアクセスしているユーザーが、現在のマスターがその状態であることを知るのは良いことです。


9
なぜこれが反対投票されたのですか?Jenkinsのユーザーガイドで私が見逃した明らかなものはありますか?私は事前にグーグルをやりました、そして何も見つけることができませんでした。
Jasper Blues

1
Travisビルドサーバーはこのようなことを実行できますが、私はOsxでJenkinsを使用しています。これが私が求め
Jasper Blues


2
同様の質問へのリンクは、現在iOSおよびOSXをサポートしていないTravisを推奨しているため、質問には回答しません。
ジャスパーブルース

4
これは複製ではありません。travis!= jenkins
Banjocat

回答:


167

では、Jenkinsを設定してGitHubビルドステータスを設定する方法を説明します。これは、GitHubプラグインがすべてのプッシュでビルドを実行するように構成されたJenkinsをすでに取得していることを前提としています。

  1. GitHubに移動してログインし、[設定][ 個人用アクセストークン ]、[ 新しいトークンの生成 ]の順にクリックします

    GitHub設定のスクリーンショット

  2. repo:statusを確認します(これが必要かどうかはわかりませんが、実際に実行しましたが、うまくいきました)。

    GitHubトークン生成のスクリーンショット

  3. トークンを生成してコピーします。

  4. 使用するGitHubユーザーがリポジトリコラボレーター(プライベートリポジトリの場合)、または構築するリポジトリへのプッシュおよびプルアクセス(組織リポジトリの場合)を持つチームのメンバーであることを確認します。

  5. Jenkinsサーバーに移動し、ログインします。

  6. Jenkinsの管理システムの構成
  7. 下ではGitHubのウェブフック選びましょジェンキンスは、フックのURLを自動管理し、その後、あなたのGitHub指定したユーザ名トークンのOAuthを使用すると、ステップ3で得ました。

    Jenkinsのグローバル設定のスクリーンショット

  8. [ 資格情報テスト ]ボタンで機能することを確認します。 設定を保存します。

  9. Jenkinsジョブを見つけて、GitHubコミットでビルドステータスの設定をビルド後のステップに追加します

    Jenkinsジョブ構成のスクリーンショット

それでおしまい。次に、テストビルドを実行し、GitHubリポジトリに移動して、機能するかどうかを確認します。メインリポジトリページのブランチをクリックして、ビルドステータスを確認します。

「ブランチ」をクリックしたメインページのスクリーンショット

緑のチェックマークが表示されます。

ビルドステータスのGitHubブランチのスクリーンショット


GitHubは認証ワークフローを更新しました。ユーザーは何を許可するかを指定しなくなり、アプリケーションは認証中に必要なものを要求し、ユーザーは要求された権限を承認する必要があります。
Ian Vaughan

6
これは、Jenkins> 1.609およびGithubプラグインv 1.13.3では動作しないようです-「Let Jenkinsの自動管理フックURL」オプションが見つからない
endre

2
@pyelevenに同意します。Jenkins LTS 1.625.3とGithub Plugin 1.16.0およびGithub API Plugin 1.71を使用しています。このオプションは表示されません。代わりに、資格情報のドロップダウンが表示されますが、資格情報がリストされていません(資格情報が設定されている場合でも)。これらの資格情報は、[アドバンス]-> [追加のGithubアクションの管理]-> [ログインとパスワードをGithubトークンに変換]に移動すると表示されます。
シェザン

4
これは古くなっているようです。この回答で言及されているビルド後のアクションは現在非推奨としてマークされており、2番目のアクションがあります
Daenyth

1
ビルド後のステップパラメータが変更されました。@Alexは正解です。
Bibek Mantree

51

その間、JenkinsとGitHubのUIが少し変更され、Jenkinsを正しく設定する方法を理解するのにしばらく時間がかかりました。ここでの説明は、Jenkinsバージョン2.121.1に基づいています。

また、JenkinsジョブがWebhookまたはポーリングによってトリガーされるように構成済みであると想定しています。これらは私がそれを機能させるために取ったステップです:

  1. Githubの構成:OAuthスコープを使用した個人用アクセストークンの作成 repo:status
  2. Jenkinsを構成Configure Systemし、GitHubサーバーとしてOAuthシークレットを追加しますSecret Text -OAuthシークレットをそこに配置するための認証方法として使用します
  3. Jenkinsジョブを設定します:ビルド後のアクションSet GitHub commit statusとして追加。ステータス結果をに設定します。One of the default messages and statuses
  4. GitHubで結果を確認します。GitHubコミットでビルドステータスとビルド実行時間を取得しているかどうかを確認します。

Githubを構成する

パーソナルアクセストークンを作成


ここに画像の説明を入力してください


ここに画像の説明を入力してください


ここに画像の説明を入力してください


Jenkinsを構成する

ここに画像の説明を入力してください


ここに画像の説明を入力してください


ここに画像の説明を入力してください


ここに画像の説明を入力してください


ここに画像の説明を入力してください


Jenkinsジョブを構成する

ここに画像の説明を入力してください


ここに画像の説明を入力してください


ここに画像の説明を入力してください


結果

コミットとブランチのステータスが表示されます。

ここに画像の説明を入力してください


2
やっと解決策を見つけました、本当にありがとう!その「秘密のテキスト」は私を混乱させました。
head01

ジェンキンスはステータスを押し上げているようですが、私のプライベートリポジトリはそれらを取り上げていません。助言がありますか?
Patrick Michaelsen

更新:私の問題は私のリポジトリのプライバシーに関連していました。資格情報の設定に問題があるはずです。
Patrick Michaelsen

更新:最終的に私はこれが実際のgit pushによってトリガーされた場合にのみ機能することを発見しました。自分でビルドを実行しても、ステータスの更新は正しくトリガーされません。
Patrick Michaelsen

1
Manage Hooks私たちが保存するときには、チェックを外すべきであるボックスは、強調表示が、上記の画像にチェックされていないことが意味するのでしょうか?
Perplexabot

37

私がしたことは非常に簡単です:

  1. Hudson Post Taskプラグインをインストールする
  2. ここでパーソナルアクセストークンを作成します。https//github.com/settings/tokens
  3. 常に成功するPost Taskプラグインを追加する

    curl -XPOST -H "Authorization: token OAUTH TOKEN" https://api.github.com/repos/:organization/:repos/statuses/$(git rev-parse HEAD) -d "{
      \"state\": \"success\",
      \"target_url\": \"${BUILD_URL}\",
      \"description\": \"The build has succeeded!\"
    }"
    
  4. 「ビルドを失敗としてマーク」した場合に失敗するPost Task Pluginを追加します

    curl -XPOST -H "Authorization: token OAUTH TOKEN" https://api.github.com/repos/:organization/:repos/statuses/$(git rev-parse HEAD) -d "{
      \"state\": \"failure\",
      \"target_url\": \"${BUILD_URL}\",
      \"description\": \"The build has failed!\"
    }"
    
  5. テストの開始時に保留中への呼び出しを追加することもできます

    curl -XPOST -H "Authorization: token OAUTH TOKEN" https://api.github.com/repos/:organization/:repos/statuses/$(git rev-parse HEAD) -d "{
      \"state\": \"pending\",
      \"target_url\": \"${BUILD_URL}\",
      \"description\": \"The build is pending!\"
    }"
    

ビルド後のタスク構成のスクリーンショット


パイプラインからも実行できます。たとえば、それを呼び出すだけでsh、Jenkins資格情報ストレージを利用することもできますwithCredentials
Ivan Kolmychek

Teamcityの場合、次を使用できます:confluence.jetbrains.com/display/TCD10/Commit+Status+Publisher
Natim

24

このプラグインは動作するはずです:https : //wiki.jenkins-ci.org/display/JENKINS/Embeddable+Build+Status+Plugin

このようなバッジをREADME.mdファイルに埋め込むことができるはずです。

ビルド合格


6
悲しいことに、GitHubが一部の画像ホスティングサービスでこれらの画像をキャッシュし始めたようですが、現在は正しく表示されていません。
axel22 2014

アクセスを正しく設定した場合は正常に機能します(匿名ユーザーはビルドステータスを確認できるはずです)
Dmitry Meshkov

11

コミットステータスAPIあなたは「を参照してくださいすることができますレポステータスのAPIを」。

そして2013年4月26日以降、GitHubリポジトリブランチページでビルドステータスを確認できるようになりました

GitHubリポジトリブランチのビルドステータス

つまり、Jenkinsだけではなく、GitHubプロジェクトページにアクセスして、これらのステータスを確認することもできます。

2013年4月30日から、コミットステータスのAPIエンドポイントが拡張され、ブランチ名とタグ名、およびコミットSHAが許可されるようになりました


ヒットするURLはどこに置くのですか?プラグインはありますか、またはビルドステップでカールを使用する必要がありますか?
Ian Vaughan 2013年

@IanVaughan「ヒット」とはどういう意味ですか?何を見に?ステータスを表示するには、curldeveloper.github.com/v3/repos/statuses/…
VonC

申し訳ありませんが、うん、curlを使用できること、APIインターフェースを知っていること、curlを置く場所のほうが多いこと、そしてcurlからのより高いレベルの抽象化が利用できない場合はどうでしょうか。つまり、ビルドがコミット/ PRのビルドを開始する前にcurl POSTを追加し、その後にカールポストを追加することもできますが、これは非常に低レベルのようで、このために高レベルのプラグインがあることを望んでいました。
Ian Vaughan

それ以来、私はユースケースでかなり重いJankyを見つけました。
Ian Vaughan


7

GithubプラグインがインストールされてJenkinsいる場合は、次のPost build actionsように実行できます。

githubにビルドステータスを設定する



4
この回答には詳細がありません。GitHubプラグインがビルドステータスの設定に必要なAPIを使用できるように、GitHubでOAuthアクセストークンを作成するにはどうすればよいですか?このトークンにはどのような権限が必要ですか?Jenkins構成のどこでユーザー名/トークンを指定できますか?
Marius Gedminas、2014年

2
これは本当に役に立たないのですが、どのようにこのダイアログウィンドウにアクセスしますか?
Oz123 2017

5

README.mdに以下の行を追加し、jenkinsプロジェクトに従って両方のURLを変更します。

[![Build Status](https://jenkins../..project/lastBuild/buildStatus)](https://jenkins../..project/lastBuild/)

グラフィックは自動的に読み込まれますか?それは私にとってはそうではないようです...
HX_unbanned

はい、機能しません。ページを更新する必要があります。
カウシャル

3

JenkinsとGitHubの保護されたブランチのセットアップに関して。私はJenkins 2.6を使用していますが、これを機能させるために実行した手順は次のとおりです。

リポジトリのGitHubウェブページ:

  1. [設定]> [ブランチ]に移動します。
  2. [ブランチの保護]で、[溺死するブランチの選択]メニューをクリックし、保護されたブランチとして設定するブランチを選択します。
  3. 必要に応じてオプションを有効にします。

Jenkinsサーバー:(GitおよびGitHubプラグインがインストールされていることを確認してください)

  1. [Jenkinsの管理]> [システムの構成]に移動します。
  2. GitHubで、API URLをhttps://api.github.comに設定します。これはデフォルト値ですが。
  3. 資格情報用に生成されたトークンを選択します。トークンをまだ生成していない場合は、[詳細...]をクリックしてから、[追加のアクション]でログインとパスワードをトークンに変換し、それを資格情報として使用できます。

また、Jenkinsが使用しているGitHubアカウントがリポジトリのコラボレーターであることを確認してください。書き込み許可レベルを設定しました。

お役に立てれば。




1

編集:

このアプローチはもう使用していません。他の回答のいずれかを使用してください。

更新:私たちの特定のケースで私が最終的に何をしたか:( 上記の回答は素晴らしかった-ありがとう!)

ビルドサーバーがインターネット上にないため、ビルドステータスをgithubのgh-pagesブランチに公開するスクリプトがあります。

  • ビルドスタンプの開始が失敗する
  • ビルド終了スタンプの成功
  • プロジェクトはメインプロジェクトの後に実行され、結果を公開します->ビルドステータス、APIドキュメント、テストレポート、およびテストカバレッジ。

GitHubはイメージをキャッシュするため、ビルドステータスイメージの短いキャッシュタイムアウトを指示する.htaccessファイルを作成しました。

これをビルドステータスイメージのあるディレクトリに配置します。

ExpiresByType image/png "access plus 2 minutes"

これがビルドスクリプトです。gh-pagesに公開するターゲットは'--publish.site.dry.run'です

構成が400行未満の場合、次のようになります。

  • コンパイルチェック
  • 単体テストと統合テスト
  • テストレポート
  • コードカバレッジレポート
  • APIドキュメント
  • Githubへの公開

。。このスクリプトはジェンキンスの内外で実行できるため、次のようになります。

  • 開発者はコミット前にこのスクリプトを実行できるため、ビルドが壊れて他のユーザーに影響が及ぶ可能性が低くなります。
  • 障害はローカルで簡単に再現できます。

結果:

プロジェクトのメインページには、最新のAPIドキュメント、テスト結果、およびテストカバレッジと共に、各ビルド後に更新されるビルドステータスがあります。


私の答えよりも正確な素晴らしいフィードバック。+1
VonC 2013

1
ビルドスクリプトのリンクが機能していない
サイカット2017年

スクリプトへのライブリンクはありますか?
Ian

このアプローチの使用をやめました-他の答えの方が良いと思います。
ジャスパーブルース
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.