背景:
私は DockerでのJenkinsのダウンロードと実行 をセットアップしてJenkins
サーバーをセットアップしました。 Docker
を実行するために次のパラメーターを使用しました。
docker run \
-u root \
--rm \
-d \
-p 8080:8080 \
-p 50000:50000 \
-v jenkins-data:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
jenkinsci/blueocean
ビルドは正常に実行されていますが、Integration Test
ステージになると、MySQL
データベースが必要になります。
計画は 複数のコンテナを使用する ですが、私のJenkinsfile
は次のとおりです:
pipeline {
agent {
docker {
image 'maven:3-Alpine'
args '-v /root/.m2:/root/.m2'
}
}
stages {
stage('Build') {
when {
changeRequest()
}
steps {
sh 'mvn -B -DskipTests clean package'
}
}
stage('Test') {
agent {
docker {
image 'mysql/mysql-server'
args '--name some-mysql -e MYSQL_ROOT_PASSWORD=password -d'}
}
steps {
sh 'mvn test -DforkCount=0'
sh '''
docker exec some-mysql sh -c 'exec mysql < ./db/dump.sql
'''
}
post {
always {
junit 'target/surefire-reports/*.xml'
}
}
}
}
}
./db/dump.sql
は、Jenkinsfile
サブディレクトリのdb
と同じgitリポジトリにあります。
問題:
[workspace@2] Running Shell script
+ docker inspect -f . mysql/mysql-server /var/jenkins_home/jobs/myproject/branches/master/workspace@2@tmp/durable-77d559d6/script.sh: line 1: docker: not found
[Pipeline] sh
[workspace@2] Running Shell script
+ docker pull mysql/mysql-server /var/jenkins_home/jobs/myproject/branches/master/workspace@2@tmp/durable-21da0ff2/script.sh: ... line 1: docker: not found
ERROR: script returned exit code 127
Finished: FAILURE
ルートとして実行しているので、特権は問題ではないはずですよね? パイプラインでのDockerの使用 いくつかのソリューションが提供されましたが、他のソリューションのほうがIntegration Test
環境を設定する方がはるかに簡単ですか?
コンソール出力はエラーを説明します:
line 1: docker: not found
JenkinsエグゼキューターにDockerがインストールされていない可能性があるため、シェルスクリプトはdockerを見つけることができません。 (Jenkins Dockerプラグインは、DockerがシェルスクリプトなどのJenkins外部プロセスで使用できることを保証しません。)
Dockerクライアントがコンテナーにインストールされていません。 dockerをインストールするか、jenkins + dockerのイメージを使用してください。また、ホストマシンのdockerデーモンが使用されており、マウントする必要があります。
以下のコマンドが役立ちます:
docker volume create jenkins-master-data
docker run --name jenkins-master -u 0 --privileged -p 8080:8080 -v /var/run/docker.sock:/var/run/docker.sock -v jenkins-master-data:/var/jenkins_home gustavoapolinario/jenkins-docker