Jenkinsのblue oceanでsubmoduleをupdate

April 05, 2019

Jenkinsのblue oceanというプラグインを使ってみました。gitの設定だけすれば、あとは取ってきたJenkinsfileを使って勝手にパイプラインを実行してくれますし、Jenkinsfileの編集をブラウザ上で行うためのエディタもついており、GUIでパイプラインの設定を入力していけばJenkinsfileを作成してくれるので非常に便利です。ただ、gitのsubmoduleを使っている場合にどのようにupdateすればいいのかがよくわからず、はまってしまいました。結論から言うと、blue oceanのエディタではgitがチェックアウトするときの挙動など、細かい設定はできませんので、blue oceanが生成したジョブの設定画面でgitの設定をカスタマイズする必要がありました。blue oceanはまだ開発中のためか、機能的に未実装なところが色々あるようで、例えばkubernetesのPodTemplateの設定もまだできません。ちなみに今回は、最初からJenkinsfileをblue oceanのエディタを使わず自分で作成しました。以下は、submoduleのupdateを行うために、色々試したり調べた時のメモです(間違えていたらすみません)。

blue oceanでパイプラインの作成を開始すると、クローンするgitのリポジトリや認証情報を入力することになる。 これらの入力が終わるとmultibranch pipelineのジョブが自動的に作成される。 Gitプラグインの設定(Branch sources)には上記の入力が反映される。この時、チェックアウトの方法など をカスタマイズしたい場合は、Gitプラグインの設定を直接変更する。例えば、チェックアウトした後にsubmoduleのinit、updateもしたい場合は、Behavioursのところで、advanced submodule behavioursを追加する。

※submoduleをcloneする場合に別途認証情報が必要(例えば、親リポジトリと異なる場所からcheckoutする場合)になるケースがあると思うが、 現時点ではその認証情報を設定することはできない模様(親リポジトリの認証情報は使えそう)。よって、その場合はpublicなリポジトリに変更するか、親リポジトリと同じ認証情報が使えるリポジトリに変更する必要がある。

blueoceanのパイプラインを実行すると、まず最初に登録したリポジトリから、ブランチの情報を取ってくるためにチェックアウトされるが、 これはmasterエージェントで自動的に実行される(multibranch pilelineジョブの機能)。この時、上記で設定したGitのプラグインの設定が使用される。 そして、指定したブランチのJenkisfileを用いてパイプラインが実行される。 実際にパイプラインを実行するのは、Jenkinsfileで指定しているagentである。 Jenkinsfileのパイプラインの実行が開始されると指定したagentが生成される。 そして、自動的にblue oceanで設定したブランチがチェックアウトされる。 それが終わると各ステップの実行が開始される。