Jenkins
- プラン: Free、Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
Jenkinsは、プロジェクトのビルド、デプロイ、自動化を支援するオープンソースの自動化サーバーです。
GitLabとのJenkins統合は、以下の場合に使用してください:
- 将来CIをJenkinsからGitLab CI/CDに移行する予定だが、暫定的なソリューションが必要な場合。
- Jenkinsプラグインに投資しており、引き続きJenkinsを使用してアプリをビルドする場合。
このインテグレーションでは、変更がGitLabにプッシュされるときにJenkinsのビルドをトリガーできます。
このインテグレーションを使用して、JenkinsからGitLab CI/CDパイプラインをトリガーすることはできません。代わりに、JenkinsジョブでパイプライントリガーAPIエンドポイントを使用し、パイプライントリガートークンで認証します。
Jenkins統合の設定が完了したら、コードをリポジトリにプッシュするか、GitLabでマージリクエストを作成したときに、Jenkinsでビルドがトリガーされます。Jenkinsパイプラインのステータスは、マージリクエストウィジェットとGitLabプロジェクトのホームページに表示されます。
GitLabのJenkins統合の概要については、GitLab workflow with Jira issues and Jenkins pipelinesを参照してください。
GitLabとJenkins統合を設定するには、次のようにします:
- JenkinsにGitLabプロジェクトへのアクセス権を付与します。
- Jenkinsサーバーを設定します。
- Jenkinsプロジェクトを設定します。
- GitLabプロジェクトを設定します。
JenkinsにGitLabプロジェクトへのアクセス権を付与する
パーソナルアクセストークン、プロジェクトアクセストークン、またはグループアクセストークンを作成します。
- そのユーザーのすべてのJenkins統合にアクセストークンを使用するには、パーソナルアクセストークンを作成します。
- プロジェクトレベルでのみアクセストークンを使用するには、プロジェクトアクセストークンを作成します。たとえば、他のプロジェクトのJenkins統合に影響を与えることなく、プロジェクト内のトークンを失効させることができます。
- そのグループのすべてのプロジェクトのすべてのJenkins統合にアクセストークンを使用するには、グループアクセストークンを作成します。
アクセストークンのスコープをAPIに設定します。
Jenkinsサーバーを設定するため、アクセストークンの値をコピーします。
Jenkinsサーバーを設定する
Jenkinsプラグインをインストールして、GitLabへの接続を認証するように設定します。
- JenkinsサーバーでManage Jenkins(Jenkinsの管理) > Manage Plugins(プラグインの管理)を選択します。
- 利用可能タブを選択します。
gitlab-pluginを検索して選択し、インストールします。プラグインをインストールするその他の方法については、JenkinsのGitLabドキュメントを参照してください。 - Manage Jenkins(Jenkinsの管理) > Configure System(システムの設定)を選択します。
- GitLabセクションで、Enable authentication for ‘/project’ end-pointを選択します。
- 追加を選択し、Jenkins Credential Providerを選択します。
- トークンタイプとしてGitLab API tokenを選択します。
- API Token(APIトークン)で、GitLabからコピーしたアクセストークンの値を貼り付け、追加を選択します。
- GitLab host URL(JenkinsサーバーURL)にGitLabサーバーのURLを入力します。
- 接続をテストするには、Test Connection(テスト設定)を選択します。
詳細については、Jenkins-to-GitLab authenticationを参照してください。
Jenkinsプロジェクトを設定する
ビルドを実行するJenkinsプロジェクトをセットアップします。
- JenkinsインスタンスでNew Itemを選択します。
- プロジェクトの名前を入力します。
- Freestyleまたはパイプラインを選択し、OKを選択します。JenkinsプラグインがGitLabのビルドステータスを更新するため、フリースタイルプロジェクトを選択する必要があります。パイプラインプロジェクトでは、GitLabのステータスを更新するようにスクリプトを設定する必要があります。
- ドロップダウンリストからGitLab接続を選択します。
- Build when a change is pushed to GitLabを選択します。
- 次のチェックボックスを選択します:
- Accepted Merge Request Events(承認されたマージリクエストイベント)
- Closed Merge Request Events(クローズしたマージリクエストイベント)
- ビルドステータスをGitLabに報告する方法を指定します:
フリースタイルプロジェクトを作成した場合は、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プロジェクトを設定する
次のいずれかの方法で、JenkinsとGitLabのインテグレーションを設定します。
JenkinsサーバーURLを使用する
JenkinsサーバーURLと認証情報をGitLabに提供できる場合は、Jenkins統合にこの方法を使用してください。
- 左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。新しいナビゲーションをオンにしている場合、このフィールドは上部のバーにあります。
- 設定 > インテグレーションを選択します。
- Jenkinsを選択します。
- アクティブチェックボックスを選択します。
- GitLabでJenkinsのビルドをトリガーするイベントを選択します:
- プッシュ
- マージリクエスト
- タグのプッシュ
- JenkinsサーバーURLを入力します。
- (オプション)SSLの検証を有効にするを無効にするには、SSL証明書検証を有効にするチェックボックスをオフにします。
- プロジェクト名を入力します。プロジェクト名はURLに利用できるものにしてください。スペースはアンダースコアに置き換えられます。プロジェクト名が有効なものであるようにするには、Jenkinsプロジェクトを表示しているときにブラウザのアドレスバーからプロジェクト名をコピーします。
- Jenkinsサーバーで認証が必要な場合は、ユーザー名とパスワードを入力します。
- (オプション)テスト設定を選択します。
- 変更を保存を選択します。
Webhookを使用する
JenkinsサーバーのURLと認証情報をGitLabに提供できない場合は、GitLabとJenkinsを統合するようにWebhookを設定できます。
- Jenkinsジョブの設定で、GitLab設定セクションの高度な設定を選択します。
- Secret Token(シークレットトークン)で生成を選択します。
- トークンをコピーし、ジョブの設定を保存します。
- GitLabで次の手順に従います:
- プロジェクトのWebhookを作成します。
- トリガーURL(
https://JENKINS_URL/project/YOUR_JOBなど)を入力します。 - Secret Token(シークレットトークン)にトークンを貼り付けます。
- Webhookをテストするため、テストを選択します。
関連トピック
トラブルシューティング
エラー: Connection failed. Please check your settings
GitLabを設定するときに、Connection failed. Please check your settingsというエラーが発生することがあります。
このイシューには、複数の考えられる原因と解決策があります:
| 原因 | 回避策 |
|---|---|
| GitLabが、アドレスにあるJenkinsインスタンスに到達できません。 | GitLab Self-Managedの場合は、GitLabインスタンスで提供されているドメインにあるJenkinsインスタンスをpingします。 |
| Jenkinsインスタンスがローカルアドレスにあり、GitLabインストールの許可リストに含まれていません。 | インスタンスをGitLabインストールの許可リストに追加します。 |
| Jenkinsインスタンスの認証情報に十分なアクセス権がないか、無効です。 | 十分なアクセス権を認証情報に付与するか、有効な認証情報を作成します。 |
Jenkinsプラグイン設定で/projectエンドポイントのEnable認証チェックボックスが選択されていません | チェックボックスを選択します。 |
エラー: Could not connect to the CI server
GitLabがコミットステータスAPIを介してJenkinsからビルドステータスの更新を受信しなかった場合、マージリクエストでCould not connect to the CI serverというエラーが発生することあります。
このイシューが発生するのは、Jenkinsが正しく設定されていないか、APIを介してステータスを報告する際にエラーが発生した場合です。
このイシューを解決するには、次の手順に従います:
- GitLab APIアクセスのためにJenkinsサーバーを設定します。
- Jenkinsプロジェクトを設定します。フリースタイルプロジェクトを作成する場合は、ビルド後の処理として「Publish build status to GitLab」を選択していることを確認します。
マージリクエストイベントがJenkinsパイプラインをトリガーしない
このイシューは、リクエストがWebhookタイムアウトを超えた場合に発生することがあります。この制限は、デフォルトで10秒に設定されています。
このイシューが発生した場合は、以下を確認してください:
リクエストの失敗に関するインテグレーションWebhookログ。
/var/log/gitlab/gitlab-rails/production.log。次のようなメッセージがあるかどうかを確認してください:WebHook Error => Net::ReadTimeoutまたは
WebHook Error => execution expired
GitLab Self-Managedの場合、Webhookタイムアウト値を増やすことでこのイシューを修正できます。
Jenkinsでジョブログを有効にする
インテグレーションのイシューを解決するには、Jenkinsでジョブログを有効にして、ビルドに関する詳細情報を取得できます。
Jenkinsでジョブログを有効にするには、次の手順に従います:
- ダッシュボード > Manage Jenkins(Jenkinsの管理) > System Log(システムログ)に移動します。
- Add new log recorderを選択します。
- ログレコーダーの名前を入力します。
- 次の画面で追加を選択し、
com.dabsquared.gitlabjenkinsを入力します。 - ログレベルがすべてになっていることを確認し、保存を選択します。
ログを表示するには、次の手順に従います:
- ビルドを実行します。
- ダッシュボード > Manage Jenkins(Jenkinsの管理) > System Log(システムログ)に移動します。
- ロガーを選択し、ログを確認します。