- JenkinsにGitLabプロジェクトへのアクセスを許可します。
- Jenkinsサーバーの設定
- Jenkinsプロジェクトの設定
- GitLabプロジェクトの設定
- 関連するトピック
- トラブルシューティング
Jenkins
13.7でGitLab Freeに移行しました。
リポジトリにコードをプッシュしたり、GitLabでマージリクエストを作成すると、Jenkinsでビルドをトリガーできます。JenkinsのパイプラインステータスはマージリクエストウィジェットやGitLabプロジェクトのホームページに表示されます。
GitLab の Jenkins インテグレーションの概要については、Jira イシューと Jenkins パイプラインによる GitLab ワークフローをご覧ください。
以下の場合に Jenkins インテグレーションを使用してください:
- 将来的にCIをJenkinsからGitLab CI/CDにマイグレーションする予定があり、暫定的なソリューションが必要な場合。
- Jenkinsプラグインに投資しており、アプリのビルドにJenkinsを使い続けることを選択している場合。
JenkinsインテグレーションはGitLabとJenkinsの両方で設定が必要です。
JenkinsにGitLabプロジェクトへのアクセスを許可します。
JenkinsにGitLabプロジェクトへのアクセス権を付与します:
-
個人、プロジェクト、グループのアクセストークンを作成します。
- 個人アクセストークンを作成すると、そのユーザーのすべてのJenkinsインテグレーションでトークンが使用されます。
- プロジェクト・アクセストークンを作成すると、トークンをプロジェクト・レベルでのみ使用できます。インスタンスンスでは、他のプロジェクトのJenkinsインテグレーションに影響を与えることなく、プロジェクトのトークンを取り消すことができます。
- グループアクセストークンを作成すると、そのグループのすべてのプロジェクトのすべてのJenkinsインテグレーションでトークンを使用できます。
- アクセストークンのスコープをAPIに設定します。
- アクセストークンの値をコピーして、Jenkinsサーバーを設定します。
Jenkinsサーバーの設定
Jenkinsプラグインをインストールして設定します。プラグインをインストールし、GitLabへの接続を承認するように設定する必要があります。
- Jenkins サーバーで、Manage Jenkins > Manage Plugins を選択します。
- JenkinsのGitLabプラグインをインストールします。
- Manage Jenkins > Configure Systemを選択します。
- GitLabセクションで、Enable authentication for ‘/project’エンドポイントを選択します。
- Add を選択し、Jenkins Credential Provider を選択します。
- トークンの種類としてGitLab API tokenを選択します。
- API Tokenに GitLabからコピーした値を貼り付け、Addを選択します。
- GitLab host URLにGitLabサーバーのURLを入力します。
-
接続をテストするには、Test Connectionを選択します。
詳細については、Jenkins-to-GitLab 認証を参照してください。
Jenkinsプロジェクトの設定
ビルドを実行するJenkinsプロジェクトを設定します。
- Jenkinsインスタンスで、New Itemに進みます。
- プロジェクト名を入力します。
- FreestyleまたはPipelineを選択し、OK を選択します。JenkinsプラグインがGitLab上のビルドステータスを更新するので、Freestyleプロジェクトをお勧めします。パイプラインプロジェクトでは、GitLab 上のステータスを更新するスクリプトを設定する必要があります。
- ドロップダウンリストから GitLab 接続を選択します。
- 変更がGitLabにプッシュされたときにビルドを選択します。
- 以下のチェックボックスを選択します:
- 受け付けられたマージリクエストイベント
- 終了したマージリクエストイベント
- ビルドステータスが GitLab にどのようにレポートされるかを指定します:
- Freestyleプロジェクトを作成した場合、Post-build Actionsセクションで、Publish build status to GitLab を選択します。
-
パイプラインプロジェクトを作成した場合は、Jenkinsパイプラインスクリプトを使用してGitLabのステータスを更新する必要があります。
Jenkins パイプラインスクリプトの例:
pipeline { agent any stages { stage('gitlab') { steps { echo 'Notify GitLab' updateGitlabCommitStatus name: 'build', state: 'pending' updateGitlabCommitStatus name: 'build', state: 'success' } } } }
その他のJenkinsパイプラインスクリプトの例については、GitHubのJenkins GitLabプラグインリポジトリを参照してください。
GitLabプロジェクトの設定
以下のいずれかの方法で、GitLabとJenkinsのインテグレーションを設定します。
Jenkinsインテグレーションを設定する(推奨)
GitLab では、Jenkins インテグレーションの設定がWebhook インテグレーションよりも簡単なので、この方法を推奨しています。
- 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
- 設定]>[インテグレーション]を選択します。
- Jenkinsを選択します。
- アクティブ]チェックボックスを選択します。
- GitLabにJenkinsビルドをトリガーさせたいイベントを選択します:
- プッシュ
- マージリクエスト
- タグプッシュ
- JenkinsサーバーのURLを入力します。
- オプション。SSL検証を無効にするには、[SSL検証を有効にする]チェックボックスをオフにします。
-
プロジェクト名を入力します。
プロジェクト名は、スペースがアンダースコアに置き換えられるURLフレンドリーである必要があります。プロジェクト名が有効であることを確認するには、Jenkinsプロジェクトを表示しているときにブラウザのアドレス・バーからコピーします。
- Jenkinsサーバーで認証が必要な場合は、ユーザー名と パスワードを入力します。
- オプション。Test settingsを選択します。
- 変更を保存を選択します。
Webhookの設定
Jenkinsサーバーのログイン情報をGitLabに提供できない場合、このオプションを使ってGitLabとJenkinsをインテグレーションすることができます。
- Jenkinsジョブの設定で、GitLabの設定セクションでAdvancedを選択します。
- シークレットトークン]で[生成]を選択します。
- トークンをコピーし、ジョブ設定を保存します。
- GitLab でプロジェクトの Webhook を作成し、トリガーの URL (
https://JENKINS_URL/project/YOUR_JOB
など) を入力してSecret Tokenにトークンを貼り付けます。 - Webhook をテストするには、Test を選択します。
関連するトピック
- 実際の使用例については、ブログポスト「継続的インテグレーション」をお読みください:Dockerを使ってJenkinsからGitLabへ。
- ソフトウェア開発ライフサイクル全体を単一のアプリケーションに移行することで、ツールチェーンのメンテナーに費やす時間を10%以上削減できることについては、「GitLab vs. Jenkins」の比較ページをご覧ください。
トラブルシューティング
GitLab設定中のエラー - “接続に失敗しました。設定を確認してください”
GitLabの設定中にこのエラーメッセージが表示された場合、以下の原因が考えられます:
- GitLabがアドレスにあるJenkinsインスタンスに到達できません。GitLabインスタンスが自己管理されている場合、GitLabインスタンスで提供されたドメインでJenkinsインスタンスにpingを打ってみてください。
- Jenkinsインスタンスはローカルアドレスにあり、GitLabインストールの許可リストに含まれていません。
- Jenkinsインスタンスの認証情報が十分なアクセス権を持っていないか、無効です。
-
Jenkins プラグインの設定で、Enable authentication for
/project
end-point チェックボックスが選択されていません。
マージリクエストでのエラー - “CI サーバーに接続できませんでした”
GitLabがJenkinsからCommit Status API経由でビルドステータスの更新を受け取らなかった場合、Could not connect to the CI server
のエラーが表示されるかもしれません。
このイシューはJenkinsが適切に設定されていないか、API経由でステータスを報告するエラーがある場合に発生します。
このイシューを修正するには、以下を確認してください:
- GitLab APIアクセス用にJenkinsサーバーを設定します。
- Jenkinsプロジェクトの設定。’Publish build status to GitLab’ post-buildアクションを含みます。
マージリクエストイベントが Jenkins パイプラインをトリガーしません。
このイシューは、リクエストがWebhook のタイムアウト(デフォルトでは 10 秒に設定)を超過した場合に発生する可能性があります。
このイシューについては、以下を確認してください:
- インテグレーション Webhook ログにリクエストの失敗がないか確認してください。
-
/var/log/gitlab/gitlab-rails/production.log
のようなメッセージに対してWebHook Error => Net::ReadTimeout
あるいは
WebHook Error => execution expired
セルフマネジメントの GitLab インスタンスでは、Webhook のタイムアウト値を大きくすることでこのイシューを解決できます。
Jenkinsでジョブログを有効にする
インテグレーションに関する問題をトラブルシューティングするために、Jenkinsでジョブログを有効にして、ビルドに関する詳細を取得することができます。
Jenkinsでジョブログを有効にするには:
- ダッシュボード > Jenkinsの管理 > システムログに移動します。
- Add new log recorderを選択します。
- ログレコーダの名前を入力します。
- 次の画面で、「Add」を選択し、「
com.dabsquared.gitlabjenkins
」と入力します。 - ログレベル]が[すべて]であることを確認し、[保存]を選択します。
ログを表示するには
- ビルドを実行します。
- ダッシュボード > Jenkinsの管理 > システムログに移動します。
- ロガーを選択し、ログを確認します。