正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

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プロジェクトへのアクセス権を付与する

  1. パーソナルアクセストークン、プロジェクトアクセストークン、またはグループアクセストークンを作成します。

  2. アクセストークンのスコープをAPIに設定します。

  3. Jenkinsサーバーを設定するため、アクセストークンの値をコピーします。

Jenkinsサーバーを設定する

Jenkinsプラグインをインストールして、GitLabへの接続を認証するように設定します。

  1. JenkinsサーバーでManage Jenkins(Jenkinsの管理) > Manage Plugins(プラグインの管理)を選択します。
  2. 利用可能タブを選択します。gitlab-pluginを検索して選択し、インストールします。プラグインをインストールするその他の方法については、JenkinsのGitLabドキュメントを参照してください。
  3. Manage Jenkins(Jenkinsの管理) > Configure System(システムの設定)を選択します。
  4. GitLabセクションで、Enable authentication for ‘/project’ end-pointを選択します。
  5. 追加を選択し、Jenkins Credential Providerを選択します。
  6. トークンタイプとしてGitLab API tokenを選択します。
  7. API Token(APIトークン)で、GitLabからコピーしたアクセストークンの値を貼り付け追加を選択します。
  8. GitLab host URL(JenkinsサーバーURL)にGitLabサーバーのURLを入力します。
  9. 接続をテストするには、Test Connection(テスト設定)を選択します。

詳細については、Jenkins-to-GitLab authenticationを参照してください。

Jenkinsプロジェクトを設定する

ビルドを実行するJenkinsプロジェクトをセットアップします。

  1. JenkinsインスタンスでNew Itemを選択します。
  2. プロジェクトの名前を入力します。
  3. Freestyleまたはパイプラインを選択し、OKを選択します。JenkinsプラグインがGitLabのビルドステータスを更新するため、フリースタイルプロジェクトを選択する必要があります。パイプラインプロジェクトでは、GitLabのステータスを更新するようにスクリプトを設定する必要があります。
  4. ドロップダウンリストからGitLab接続を選択します。
  5. Build when a change is pushed to GitLabを選択します。
  6. 次のチェックボックスを選択します:
    • Accepted Merge Request Events(承認されたマージリクエストイベント)
    • Closed Merge Request Events(クローズしたマージリクエストイベント)
  7. ビルドステータスを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統合にこの方法を使用してください。

  1. 左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。新しいナビゲーションをオンにしている場合、このフィールドは上部のバーにあります。
  2. 設定 > インテグレーションを選択します。
  3. Jenkinsを選択します。
  4. アクティブチェックボックスを選択します。
  5. GitLabでJenkinsのビルドをトリガーするイベントを選択します:
    • プッシュ
    • マージリクエスト
    • タグのプッシュ
  6. JenkinsサーバーURLを入力します。
  7. (オプション)SSLの検証を有効にするを無効にするには、SSL証明書検証を有効にするチェックボックスをオフにします。
  8. プロジェクト名を入力します。プロジェクト名はURLに利用できるものにしてください。スペースはアンダースコアに置き換えられます。プロジェクト名が有効なものであるようにするには、Jenkinsプロジェクトを表示しているときにブラウザのアドレスバーからプロジェクト名をコピーします。
  9. Jenkinsサーバーで認証が必要な場合は、ユーザー名パスワードを入力します。
  10. (オプション)テスト設定を選択します。
  11. 変更を保存を選択します。

Webhookを使用する

JenkinsサーバーのURLと認証情報をGitLabに提供できない場合は、GitLabとJenkinsを統合するようにWebhookを設定できます。

  1. Jenkinsジョブの設定で、GitLab設定セクションの高度な設定を選択します。
  2. Secret Token(シークレットトークン)で生成を選択します。
  3. トークンをコピーし、ジョブの設定を保存します。
  4. GitLabで次の手順に従います:
  5. 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を介してステータスを報告する際にエラーが発生した場合です。

このイシューを解決するには、次の手順に従います:

  1. GitLab APIアクセスのためにJenkinsサーバーを設定します。
  2. 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でジョブログを有効にするには、次の手順に従います:

  1. ダッシュボード > Manage Jenkins(Jenkinsの管理) > System Log(システムログ)に移動します。
  2. Add new log recorderを選択します。
  3. ログレコーダーの名前を入力します。
  4. 次の画面で追加を選択し、com.dabsquared.gitlabjenkinsを入力します。
  5. ログレベルがすべてになっていることを確認し、保存を選択します。

ログを表示するには、次の手順に従います:

  1. ビルドを実行します。
  2. ダッシュボード > Manage Jenkins(Jenkinsの管理) > System Log(システムログ)に移動します。
  3. ロガーを選択し、ログを確認します。