如何在Jenkins管道中设置postgres数据库?

时间:2019-01-08 11:59:21

标签: docker jenkins jenkins-pipeline

我正在使用docker模拟我的应用程序的postgres数据库。我在赛普拉斯(Cypress)上进行了一段时间的测试,效果很好。我想设置Jenkins进行进一步的测试,但我似乎陷入了困境。

在我的设备上,我会使用命令

docker create -e POSTGRES_DB=myDB -p 127.0.0.1:5432:5432 --name myDB postgres docker start myDB

创建它。如何在Jenkins管道中对此进行模拟?我需要该应用程序的数据库才能工作。

我将Dockerfile用作代理,并且尝试将ENV变量放在其中,但是它不起作用。尚未在管道上安装Docker。

我看到的方式是:

  1. 使用
  2. 创建图像
  3. 以某种方式将docker安装在管道中并使用相同的命令
  4. 也许具有主/从节点?我还不太了解它们。

2 个答案:

答案 0 :(得分:0)

这可能是Jenkins Pipeline's advanced features边车模式之一的用例。

例如(来自上述站点):

node {
    checkout scm
    docker.image('mysql:5').withRun('-e "MYSQL_ROOT_PASSWORD=my-secret-pw"') { c ->
        docker.image('mysql:5').inside("--link ${c.id}:db") {
            /* Wait until mysql service is up */
            sh 'while ! mysqladmin ping -hdb --silent; do sleep 1; done'
        }
        docker.image('centos:7').inside("--link ${c.id}:db") {
            /*
             * Run some tests which require MySQL, and assume that it is
             * available on the host name `db`
             */
            sh 'make check'
        }
    }
}
     

以上示例使用withRun公开的对象,该对象具有   可通过id属性获得运行中容器的ID。使用   容器的ID,管道可以通过传递自定义来创建链接   Docker的inside()方法的参数。

最好的事情是工作完成后应自动停止并删除容器。

答案 1 :(得分:0)

对于声明性管道:

pipeline {
  agent any
  environment {
    POSTGRES_HOST = 'localhost'
    POSTGRES_USER = myuser'
  }

  stages {
    stage('run!') {
      steps {
        script {
            docker.image('postgres:9.6').withRun(
                "-h ${env.POSTGRES_HOST} -e POSTGRES_USER=${env.POSTGRES_USER}"
            ) { db ->
// You can your image here but you need psql to be installed inside
                docker.image('postgres:9.6').inside("--link ${db.id}:db") {
                  sh '''
psql --version
until psql -h ${POSTGRES_HOST} -U ${POSTGRES_USER} -c "select 1" > /dev/null 2>&1 || [ $RETRIES -eq 0 ]; do
  echo "Waiting for postgres server, $((RETRIES-=1)) remaining attempts..."
  sleep 1
done
'''
                  sh 'echo "your commands here"'
                }
              }
            }
      }
    }
  }
}

Docker wait for postgresql to be running

有关