流れ
1. Jenkins で Multibranch Pipeline のジョブを作る
「新規ジョブ作成」から「Multibranch Pipeline」のジョブを作ります。ここでは仮に your-project-name
というジョブを作ったとします。
2. GitLab でプロジェクトを作り、Integrations の Webhook を設定する
GitLab のプロジェクト設定から「Integrations」を選択します。そして「URL」のところに Jenkins の URI を入れます。ここで Jenkins の URI(Webhook で叩く URI)は以下のとおりです。
https://jenkins/project/your-project-name
project
の部分は予約語です。Jenkins のジョブを階層構造で配置している場合はそれにならって URI も階層構造にします。階層の合間に /job/
というディレクトリが入ってきますが、それを全て削除したものが目的の URI となります。
3. GitLab のプロジェクトに Jenkinsfile をコミットする
Jenkins のデフォルト設定では Jenkinsfile というファイル名のファイルに CI の中身を記述していきます。Jenkinsfile の書式は公式ドキュメントや先人の資産を参考にしましょう*1。
動作確認のために以下の Jenkinsfile を書いてコミットするとよいと思います。
node { print "Hello, Jenkinsfile and GitLab!" }
4. GitLab へプッシュして動作を確認する
上記までの設定ができていれば、GitLab にプッシュすると Webhook が発動し、Jenkinsfile を解釈して、CI が走るはずです。
Jenkins のコンソール出力に Hello, Jenkinsfile and GitLab!
と出ていれば OK です。
なおブランチについては、存在するブランチを自動で認識してそれぞれのパイプラインを作ってくれます。Webhook が発動した際には更新されたブランチだけを対象に CI が走ります(更新されていないブランチには何もしない)。
補足
- GitLab のパーミッションの設定には注意しましょう
- Jenkinsfile の中に bash でコマンドを書くベタープラクティスはこちらかと思います
stage
を使って「ステージ」を分けるとこんな感じに見通しがよくなります*2
Blue Ocean
を使うとさらにモダンになります
余談
まあ CircleCI とか Travis CI とか使っとけよと言いたくなるとは思いますが、オンプレ完結だとこの構成が多いのかなと思って。
Jenkins職人に属人化しないようになるべくコード化してしまいましょう。