web-dev-qa-db-ja.com

GitHubプルリクエストからJenkins 2.0 Pipelineジョブをトリガーする方法

GitHubPullRequestBuilderはJenkins v2.0パイプラインジョブと互換性がないようです。

GitHubプルリクエストイベントからトリガーされるパイプラインジョブをどのように構成しますか?
このトピックに関するドキュメントはまばらであり、この例は見つかりません。または、GitHubでWebフックを作成して、PRイベントでパイプラインジョブをトリガーする方が良いでしょうか?

28
user6253266

PipelineをGitHubプルリクエストで使用する最も簡単な方法は、Jenkinsfileという名前でリポジトリにスクリプトを配置し、GitHub Branch Sourceプラグイン。 ドキュメント

2
Jesse Glick

同様の問題がありました。これが私のために働いたものです

前提条件

  • ジェンキンス版2+(私はJenkins 2.60を使用していました)
  • Github(またはGithhubエンタープライズ)アカウント
  • GithubとJenkinsは相互に通信できる必要があります。

Githubで

  1. 関連する権限を持つgithubパーソナルアクセストークン(PAT)を作成します。
  2. リポジトリ用に、でwebhookを作成します
    • YourJenkinsURL/github-webhook/としてのURL
    • [個々のイベントを選択してください]を選択し、[プルリクエスト]をオンにします
  3. Jenkinsfileをレポのルートフォルダーに追加します。テストのために、次のような基本的なこんにちは世界としてコンテンツを置くことができます
パイプライン{
エージェントany 
ステージ{
 stage( 'Test'){
ステップ{
 echo 'Hello World。 .. '
} 
} 
} 
} 

ジェンキンスについて

  1. インストールGitHub Pull Request Builderプラグイン。 (「Github」プラグインも必要ですが、通常はJenkins ver 2+の一部としてインストールする必要があります)
  2. ジェンキンス–資格情報
    • Github Personal Access Token(PAT)を「秘密のテキスト」資格情報として追加します。
    • Githubのユーザー名とパスワードを「ユーザー名とパスワード」の資格情報として追加します。
  3. Jenkinsの管理-システムの構成
    • Github – Githubサーバー:これはGithubプラグインの一部です。 githubサーバーを追加します。 「API URL」デフォルトは https://api.github.com です。エンタープライズgithubを使用している場合は、エンタープライズgithub urlに続いて/ api/v3を置き換えます。資格情報については、PATオプションを選択します。接続をテストします。 「フックの管理」がチェックされています。
    • GitHub Pull Request Builder:「GitHub Server API URL」には、Github Serverセクションで指定されているものと同じURLを使用します。 [共有シークレット]は空白のままにします。資格情報には「username-password」資格情報を使用します。資格情報をテストして、機能することを確認します。私の設定では、「Webhookの自動管理」がチェックされていました。
  4. パイプラインジョブ
    • 「パイプライン」オプションを使用して新しいアイテムを作成します。注:これは、マルチブランチパイプラインではなく、バニラパイプラインジョブです。
    • 一般セクション:「Githubプロジェクト」を確認します–プロジェクトURL:githubリポジトリのURLを入力します
    • ビルドトリガー:[GitHub Pull Request Builder]をチェックします
      • 「GitHub API認証情報」の場合、「Jenkinsの管理-システムの設定」画面でGitHubプルリクエストビルダーに設定したオプションを選択します
      • 管理者リストの場合:ユーザー名を追加します
      • ビルドのトリガーにgithubフックを使用するをチェックします
    • パイプライン:
      1. 「SCMからのパイプラインスクリプト」を選択します。これは、リポジトリのルートフォルダーに「Jenkinsfile」が含まれることを前提としていることに注意してください。
      2. SCM:[Git]を選択します
      3. リポジトリ-リポジトリの詳細を入力します。資格情報には、「ユーザー名-パスワード」ベースの資格情報を使用します。
      4. [詳細設定]をクリックし、refspecを+refs/pull/*:refs/remotes/Origin/pr/*として追加します
      5. ブランチ-${sha1}である必要があります
      6. スクリプトパス:デフォルトはJenkinsfileで、そのままにしておきます。
      7. 軽量チェックアウト-これのチェックを外します( https://github.com/jenkinsci/ghprb-plugin/issues/507

それでおしまい。準備万端です。リポジトリのマスターブランチでPRを作成すると、Jenkins Pipelineジョブがトリガーされます。

いくつかの観察

  • GithubからPRのwebhookペイロードを再配信してもパイプラインはトリガーされませんが、githubで新しいPRを開いたり、閉じたPRを再度開いたりすると、パイプラインジョブがトリガーされます
  • パイプラインジョブの構成で、「パイプラインスクリプト」を選択してそこにパイプラインスクリプトを貼り付けても、ジョブはトリガーされません!!!
37
Deepak Rao

簡単に言うと、フローは次のようになります。

  1. パイプラインをコードとして作成し、プロジェクトのルートディレクトリにあるJenkinsfileというファイルに保存します。そのコードは、プロジェクトがどのようにビルドされるかを記述する必要があります。例についてはこちらをご覧ください: https://jenkins.io/doc/pipeline/examples/

  2. 次に、Jenkinsに新しい「Multibranch Pipeline Project」アイテムを作成する必要があります。手順1のレポをスキャンするようにこれを設定する必要があります。

  3. これで、ステップ1リポジトリで新しいPRブランチを開くたびに、ブランチがチェックアウトされ、含まれているJenkinsfileの指示に従ってビルドされます。構築するものと、必要な場合に、より多くの条件を設定できます。

注:

  1. 「マルチブランチパイプラインプロジェクト」のサンプルドキュメント: https://jenkins.io/doc/book/pipeline-as-code/ (マルチブランチパイプラインプロジェクトまでスクロールします)

  2. PRを称賛した後、プラグインを使用してPRを作成しても機能しないことに注意してください。これを分析する議論がここにあります: https://github.com/jenkinsci/gitlab-plugin/issues/298 回避策があります(その議論でも説明されています)がセットアップするのは非常に面倒です。

2
user3837712

GitHubで生成されたプルリクエストでJenkinsジョブを自動的にトリガーするには、以下の手順に従います

  1. GitHubにWebフックを作成します。つまり、http:/// generic- webhook-trigger/invoke
  2. コンテンツタイプ:application/json
  3. イベントとしてプルリクエストを選択します。GitHub構成パートが完了しました。

Jenkinsジョブ設定

  1. Jenkinsで一般的なWebhookトリガーをダウンロードする

  2. JenkinsでのGitハブの構成

Gitハブの構成

7. jenkinsでGeneric Webhook Triggerを選択8 . Jenkins でGeneric Webhook Trigger Configurationを選択し、手順9を実行

9.ステップ7を実行した後、JenkinsジョブはPullRequestでトリガーを取得します10.ステップ8は、Pull要求ペイロードから情報を取得するために必要です11 . プルリクエストからブランチの詳細を取得するための汎用Webhookトリガー内のブランチ構成

ありがとう

0
Amarendra Kumar