Phi*_*ung 8 jenkins docker dockerfile jenkins-groovy jenkins-pipeline
使用Jenkins Declarative Pipeline,可以轻松指定 Dockerfile、代理标签、构建参数和运行参数,如下所示:
Jenkinsfile(声明式管道)
agent {
dockerfile {
dir './path/to/dockerfile'
label 'my-label'
additionalBuildArgs '--build-arg version=1.0'
args '-v /tmp:/tmp'
}
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用脚本化管道语法来实现相同的目标。我找到了一种传递代理标签并运行 args 的方法,但无法传递目录并构建 args。理想情况下,我会写这样的东西(标签和运行参数已经工作):
Jenkinsfile(脚本化管道)
node ("my-label"){
docker.dockerfile(
dir: './path/to/dockerfile',
additionalBuildArgs:'--build-arg version=1.0'
).inside('-v /tmp:/tmp') {
\\ add stages here
}
}
Run Code Online (Sandbox Code Playgroud)
该文档展示了如何使用现有的 docker 映像(即使用image管道中的指令)来完成此操作。
Jenkinsfile(声明式管道)
pipeline {
agent {
docker { image 'node:7-alpine' }
}
stage('Test') {
//...
}
}
Run Code Online (Sandbox Code Playgroud)
Jenkinsfile(脚本化管道)
node {
docker.image('node:7-alpine').inside {
stage('Test') {
//...
}
}
}
Run Code Online (Sandbox Code Playgroud)
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'
}
}
Run Code Online (Sandbox Code Playgroud)
任何帮助深表感谢!
我个人将 docker cli 参数放在图像文件夹路径之前,并使用 -f 参数指定 docker 文件名
除此之外,您正在以正确的方式这样做。代理 dockerfile 正在以与步骤相同的方式构建 docker 映像docker.build。docker.build除非您可以使用以下步骤将图像推送到注册表
这是我该怎么做
def dockerImage
//jenkins needs entrypoint of the image to be empty
def runArgs = '--entrypoint \'\''
pipeline {
agent {
label 'linux_x64'
}
options {
buildDiscarder(logRotator(numToKeepStr: '100', artifactNumToKeepStr: '20'))
timestamps()
}
stages {
stage('Build') {
options { timeout(time: 30, unit: 'MINUTES') }
steps {
script {
def commit = checkout scm
// we set BRANCH_NAME to make when { branch } syntax work without multibranch job
env.BRANCH_NAME = commit.GIT_BRANCH.replace('origin/', '')
dockerImage = docker.build("myImage:${env.BUILD_ID}",
"--label \"GIT_COMMIT=${env.GIT_COMMIT}\""
+ " --build-arg MY_ARG=myArg"
+ " ."
)
}
}
}
stage('Push to docker repository') {
when { branch 'master' }
options { timeout(time: 5, unit: 'MINUTES') }
steps {
lock("${JOB_NAME}-Push") {
script {
docker.withRegistry('https://myrepo:5000', 'docker_registry') {
dockerImage.push('latest')
}
}
milestone 30
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18241 次 |
| 最近记录: |