LoginSignup
13
15

More than 3 years have passed since last update.

GitLabとJenkinsのCI連携設定

Last updated at Posted at 2021-02-04

よく忘れそうになるので、自分用の備忘としても残しておきます。

やりたいこと

  • GitLabでのMR作成やpushやコメント書き込みをトリガーにしてJnekinsジョブを動かす
  • JenkinsはGitLabからソースを取得してジョブを実行
  • Jenkinsはジョブの実行結果を元にGitLabのMRステータスを変更したり、コメント等で通知する

GitLabとJenkinsでお互いに情報を取り合う必要があるので、双方でトークンの発行や登録をする必要があります。
Jenkinsがややこしいです。

GitLab事前準備

GitLabでJenkinsユーザーの作成

JenkinsからGitLabにアクセスするためのユーザーを作成する。
当然、ビルドとかしたいレポジトリに対してアクセス権を付ける必要がある。
マージリクエストとかにコメントさせたいなら、Reporter以上が必要。

ユーザーを作成したら、一度ログアウトしてJenkinsユーザーで再度ログイン。

アクセストークンの取得

Settings -> Access Tokens

適当な名前と権限を入れます。
ビルドとかするだけならread_repositoryがあればOK.
Issueとかに書き込みをさせたいなら、apiにチェック

トークンが発行されるのでコピーしておきます。(1)

Jenkins側の設定

GitLabプラグインの導入

Gitlab Pluginから入手。
これを入れることにより、Jenkinsの各種画面にGitLabへの接続設定が出てくる。

Credentialの登録

GitLabで作成したアクセストークンをJenkins Credentialに登録します。

Manage Jenkins -> Credentials -> global -> Add Credentials

KindにGitLab API Tokenを入れる。
tokenにGitLabで取得したトークン(1)を入れる。

GitLab接続情報の追加

今作成したCredentialをJenkinsに登録します。なんか二度手間です。

Manage Jenkins -> Configure System -> Gitlab

Connection Nameは適当な名前を入力。
GitLabで作成したJenkins用ユーザーのアクセストークンを入力します。
Credentialsはプルダウンで先ほど登録したGitLabトークンを選択します。

image.png

Test Connectionを押して、うまくいけばSuccessと出ます。
※ドメインがgitlabとなってるのはDocker-Compsoeで動かしてるからです。

ジョブ作成

New Item -> PipelineFreestyle Projectなど

適当なジョブを作成します。

ビルドトリガーの設定

GitLabからのWebhookでビルドを開始する設定を入れます
ジョブの編集で以下にチェックを入れます。

Build Triggers -> Build when a change is pushed to GitLab

Webhook用のURLが出ているので、これをコピーします(2)。あとでGitLab側に入力します。
また、Advancedの設定を展開して、一番下のSecret Tokenをコピーします(3)。これもあとでGitLab側に入力します。もし空欄なら自分で入力するか、Generateでランダムな値を生成します。
下の方のチェックにはどういう時にビルド開始したいかを設定しておきます。

GitLab側の設定

Webhook許可先の登録

Admin Area -> Settings -> Network -> Outbound requests

ローカルネットワーク内でWebhookを投げたい時は、許可設定を入れる必要があります。
Allow requests to the local network from web hooks and servicesにチェックを入れるか、allow listに入れます。

Webhookの作成

GitLab側でWebhookを出す設定を入れます。

レポジトリのSettings -> Integrations

URLにはJenkinsのジョブ編集画面でコピーしたURL(2)を入力。
Secret TokenにはJenkinsで作成したトークン(3)を入力。

image.png

Jenkinsジョブを動かすトリガにしたいイベントにチェックを入れる。
レポジトリにpushした時、マージリクエスト作成時、コメントが付いた時など。

Jenkins側でも条件を設定しましたが、あっちはWebhookを受ける条件。
こっちはどういう時にWebhookを出すかです。
pushトリガでビルドを開始したいなら、両方でpushにチェックを入れる必要があります。

登録したらTestを選択して適当なWebhookを投げてみましょう。
200 OKが返ってきたらOKです。

動確

GitLabに対してコードをpushした後に、Jenkinsのジョブが勝手に動いてるはずです。
JenkinsのジョブからGitlabのMRステータスを変更したりコメントを書き込んだりしたい時は、パイプラインの中でGitLabのAPIを叩きましょう。

まとめ

トークン

トークン 発行する場所 使う場所 用途
Jenkins ジョブ実行用トークン Jenkinsのパイプライン編集画面 GitLabのWebhook設定 GitLabからWebhookでJenkinsのジョブを実行する
Jenkins APIトークン Jenkinsのユーザー設定 - 今回は使わないので1つ目と間違えないように注意
GitLab APIトークン GitLabのユーザーの設定 JenkinsのCredentials設定 JenkinsからGitLabのソースを読み取ったり、コメントを投稿したりする

ConnectionやCredentials設定

設定項目 登録するもの
JenkinsのGlobal credentials GitLab APIトークン
Jenkinsシステム設定のGitLab Connection Jenkins Credential
Jenkinsのパイプライン編集画面 GitLab Connection
13
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
15