Open8

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

compose.yaml
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
.gitignore
/jenkins_home/*
!/jenkins_home/init.groovy.d/
docker compose up -d

jenkins.install.runSetupWizard=false を指定することでセットアップウィザードをスキップできる。
プラグインはインストールされていない状態なので別途インストールする必要がある。

ログインなしでアクセスできてしまうので公開する場合はグローバルセキュリティの設定をする必要がある。

$JENKINS_HOME をマウントしているのでコンテナを破棄してもデータが引き継がれる。
コンテナを破棄する場合は docker compose down、データを破棄する場合は git clean -fdx でリセット可能。

雪猫雪猫

プラグイン

インストール

https://github.com/jenkinsci/docker#usage-1

jenkins-plugin-cli を使用してインストールできます。

Dockerfile
FROM jenkins/jenkins:lts-jdk11
COPY --chown=jenkins:jenkins plugins.txt /usr/share/jenkins/ref/plugins.txt
RUN jenkins-plugin-cli -f /usr/share/jenkins/ref/plugins.txt

compse.yamlDockerfile を使用するように書き換えます。

compose.yaml
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 で以下の通りでした。
(インストールするプラグインを選ぶ画面で調査)

plugins.txt
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

詳細はここで調べられます。

https://plugins.jenkins.io/

アップデートセンターにリストもあります。

https://updates.jenkins.io/latest/

アップデート

特にバージョンを指定していないので latest でインストールされていると思うのですが依存関係の兼ね合いかプラグイン管理画面に行くと数個アップデートできるものがあるようです。

jenkins-plugin-cli を使ってアップデートもできます。

https://github.com/jenkinsci/docker#updating-plugins-file

雪猫雪猫

Jenkins CLI

https://www.jenkins.io/doc/book/managing/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