我正在使用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。
我看到的方式是:
答案 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"'
}
}
}
}
}
}
}
有关