mito’s blog

IT技術メインの雑記。思い立ったが吉日。

[Jenkins] パイプラインをDocker outside of Dockerで動かす

はじめに

JenkinsをDokerコンテナで動かすのではなく、JenkinsのパイプラインをDocker outside of Dockerで実行します。

  • DooD(Docker outside of Docker)とは
    • コンテナからコンテナを操作したいときに使用します
    • コンテナ内から、ホストのDocker環境で実行されます。
    • DinD (Docker in Docker)は、コンテナ内でDockerデーモンを起動します。


環境

  • Jenkins : 2.332.2
  • Docker : 20.10.13
  • DockerPipelineプラグイン : 1.28


シェルでコンテナを起動

Dockerイメージは、Dockerがインストールされているイメージを選びます。
ホストのdocker.sockをマウントし、コンテナを起動します。


ホストで表示したDockerイメージが、コンテナ内からでも確認できます。

$ docker images
REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
docker       git       cd38c7dd585a   2 days ago   307MB
$ docker run -ti --rm -v /var/run/docker.sock:/var/run/docker.sock docker:git /bin/ash
/ # docker images  //ホストと同様のイメージが表示されます
REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
docker       git       cd38c7dd585a   2 days ago   307MB
/ # exit
$ 


JenkinsパイプラインをDooDで実行

JenkinsパイプラインをDooDで実行し、Dockerイメージを作成します。

  • Jenkinsパイプライン
    • agent dockerの引数argsに、"-v /var/run/docker.sock:/var/run/docker.sock -u root"を指定します。
    • ”-u root”を付けないと、権限がなく失敗します。
pipeline {
    agent {
        docker { 
            image "docker:git"
            args "-v /var/run/docker.sock:/var/run/docker.sock -u root"
        }
    }
    
    stages {
        stage('git_clone') {
            steps {
                sh "git clone https://github.com/dockersamples/node-bulletin-board.git"
            }
        }

        stage('docker_build') {
            steps {
                sh "docker build --tag bulletinboard:1.0 ./node-bulletin-board/bulletin-board-app"
            }
        }
        
        stage('delete_ws') {
            steps {
                cleanWs()
            }
        }       
    }
}


  • 実行ログ
Started by user user
[Pipeline] Start of Pipeline
[Pipeline] node
Running on node in /home/ec2-user/workspace/job_DooD
[Pipeline] {
[Pipeline] isUnix
[Pipeline] withEnv
[Pipeline] {
[Pipeline] sh
+ docker inspect -f . docker:git
.
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] withDockerContainer
node does not seem to be running inside a container
$ docker run -t -d -u 1000:1000 -v /var/run/docker.sock:/var/run/docker.sock -u root -w /home/ec2-user/workspace/job_DooD -v /home/ec2-user/workspace/job_DooD:/home/ec2-user/workspace/job_DooD:rw,z -v /home/ec2-user/workspace/job_DooD@tmp:/home/ec2-user/workspace/job_DooD@tmp:rw,z -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** docker:git cat
$ docker top 199eef053ea1abf7afed79c2504b84d761e89a4e28e2089199bf6f899db33340 -eo pid,comm
[Pipeline] {
[Pipeline] stage
[Pipeline] { (git_clone)
[Pipeline] sh
+ git clone https://github.com/dockersamples/node-bulletin-board.git
Cloning into 'node-bulletin-board'...
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (docker_build)
[Pipeline] sh
+ docker build --tag bulletinboard:1.0 ./node-bulletin-board/bulletin-board-app
Sending build context to Docker daemon  45.57kB

Step 1/7 : FROM node:current-slim
current-slim: Pulling from library/node
42c077c10790: Pulling fs layer
()
Step 7/7 : COPY . .
 ---> 13886f72f686
Successfully built 13886f72f686
Successfully tagged bulletinboard:1.0
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (delete_ws)
[Pipeline] cleanWs
[WS-CLEANUP] Deleting project workspace...
[WS-CLEANUP] Deferred wipeout is used...
[WS-CLEANUP] done
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
$ docker stop --time=1 199eef053ea1abf7afed79c2504b84d761e89a4e28e2089199bf6f899db33340
$ docker rm -f 199eef053ea1abf7afed79c2504b84d761e89a4e28e2089199bf6f899db33340
[Pipeline] // withDockerContainer
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS


ホストからDockerイメージを確認すると、ビルド元やビルドしたイメージがあります。

$ docker images
REPOSITORY      TAG            IMAGE ID       CREATED          SIZE
bulletinboard   1.0            13886f72f686   19 seconds ago   265MB
docker          git            cd38c7dd585a   2 days ago       307MB
node            current-slim   2d19bed8d228   6 days ago       245MB


参考