Dockerを使ってJenkinsサーバを立てようと思ったのですが、プラグインをインストールした状態のイメージを自分で作りたくて色々調べたので、その結果を書いていこうと思います。
まず最初に見つけたのが下記のリポジトリのものです。
docker-composeで立ち上げる際に、env_fileを食わせてやることで、プラグインインストール済みのJenkinsサーバが立ち上がるらしいのですが、インストールしたいプラグインを入れても、なぜか上手くいかなかったので別のを探すことに。
引き続き調べていたら、Jenkins公式の配っているイメージでもプラグインをインストール出来ることがわかったので、それを試してみました。
FROM jenkins
COPY plugins.txt /usr/share/jenkins/ref/
COPY custom.groovy /usr/share/jenkins/ref/init.groovy.d/custom.groovy
RUN /usr/local/bin/plugins.sh /usr/share/jenkins/ref/plugins.txt
こんな感じで書くとプラグインがインストール出来ると書いてあるのですが、依存関係を自動で解決してくれないので、依存しているプラグインを全部自力で順番通りに書かないといけないということで、ちょっとだけやってみたのですが、現実的ではないということでこれも諦めました。
Jenkinsのコンテナ作って中に入って色々見ていたら、気になるシェルスクリプトを見つけたので、試しに使ってみることにしました。
FROM jenkins
RUN /usr/local/bin/install-plugins.sh git github
こんな感じで、インストールしたいプラグインIDを空白区切りで列挙します。
記載が終わったらビルドして新しいJenkinsのイメージを作ります。
docker build . -t jenkins
続いて、docker-compose.ymlに下記のように指定します。
jenkins:
image: jenkins
container_name: jenkins
ports:
- "8080:8080"
- 50000
volumes_from:
- volumes
environment:
- JAVA_OPTS="-Djenkins.install.runSetupWizard=false"
volumes:
image: busybox
container_name: jenkins_data
volumes:
- /var/jenkins_home
この中でJenkinsの初回起動時のウィザードを出さないようにしています。
で、
docker-compose up -d
で起動します。
http://localhost:8080/
にアクセスして、Jenkinsのプラグイン管理の画面に行くと、ちゃんとインストールされてました!
DockerHubの方のページには書いてなかったので気づけなかったのですが、githubの方にはちゃんと書いてありました・・・。
なんにせよこれでプラグインの依存関係を気にせず入れれるようになりました。