Jenkinsをdockerコンテナーとして実行していますが、パイプラインを使用してDockerイメージを構築したいのですが、Jenkinsコンテナーは常にDockerが見つからないことを通知します。
[simple-tdd-pipeline] Running Shell script
+ docker build -t simple-tdd .
/var/jenkins_home/workspace/simple-tdd-pipeline@tmp/durable-
ebc35179/script.sh: 2: /var/jenkins_home/workspace/simple-tdd-
pipeline@tmp/durable-ebc35179/script.sh: docker: not found
Jenkinsイメージを実行する方法は次のとおりです。
docker run --name myjenkins -p 8080:8080 -p 50000:50000 -v
/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock
jenkins
JenkinsイメージのDockerFileは次のとおりです。 https://github.com/jenkinsci/docker/blob/9f29488b77c2005bbbc5c936d47e697689f8ef6e/Dockerfile
Dockerクライアントがありません。 Dockerfileに次のようにインストールします。
RUN curl -fsSLO https://get.docker.com/builds/Linux/x86_64/docker-17.04.0-ce.tgz \
&& tar xzvf docker-17.04.0-ce.tgz \
&& mv docker/docker /usr/local/bin \
&& rm -r docker docker-17.04.0-ce.tgz
編集:2018年5月
Guillaume Husta で指摘されているように、この jpetazzoのブログ記事 はこの手法を推奨しません。
この投稿の以前のバージョンは、ホストからコンテナへの
bind-mount
dockerバイナリを推奨していました。 Docker Engineは(ほぼ)静的ライブラリとして配布されなくなったため、これはもはや信頼できません。
Dockerクライアントは here の説明に従ってコンテナ内にインストールする必要があります。また、jenkins
ユーザーはdocker
グループに属している必要があるため、次を実行します。
$ docker exec -it -u root my-jenkins /bin/bash
# usermod -aG docker jenkins
最後にmy-jenkins
コンテナを再起動します。
元の答え:
次のようなホストのdocker engine
を使用できます @ Adrian Mouat blog article 。
docker run -d \
--name my-jenkins \
-v /var/jenkins_home:~/.jenkins \
-v /var/run/docker.sock:/var/run/docker.sock \
-p 8080:8080 jenkins
これにより、Hostおよびjenkinsコンテナーに複数のdockerエンジンバージョンが存在することを回避できます。
Jenkinsインターフェースで「Jenkins /グローバルツール構成の管理」に移動します
次に、「Dockerインストール」までスクロールダウンし、「Add Docker」をクリックします。 "myDocker"のような名前を付けます
「自動的にインストール」と書かれたボックスをチェックしてください。 「インストーラーの追加」をクリックして、「docker.comからダウンロード」を選択します。 。 Dockerバージョンは「最新」のままにします。 [保存]をクリックしてください。
Dockerコマンドを実行する前に、Jenkinsfileに次のステージを追加します。
stage('Initialize'){
def dockerHome = tool 'myDocker'
env.PATH = "${dockerHome}/bin:${env.PATH}"
}
docker run -d \
--group-add docker \
-v $(pwd)/jenkins_home:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-v $(which docker):/usr/bin/docker \
-p 8080:8080 -p 50000:50000 \
jenkins/jenkins:lts
Dockerの実行時にオプション--group-add docker
を追加するだけです。