約束の地

キャロ組

Jenkins(Jenkinsfile)と GitLab で最低限の CI 環境を作る

流れ

1. Jenkins で Multibranch Pipeline のジョブを作る

「新規ジョブ作成」から「Multibranch Pipeline」のジョブを作ります。ここでは仮に your-project-name というジョブを作ったとします。

f:id:gregminster:20180326174221p:plain

2. GitLab でプロジェクトを作り、Integrations の Webhook を設定する

GitLab のプロジェクト設定から「Integrations」を選択します。そして「URL」のところに Jenkins の URI を入れます。ここで Jenkins の URI(Webhook で叩く URI)は以下のとおりです。

  • https://jenkins/project/your-project-name

project の部分は予約語です。Jenkins のジョブを階層構造で配置している場合はそれにならって URI も階層構造にします。階層の合間に /job/ というディレクトリが入ってきますが、それを全て削除したものが目的の URI となります。

f:id:gregminster:20180327115914p:plain

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 が走ります(更新されていないブランチには何もしない)。

f:id:gregminster:20180326180825p:plain

補足

  • GitLab のパーミッションの設定には注意しましょう
  • Jenkinsfile の中に bash でコマンドを書くベタープラクティスはこちらかと思います
  • stage を使って「ステージ」を分けるとこんな感じに見通しがよくなります*2

f:id:gregminster:20180326181843p:plain

  • Blue Ocean を使うとさらにモダンになります

f:id:gregminster:20180326184550p:plain

余談

まあ CircleCI とか Travis CI とか使っとけよと言いたくなるとは思いますが、オンプレ完結だとこの構成が多いのかなと思って。

Jenkins職人に属人化しないようになるべくコード化してしまいましょう。

*1:詳しくはここでは省略します

*2:他にも良いノウハウは溢れていると思います

Powered by はてなブログ