3 votes

Configurer la base de données pour les tests d'intégration avec Jenkins dans Docker

Le contexte :
Je suivais Télécharger et exécuter Jenkins dans Docker pour mettre en place Jenkins Serveur. Le paramètre suivant a été utilisé pour exécuter 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

La construction se déroule avec succès, cependant, quand il s'agit de Integration Test scène, un MySQL est nécessaire.
Le plan est Utilisation de plusieurs conteneurs alors que mon Jenkinsfile est le suivant :

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' 
                }
            }
        }
    }
}

Le site ./db/dump.sql est dans le même dépôt git avec Jenkinsfile sur db sous-répertoire.

Problème :

[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

Puisque vous vous exécutez en tant que root, le privilège ne devrait pas être le problème, n'est-ce pas ? Utilisation de Docker avec Pipeline a proposé plusieurs solutions, une autre solution serait-elle beaucoup plus facile à mettre en place le Integration Test l'environnement ?

1voto

jayhendren Points 817

La sortie de la console décrit l'erreur :

line 1: docker: not found

Le Shell Shell ne trouve pas docker, probablement parce que Docker n'est pas installé sur votre exécuteur Jenkins. (Le plugin Docker de Jenkins ne garantit pas que Docker sera disponible pour les processus externes à Jenkins, tels que Shell Shell).

0voto

Sanket Points 101

Le client Docker n'est pas installé sur le conteneur. Il faut soit installer Docker, soit utiliser une image de Jenkins + Docker. Le démon Docker de la machine hôte est également utilisé et il faut le monter.

Les commandes ci-dessous devraient vous aider :

  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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X