在 Docker 中设置用于与 Jenkins 进行集成测试的数据库

在 Docker 中设置用于与 Jenkins 进行集成测试的数据库

背景:
我关注在 Docker 中下载并运行 Jenkins设置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 存储库中。Jenkinsfiledb

问题:

[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

答案1

控制台输出描述了错误:

line 1: docker: not found

shell 脚本找不到 docker,可能是因为您的 Jenkins 执行器上未安装 Docker。(Jenkins Docker 插件不能保证 Docker 可用于 Jenkins 外部进程,例如 shell 脚本。)

答案2

容器上未安装 Docker 客户端。请安装 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

相关内容