よく忘れそうになるので、自分用の備忘としても残しておきます。
やりたいこと
- 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トークンを選択します。
Test Connectionを押して、うまくいけばSuccessと出ます。
※ドメインがgitlabとなってるのはDocker-Compsoeで動かしてるからです。
ジョブ作成
New Item
-> Pipeline
やFreestyle 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)を入力。
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 |