Справочная информация:
Я следил за Загрузка и запуск Jenkins в Docker для установки 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
находится в том же репозитории git с Jenkinsfile
в подкаталоге db
.
Проблема:
[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
Сценарий оболочки не может найти докер, вероятно, потому, что Docker не установлен на вашем исполнителе Jenkins. (Подключаемый модуль Jenkins Docker не гарантирует, что Docker будет доступен для внешних процессов Jenkins, таких как сценарии оболочки.)
Клиент 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