Задний план:
Я следил Скачивание и запуск 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
Поскольку работа с правами root не должна быть проблемой, верно? Использование Docker с конвейером предоставил несколько решений, будет ли другое решение намного проще настроить Integration Test
Окружающая среда?
Вывод консоли описывает ошибку:
line 1: docker: not found
Сценарий оболочки не может найти докер, вероятно, потому, что Docker не установлен на вашем исполнителе Jenkins. (Плагин Jenkins Docker не гарантирует, что Docker будет доступен для внешних процессов Jenkins, таких как сценарии оболочки.)
Клиент Docker не установлен на контейнере. Либо установите докер, либо используйте образ jenkins + 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