【发布时间】:2020-04-28 10:02:54
【问题描述】:
使用Jenkins Declarative Pipeline,可以轻松指定Dockerfile、代理标签、构建参数和运行参数,如下所示:
Jenkinsfile(声明式管道)
agent {
dockerfile {
dir './path/to/dockerfile'
label 'my-label'
additionalBuildArgs '--build-arg version=1.0'
args '-v /tmp:/tmp'
}
}
我正在尝试使用脚本化管道语法来实现相同的目的。我找到了传递代理标签并运行 args 的方法,但无法传递 目录 和 build args。理想情况下,我会写这样的东西(标签和运行参数已经在工作):
Jenkinsfile(脚本化管道)
node ("my-label"){
docker.dockerfile(
dir: './path/to/dockerfile',
additionalBuildArgs:'--build-arg version=1.0'
).inside('-v /tmp:/tmp') {
\\ add stages here
}
}
documentation 展示了如何使用现有的 docker 映像来完成此操作,即在管道中使用 image 指令。
Jenkinsfile(声明式管道)
pipeline {
agent {
docker { image 'node:7-alpine' }
}
stage('Test') {
//...
}
}
Jenkinsfile(脚本化管道)
node {
docker.image('node:7-alpine').inside {
stage('Test') {
//...
}
}
}
但是,dockerfile 指令的脚本化管道语法缺失。
我目前使用的解决方法是自己构建图像。
node ("my-label"){
def testImage = docker.build(
"test-image",
"./path/to/dockerfile",
"--build-arg v1.0"
)
testImage.inside('-v /tmp:/tmp') {
sh 'echo test'
}
}
非常感谢任何帮助!
【问题讨论】:
-
脚本化的 docker.build() 命令有 2 个参数:图像标签、docker build 命令行。该问题显示了 3 个论点。相反,它应该类似于 docker.build("name:1.0", "--build-arg version=v1.0 path/to/directory"
标签: docker jenkins jenkins-pipeline dockerfile jenkins-groovy