我正在创建一个 Jenkins 声明性管道作业,我在依赖于外部数据库容器的 docker 容器中运行一些节点测试。我创建了一个唯一的网络,然后尝试将网络 uid 作为 docker arg 传递,以便 docker 容器可以访问所述 db 容器:
def myNetwork = dbNetwork
stage('test-ci') {
agent {
docker {
reuseNode true
image 'myrepo/my-nodejs'
label 'docker'
args "--net ${myNetwork}"
}
}
steps {
script {
try {
sh 'npm run test-ci'
} catch(err) {
currentBuild.result = 'FAILED'
}
}
}
}
但是,Jenkins 的输出显示,当 docker 收到变量时,变量以某种方式最终为空:
$ docker run -t -d -u 233:233 --net null -w /home/jenkins/workspace/es_feature_add-db-container- ...
我确实注意到演示传递 args 的示例使用单引号,但我需要双引号以便myNetwork
正确扩展,但也许这不是管道方式。
如何正确地将变量传递给 docker?
编辑:在玩了一会儿之后,我认为这是一个范围问题,因为我能够成功地传递环境变量,例如env.BUILD_TAG
. 对于给定的作业运行,我基本上只需要一个随机的、有保证的唯一网络名称,这样我就不会与其他作业发生冲突 -env.BUILD_TAG
似乎可以完成这项工作,但我仍然想知道为什么我不能传入变量我在脚本中定义的。