Назад | Перейти на главную страницу

Настроить базу данных для интеграционного тестирования с Jenkins в Docker

Задний план:
Я следил Скачивание и запуск 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. Также используется демон докера хост-машины, и его необходимо смонтировать.

Следующие команды должны помочь:

  1. docker volume create jenkins-master-data

  2. 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