Jenkins を Docker 上で動かす
基本
概ね docker
コマンドの説明。
起動
docker run --name jenkins -p 8080:8080 -p 50000:50000 --rm jenkins/jenkins:lts-jdk11
標準出力に Admin ユーザーのパスワードが出力される。
または /var/jenkins_home/secrets/initialAdminPassword
を参照する。
docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
-d
を付けてデーモンとして起動した場合はコンテナ ID が出力される。
> docker run -d --name jenkins -p 8080:8080 -p 50000:50000 --rm jenkins/jenkins:lts-jdk11
6d67cdf78a1c7501c139eeb0db7e67afc6f83796854b99bd50171d91b1bb5454
http://localhost:8080/ へアクセス。
ワークスペースは /var/jenkins_home
になっています。
停止
デーモンで起動しない場合は別のターミナルから停止。
docker stop jenkins
破棄
コンテナの破棄。
起動時に --rm
オプションを付けていれば停止時に破棄される。
docker rm jenkins
イメージ等もまとめて破棄。
docker system prune --all --volumes
参考になりそうな資料
Docker Compose V2
services:
jenkins:
image: jenkins/jenkins:lts-jdk11
ports:
- 8080:8080
- 50000:50000
volumes:
- ./jenkins_home:/var/jenkins_home
environment:
- JAVA_OPTS="-Djenkins.install.runSetupWizard=false"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080"]
interval: 10s
timeout: 5s
retries: 5
start_period: 30s
/jenkins_home/*
!/jenkins_home/init.groovy.d/
docker compose up -d
jenkins.install.runSetupWizard=false
を指定することでセットアップウィザードをスキップできる。
プラグインはインストールされていない状態なので別途インストールする必要がある。
ログインなしでアクセスできてしまうので公開する場合はグローバルセキュリティの設定をする必要がある。
$JENKINS_HOME
をマウントしているのでコンテナを破棄してもデータが引き継がれる。
コンテナを破棄する場合は docker compose down
、データを破棄する場合は git clean -fdx
でリセット可能。
プラグイン
インストール
jenkins-plugin-cli
を使用してインストールできます。
FROM jenkins/jenkins:lts-jdk11
COPY plugins.txt /usr/share/jenkins/ref/plugins.txt
RUN jenkins-plugin-cli -f /usr/share/jenkins/ref/plugins.txt
compse.yaml
は Dockerfile
を使用するように書き換えます。
services:
jenkins:
build: .
ports:
- 8080:8080
- 50000:50000
volumes:
- ./jenkins_home:/var/jenkins_home
environment:
- JAVA_OPTS="-Djenkins.install.runSetupWizard=false"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080"]
interval: 10s
timeout: 5s
retries: 5
start_period: 30s
plugins.txt
にはインストールしたいプラグインを並べます。
セットアップウィザードで推奨されるプラグインは Jenkins 2.332.1 で以下の通りでした。
(インストールするプラグインを選ぶ画面で調査)
cloudbees-folder
antisamy-markup-formatter
build-timeout
credentials-binding
timestamper
ws-cleanup
ant
gradle
workflow-aggregator
github-branch-source
pipeline-github-lib
pipeline-stage-view
git
ssh-slaves
matrix-auth
pam-auth
ldap
email-ext
mailer
詳細はここで調べられます。
アップデートセンターにリストもあります。
アップデート
特にバージョンを指定していないので latest でインストールされていると思うのですが依存関係の兼ね合いかプラグイン管理画面に行くと数個アップデートできるものがあるようです。
jenkins-plugin-cli
を使ってアップデートもできます。
他にもやり方はありそう。
Jenkins CLI
http://localhost:8080/cli/ にもドキュメントがある。(ドメインは Jenkins のものへ)
Docker
試してみたけどうまく動かせなかったので Jenkins を動かしてるコンテナにインストール。
> docker compose exec jenkins bash
# cd
# curl -O http://localhost:8080/jnlpJars/jenkins-cli.jar
# java -jar jenkins-cli.jar -s http://localhost:8080/ -webSocket help
ジョブの作成に使用できるかと思ったけど結局 config.xml を用意しないといけないので没。
手動で作成した config.xml を直接 /var/jenkins_home/
配下にマウントした方がよさそう。
java -jar jenkins-cli.jar -s http://localhost:8080/ -webSocket create-job < config.xml
ジョブの実行には使える。
java -jar jenkins-cli.jar -s http://localhost:8080/ -webSocket build job-1 -f -v
JCasC
Configuration as Code
Job DSL