はじめに
DooDはJeknisのジョブ実行時にホストにコンテナを作成しビルドします。
コンテナを利用することにより、ビルドサーバーの構築の必要性がなくなります。
ただし、本手順はセキュリティのリスクがあるので乱用しないようにお願いします。
前提
MacOS
以下がインストールずみであること。
- docker
- docker-compose
Jenkins
以下のプラグインが導入済みであること。
- docker plugin
- Docker Pipeline
手順
Dockerfileの作成
FROM jenkins/jenkins:lts
ENV DEBIAN_FRONTEND noninteractive
USER root
RUN apt-get update -y \
&& curl -fL -o docker.tgz "https://download.docker.com/linux/static/test/x86_64/docker-19.03.9.tgz" \
&& tar --strip-components=1 -xvzf docker.tgz -C /usr/bin \
&& gpasswd -a jenkins root
USER jenkins
jenkinsユーザーをrootグループに所属さしています。所属させることで、Dockerを操作できるようになります。
ただし、rootグループに属させるのはセキュリティ上良くないので、乱用しないでください。
ちなみにLinux上だとdockerグループに所属させる。
Dockerfile ビルド
以下コマンドを実施
docker build -t <任意のイメージ名> .
.
はDockerfileのあるディレクトリを指定しています。
docker-compose.ymlの作成
version: "3"
services:
jenkins:
container_name: jenkins
image: <任意のイメージ名>
ports:
- 8080:8080
volumes:
- ./jenkins_home:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock
/var/run/docker.sock マウントすることでホストのDockerを操作できるようにします。
docker-compose バックグラウンド実行
以下コマンドでバックグラウンドで実行します。
docker-compose up -d
docker-compose.ymlのあるディレクトリで実行すること。
Jenkinsにプラグインを導入
あとはDocker pluginを導入し、ジョブを作成すると出来上がりです。
まとめ
Jenkinsサーバーを使っているとスレイブのビルドサーバーが汚れがちなので、DockerでCIを回そうと思った。しかし、GithubActionsかCircleCIを使えば良いような気がした。
Jenkinsを使用するメリットでなんだろうか。
あと、rootユーザーに所属させるよりもっと良い方法があれば教えてください。
参考文献