page_adsence

2017年9月10日日曜日

Jenkins公式のDockerイメージを使って、プラグインインストール済みのJenkinsイメージを作る

Dockerを使ってJenkinsサーバを立てようと思ったのですが、プラグインをインストールした状態のイメージを自分で作りたくて色々調べたので、その結果を書いていこうと思います。

まず最初に見つけたのが下記のリポジトリのものです。

blacklabelops/jenkins

docker-composeで立ち上げる際に、env_fileを食わせてやることで、プラグインインストール済みのJenkinsサーバが立ち上がるらしいのですが、インストールしたいプラグインを入れても、なぜか上手くいかなかったので別のを探すことに。

引き続き調べていたら、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の方にはちゃんと書いてありました・・・。

jenkinsci/docker

なんにせよこれでプラグインの依存関係を気にせず入れれるようになりました。