Jenkins

JenkinsとGitLabの連携でCI/CD自動化を実現する方法

ⓘ本ページはプロモーションが含まれています

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


スポンサードリンク

CI/CD自動化による開発効率向上

  • 保守コストの削減: 手動で行っていた環境構築やテストを自動化することで、人件費と時間の無駄を減らすことができます
  • コード品質の向上: 毎回の変更時に自動でテストが実行されることで、バグの早期発見が可能になります
  • リリース頻度の増加: テスト通過後の自動デプロイにより、本番環境へのリリース頻度を上げることができます

コード変更時の即時ビルド・テスト実行

  • GitLabでプッシュされたコードに対して、Jenkinsが自動的にビルド・テストを実施します。これにより、開発者自身も迅速なフィードバックを得られます
  • 本番環境へのリリースタイミングの柔軟性が高まります
  • 即時フィードバック: コード変更後数秒以内にエラーメッセージを表示できるため、修正の早期対応が可能です

Webhook設定の詳細手順

GitLabとJenkinsを連携するには、Webhook設定が必要です。この設定により、GitLabでのコード変更をJenkinsに通知し、自動でCI/CDパイプラインを実行させることができます。以下に具体的な手順を解説します。注意として、GitLab 15.0以上とJenkins 2.400以上が推奨です(古いバージョンでは挙動が異なる可能性があります)。

GitLab側でのWebhook設定

プロジェクトのSettings > Integrations画面で、以下を実施します。

  1. 通知先URLの指定: JenkinsサーバーのWebhook受信アドレスを入力
  2. 例: http://jenkins.example.com/projectname/webhook/
  3. Secret Tokenの生成: アルファベット・数字・記号の組み合わせで、20文字以上を作成
  4. イベントタイプの選択: プッシュイベント(Push events)やマージリクエスト(Merge request events)などが必要なイベントを指定

注意: Jenkinsサーバー側でのファイアウォール設定(ポート80/443)やHTTPS証明書の有効性を事前に確認してください。


Jenkins側でのWebhook受信設定

Jenkins管理画面(Manage Jenkins > Configure System)で以下を行います。

  1. Webhook URLの取得: /github-webhook/など、独自のエンドポイントを作成
  2. Secret Tokenとの一致確認: GitLab側と同一のトークンを入力(大文字小文字を含むため注意)
  3. GitLabプラグインの有効化: Manage Plugins > AvailableからGitLab Pluginをインストール

イベントタイプのフィルタリング

Webhook送信先のイベント種別を指定することで、不要なパイプライン実行を防ぎます。

イベントタイプ 説明 有効推奨
Push events ブランチへのプッシュ動作時の通知
Merge request events マージリクエスト受理時の通知
Tag push events タグのプッシュ動作時の通知 ×

補足: Merge request eventsは、マージリクエストが承認されたタイミングでCI/CDを実行する際には有効ですが、一部バージョンでは不具合が報告されています。


Pipelineスクリプトの記述例

JenkinsでGitLabとの連携を実現するには、PipelineスクリプトにGitLabリポジトリ接続設定を記述します。ここではDeclarative Pipelineを基準としたサンプルコードを紹介します。

GitLabリポジトリ接続設定

credentialsIdは、Jenkinsで登録したGitLab APIトークンを参照するためのIDです。
- gitステップでは、credentialsIdが指定された認証情報を自動的に使用します
- リポジトリURLにHTTPSとSSHの選択肢があり、セキュリティ上はSSHが推奨されます


Pipelineステージの構成例

ステージの実行条件:
- whenブロックで環境変数(例: BRANCH_NAME)をチェックし、特定のブランチでのみ実行できます
- テスト失敗時にも自動で終了するようにpostセクションでエラーハンドリングを記述


エラーハンドリングの記述方法

補足:
- cleanWs()はワークスペースのリーク防止に有効です
- メッセージ送信先(Slackなど)やエラーレポート形式はチームごとにカスタマイズ可能


認証情報管理のベストプラクティス

JenkinsとGitLabの連携では、認証情報のセキュリティ管理が非常に重要です。 以下に、安全な保存方法と運用のポイントを解説します。

Jenkins Credential Storeの利用方法

  1. Credential Manager画面Manage Jenkins > Manage Credentials)でGitLab APIトークンやSSH鍵などを登録
  2. パイプラインスクリプト内でcredentialsIdを指定することで、Jenkinsが自動で認証情報を取得します

重要: パスワードやトークンは、Jenkins Credential Store以外に保存しないようにしてください
- 環境変数に記載するとリポジトリに漏洩のリスクがあります


GitLab APIトークンのセキュアな保存

  • GitLab側でのAPIトークン発行は、「User Settings > Access Tokens」から実施します。
  • 必要権限(例: read_api)を最小限に設定し、定期的にローテーションしてください
  • APIトークンは、環境変数や.gitconfigに保存せず、Jenkins Credential Store経由で管理するようにしてください

トラブルシューティングのポイント

連携中に発生する代表的なエラーとその対処法を解説します。

401認証失敗時の対処法

  • 原因: Secret Tokenが一致していない、またはAPIトークンの権限不足
  • 確認手順:
  • GitLabとJenkinsのSecret Tokenが完全に一致しているか確認する(大文字小文字含む
  • APIトークンがread_apiなどの必要権限を持っているかをGitLabで再確認する

Webhookイベントの受信確認手順

  • Jenkins側: Manage Jenkins > Script Consoleから以下を実行し、Webhookリスナーの動作をチェックします
    groovy
    import hudson.model.*
    def listener = Hudson.instance.getExtensionList("hudson.plugins.gitlab.GitLabPlugin").get(0)
    println(listener.getWebHookUrl())

  • GitLab側: プロジェクト設定画面でIntegrations > Testボタンをクリックし、Webhookの送信テストを行います


Pipeline実行ログの読み方

Jenkinsのパイプラインログは「Build History」から確認可能です。

状況 表現例 対応方法
失敗時 Error: Could not fetch from remote repo GitLabリポジトリのURLや認証情報を再確認
成功時 Build finished with status: SUCCESS 続行ステージ(Deployなど)を実施

補足: ログは「Advanced Project Options > Log」タブで詳細に確認可能。


他の注意点

  • バージョン依存性:
  • JenkinsのGitLabプラグイン(gitlab-plugin)は、GitLab API v4を前提としています。GitLab <13.0では非対応です。
  • JenkinsのWebhook設定でHTTPSが必須な場合、Jenkinsサーバーに有効なSSL証明書が必要になります。

  • セキュリティ:

  • Secret Tokenは、定期的な変更を推奨(例: 1か月ごと)
  • GitLab側のAPIトークンも、ロールベースのアクセス制御(RBAC)で最小限の権限に設定してください

スポンサードリンク

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


-Jenkins