2021年10月29日金曜日

Docker な Jenkins でプラグインインストール済みイメージを作る

 表題の件は検索すればすぐ見つかる内容ですが、古い方法のほうが検索上位に来ることが多いのでこの記事を書きました。

旧方式(install-plugins.sh)

プラグイン名や、プラグインが列挙されたテキストファイルを渡すとインストールしてくれる shell スクリプトが Jenkins のベースイメージに入っているのでそれを使います。

COPY JenkinsPlugins.txt plugins.txt
RUN /usr/local/bin/install-plugins.sh < plugins.txt

plugins.txt の中身は以下のように「プラグイン名:バージョン」となっています。

analysis-model-api:10.3.0
ansicolor:1.0.0
antisamy-markup-formatter:2.1
apache-httpcomponents-client-4-api:4.5.13-1.0
authentication-tokens:1.4
authorize-project:1.4.0
badge:1.8

この方法は既に Deprecated です。
https://github.com/jenkinsci/docker/blob/master/README.md#install-plugins-script-deprecated

一部プラグインがインストールできないなくて、調べたことがきっかけで新方式を知りました。
実際にはツールの問題じゃなく、lts イメージを使ってたのが直接の原因でしたが。
Some plugins failed to download! Not downloaded とエラーになる場合は、lts-jdk11 のイメージを使いましょう。

新方式(jenkins-plugin-cli)

新しい方法は CLI を使います。CLI を使って操作するのが現在の主流のようです。
https://github.com/jenkinsci/docker/blob/master/README.md#plugin-installation-manager-cli
この CLI はベースイメージに入っているので追加インストールとかは不要です。

COPY JenkinsPlugins.txt plugins.txt
RUN jenkins-plugin-cli --plugin-file plugins.txt

plugins.txt の中身は install-plugins.sh のときと同じで大丈夫です。
プラグイン列挙ファイルを渡す場合は --plugin-file(-f) を使います。
オプションの詳細は README を参照してください。
https://github.com/jenkinsci/plugin-installation-manager-tool#cli-options

インストールされているプラグインリストを取得するには以下のようにすれば可能なので、イメージを起動後に手動でプラグインをインストール後、docker exec とかでコンテナに入ってコマンドを実行してください。

$ jenkins-plugin-cli --list

Installed plugins:
ace-editor 1.1
analysis-model-api 10.3.0
ansicolor 1.0.0
antisamy-markup-formatter 2.1
apache-httpcomponents-client-4-api 4.5.13-1.0
authentication-tokens 1.4
authorize-project 1.4.0
.
.
.
workflow-job 2.41
workflow-multibranch 2.24
workflow-scm-step 2.13
workflow-step-api 2.24
workflow-support 3.8
ws-cleanup 0.39

Bundled plugins:

All requested plugins:

Plugins that will be downloaded:

Resulting plugin list:
ace-editor 1.1
analysis-model-api 10.3.0
ansicolor 1.0.0
antisamy-markup-formatter 2.1
apache-httpcomponents-client-4-api 4.5.13-1.0
authentication-tokens 1.4
authorize-project 1.4.0
.
.
.
workflow-job 2.41
workflow-multibranch 2.24
workflow-scm-step 2.13
workflow-step-api 2.24
workflow-support 3.8
ws-cleanup 0.39
Done

ただ、この出力をそのまま --plugin-file として渡せないのでスクリプトコンソールで出力したほうが手っ取り早いかもしれません。
その場合は下記のようなスクリプトを実行することになると思います。

def plugins = jenkins.model.Jenkins.instance.getPluginManager().getPlugins()
plugins.each {
    println ("${it.getShortName()}:${it.getVersion()}")
} 
最後に

今回はプラグインの事前インストールでしたが、Jenkins の Docker イメージ使ってちょっとやってみたいことがあるので進展がありましたら、またブログにしたいと思います。
では。

0 件のコメント:

コメントを投稿