web-dev-qa-db-ja.com

Gitを使ったJenkins CIをマスターへのプッシュでトリガーするにはどうすればよいですか?

GitHubを使ったプロジェクトのためにJenkins-ciをセットアップしようとしています。私はすでにJenkinsに適切なプラグインを設定しました。プロジェクトの誰かがマスターになるときにだけJenkinsにビルドスクリプトを実行させたい。これまでのところ、誰かがどこにプッシュしてもビルドがトリガーされるように設定することができましたが、それは広すぎるのです。これはGitの受信後サービスフックで行いました。

私はJenkins wikiといくつかのチュートリアルを読みましたが、この特定の詳細は欠けています...それはおそらくポーリングと関係があるのでしょうか?それともGit側で作業して、Gitがmasterが変更されたときにのみJenkinsをトリガーするようにするべきですか?

196
Ziggy

がすでに述べたように、を曖昧にしている一方で、(で説明されているように)良い解決策があります 投票JenkinsビルドをGitフックから起動する):

  • JenkinsジョブのビルドトリガーをPoll SCMに設定しますが、donotを指定します。スケジュール.

  • URLを通知するためのGitHub受信後トリガーを作成する

    http://yourserver/jenkins/git/notifyCommit?url=<URL of the Git repository>?token=<get token from git to build remotely>
    
  • これにより、指定したGitリポジトリをポーリングするすべてのビルドがトリガーされます。

  • しかし、ポーリングは実際には使用されているブランチに何かプッシュされているかどうかを確認します。

それは完璧に機能します。

182
olenz

バージョン0.5の時点で、Jenkins用のGitHubプラグインは 変更がGitHubにプッシュされたときにビルドをトリガーする することができます。

32
docwhat

リモートでビルドをトリガーする代わりに、ポーリングでビルドをトリガーするようにJenkinsプロジェクト設定を変更してください。

Jenkinsは、固定の内部情報に基づいて、またはURLによってポーリングできます。後者は、そのブランチに変更がない場合にビルドをスキップしたいものです。正確な詳細は ドキュメント にあります。基本的にあなたはただ "Poll SCM"オプションをチェックし、スケジュールセクションを空白のままにし、そしてJENKINS_URL/job/name/pollingを打つためにリモートURLを設定する必要があります。

安全なJenkins環境をお持ちの場合は、/buildとは異なり、/polling URLに認証が必要です。指示 ここ に詳細があります。例えば、私はGitHubの受信後フックをusername:apiToken@JENKIS_URL/job/name/pollingに持っています。

9
Wei Wang

GitLabの場合は、次の手順に従います。

  1. プロジェクトの設定に行きます→Webフック
  2. Jenkinsプロジェクトの「今すぐ作成」URLをプッシュイベントURLとして入力します。

    例えばhttp://server.com/jenkins/job/project_name/build?delay=0sec

  3. Add Web Hookをクリックしてからtest hookをクリックします

その後、リポジトリにコミットするたびにWebフックが起動され、ビルドが作成されます。 Jenkinsワークスペースを必ずdelete workspace before each buildに設定して、新しいコードの新しいコピーを取得してください。

8
etusm

Gitとは関係ありませんが、以下ではMercurialを使ってJenkinsのジョブ設定について詳しく説明します。それは同様の問題を抱えている他の人たちを助けるかもしれません。

  1. URLトリガープラグインをインストールする
  2. ジョブ構成ページに移動して、Poll SCMオプションを選択します。値を* * * * *に設定します
  3. オプション[URLTrigger] - Poll with a URLを確認してください。変更日の変更、URLコンテンツなどのオプションを選択できるようになりました.
  4. オプションで、[URLコンテンツの変更]を選択し、最初のオプションを選択します - Monitor change of content
  5. 変更を保存してください。

さて、いくつかのテストチェックインによってMercurialリポジトリへの変更を引き起こします。

JenkinsジョブがSCMの変更を検出して実行されるようになりました。 Mercurialの変更によりビルドが実行されると、テキストStarted by an SCM changeが表示されます。それ以外の場合は、手動で起動したユーザー。

4
Krishnam

GitコミットでJenkinsビルドを起動する方法

Gitが提供するGitフックを使ってJenkinsの仕事を開始するには、curlを使うだけです。

コマンドcurl http://localhost:8080/job/someJob/build?delay=0secはJenkinsジョブを実行できます。ここで、someJobはJenkinsジョブの名前です。

あなたの隠された.gitフォルダの中の "hooks"フォルダを探してください。 "post-commit.sample"ファイルの名前を "post-commit"に変更します。メモ帳でそれを開き、 ":Nothing"の行を削除して、そこに上記のコマンドを貼り付けます。

それでおしまい。コミットをするたびに、Gitはファイルに定義されたコミット後コマンドを起動します。

3
Nav

Gitコマンド/ GUIからコードがリポジトリにプッシュされた後のJenkinsとの継続的統合:

  1. 仕事の名前だけでJenkinsで仕事を作成し、プロジェクトのフリースタイルの種類を選択します。クリック OK。次のページには何も追加されません - クリックするだけです Save
  2. ソースコードがあるローカルのGitリポジトリに移動して、.git/hooksフォルダに移動します。
  3. hooksフォルダには、いくつかのファイルが含まれています。 "post-commit"をチェックしてください。存在しない場合は、ファイル拡張子を付けずに "post-commit"ファイルを作成します。

    C:\work\test\\.git\hooks\post-commit
    
  4. 下記のコマンドで "post-commit"ファイルを編集します。それがあなたのローカルソースコードフックフォルダに存在することを確認してください。

    curl -u userName:apiToken -X POST http://localhost:8080/jenkins/job/jobName/build?token=apiToken
    

    例:

    curl -u admin:f1c55b3a07bb2b69b9dd549e96898384 -X POST http://localhost:8080/jenkins/job/Gitcommittest/build?token=f1c55b3a07bb2b69b9dd549e96898384
    

    5。

    userName:Jenkinsのユーザー名

    jobName:ビルドのジョブ名

    apiToken:あなたのAPIトークンを入手するには、あなたのJenkinsユーザーページ(インターフェースの右上)に行ってください。ページの左側にある「設定」メニューで利用可能です:「APIトークンを表示する」

  5. ソースコードを変更して、そのコードをリポジトリにコミットします。

  6. あなたの仕事、http://localhost:8080/jenkins/job/Gitcommittest/は築き上げるべきです。

3

ブランチを指定する必要があります。デフォルトでは、それは何でも聴きます。ブログ投稿Hudson:GitとMavenのプラグインをご覧ください。

3
Adam Dymitruk

Generic Webhook Trigger Plugin はこれを達成するためにフィルタで設定することができます。

で設定した場合

  • refという名前の変数と式$.ref
  • テキスト$ref^refs/heads/master$のようなフィルタ表現を持つフィルタ。

その場合、そのジョブはmasterへのプッシュごとにトリガーされます。投票なし.

実際にビルドを実行するには、Webフックからもっと多くの値が必要です。必要なものを選択するために、JSONPathを使って変数を追加するだけです。

ここでいくつかのユースケースがあります: https://github.com/jenkinsci/generic-webhook-trigger-plugin/tree/master/src/test/resources/org/jenkinsci/plugins/ gwt/bdd

2
Tomas Bjerre

私の現在の組織では、スナップショットビルドを生成するために、これをマスターで行うのではなく、開発とリリース/ブランチの両方で行っています(Git Flowを使用しています)。

マルチブランチパイプラインを使用しているので、Jenkinsファイルでwhen {}構文を使用してこれを行います。

stage {
    when { 
        expression { 
            branch 'develop'
        }
    }
}

これはこのブログ記事で詳しく説明されています。 https://jenkins.io/blog/2017/01/19/converting-conditional-to-pipeline/#longer-pipeline

1
jesses.co.tt

上記の答えは正しいですが、私は彼らの単純さのためにここで初心者である彼らに話しています

特にパイプラインのビルドトリガーを設定するために:

2つのGithubブランチがあるとしましょう:1.master、2.dev、そしてJenkinsfile(パイプラインスクリプトが書かれている)と他のファイルが各ブランチで利用可能です

新しいPipelineプロジェクトを設定する(devブランチ用)

## 1. git-pluginとcronベースのアプローチとのコード統合前提条件git pluginをインストールし、あなたの名前とメールアドレスで設定してください。

  1. 一般セクション。チェックボックス - 'このプロジェクトはパラメータ化されています'をチェックし、名前 - SBRANCHデフォルト値 - 'ref/remotes/Origin/dev'を追加します。
  2. トリガーのセクション「Checkチェックボックス - 'Poll SCM'と毎分チェックするためのコミットチェックの必要に応じたスケジュール '*/1 * * * *」
  3. パイプライン定義セクション - 選択 - SCMからのパイプラインスクリプト - > gitを選択 - > addRepository URL - > git認証情報を追加 - >詳細を選択 - >名前 - オリジン追加、RefSpec - '+ refs/heads/dev:refs/remotes/Origin/dev '(devはgithubのブランチです) - >ビルドするブランチ - $ {SBRANCH}(参照の1番目のポイントからのパラメータ名) - >スクリプトパス - > Jenkinsfile - >ライトウェイトチェックアウトのチェックを外す
  4. 適用 - >保存

## 2.コード統合:github-pluginとwebhookのアプローチ前提条件Githubプラグインをインストールし、Githubサーバーを設定する必要があります。そうでない場合は接続をテストする必要があります次の設定を検討してください

JenkinsのアカウントでGithubプラグインを設定する

GitHubセクション存在しない場合はGithubサーバーを追加します。API URL: https://api.github.com 認証情報:シークレットテキストを追加します([追加]ボタンをクリック:タイプシークレットテキストを選択)。値Personal Access Token(生成します) Githubアカウントから - >設定 - >開発者設定 - >個人用アクセストークン - >トークンの追加 - >範囲の確認 - >トークンのコピー)接続のテスト - > Githubアカウントに接続しているかどうか確認します。事前のサブセクションでは、 'shared secret'に以前の認証情報を選択してください。

次の方法であなたのリポジトリに追加されていない場合は、webhookを追加してください。

  1. Githubレポジトリ設定に移動します - > webhookを追加 - > URLを追加
    http:// Public_IP:Jenkins_PORT/github-webhook /
  2. またはPublic_IPがない場合は ngrok を使用してください。インストール、認証、コマンド./ngrok http 80(jenkins_portを使用)からパブリックIPを取得して、webhookを追加 - > URLを追加 http:// Ngrok_IP/github-webhook /
  3. Webhookページからペイロードを配信してテストし、ステータスが200になっているかどうかを確認します。

Github Pullリクエストプラグインがある場合は、公開されているJenkins URLでも設定してください。

  1. 一般セクション。チェックボックス - 'Githubプロジェクト'にプロジェクトのURLを追加 - ( '。git /'で終わるgithubリンク)
  2. 一般セクション。チェックボックス - 'このプロジェクトはパラメータ化されています'をチェックし、名前 - SBRANCHデフォルト値 - 'ref/remotes/Origin/dev'を追加します。
  3. Triggers.section.Checkチェックボックスをビルドします - 'GITScmポーリング用のGitHubフックトリガー'
  4. Pipeline def'nセクション:Select - SCMからのPipelineスクリプト - > gitの選択 - > addRepository URL - > git認証情報の追加 - > advancedを選択 - > name - Originの追加、RefSpec - '+ refs/heads/dev:refs/remotes/Origin/dev '(devはgithubのブランチです) - >ビルドするブランチ - $ {SBRANCH}(パラメータの最初のポイントからのパラメータ名) - >スクリプトパス - > Jenkinsfile - >チェックマークをはずす
  5. 適用 - >保存
1
Akshay Shikre

プルリクエストビルダープラグインを使用します。 https://wiki.jenkins-ci.org/display/JENKINS/GitHub+pull+request+builder+plugin

それは本当に簡単です。その後、GitHubのWebフックを設定してビルドを開始することができます。

0
richardpringle