Настройка базы данных для тестирования интеграции с 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

Поскольку работа с правами суперпользователя не должна быть проблемой, верно? Использование Docker с конвейером предоставило несколько решений, будет ли другое решение намного проще настроить среду Integration Test ?

1
задан 29 June 2018 в 23:34
2 ответа

Вывод консоли описывает ошибку:

line 1: docker: not found

Сценарий оболочки не может найти докер, вероятно, потому, что Docker не установлен на вашем исполнителе Jenkins. (Подключаемый модуль Jenkins Docker не гарантирует, что Docker будет доступен для внешних процессов Jenkins, таких как сценарии оболочки.)

1
ответ дан 3 December 2019 в 23:14

Клиент Docker не установлен в контейнере. Либо установите докер, либо используйте образ jenkins + docker. Также используется демон 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

0
ответ дан 3 December 2019 в 23:14

Теги

Похожие вопросы