我正在尝试设置jenkins多分支流水线,以在docker容器中运行所有代码验证步骤,然后构建docker镜像并将其推送到docker容器之外。
目前,我的Jenkinsfile看起来像这样(为了易读性而简化):
pipeline {
agent {
label 'AWS'
}
stages {
stage('stuff in docker') {
agent {
dockerfile {
filename 'Dockerfile.jenkins'
reuseNode true
}
}
steps {
stuff
}
}
stage('more stuff in docker') {
agent {
dockerfile {
filename 'Dockerfile.jenkins'
reuseNode true
}
}
steps {
stuff
}
}
stage('stuff not in docker') {
steps {
stuff
}
}
stage('more stuff not in docker') {
steps {
stuff
}
}
}
post {
always {
cleanWs()
}
}
}
问题在于每次使用dockerfile代理时,Jenkins都会尝试重新构建docker镜像。虽然这些步骤都被缓存了,但发送构建上下文和实际处理所有内容仍然比我想要的时间更长。如果我将dockerfile用作根代理,我可以在同一个docker容器中运行所有内容,但我失去了执行git操作和构建docker镜像的能力(至少不连接到外部docker进程sock的话,这似乎比应该必要的麻烦还要多)。
我想知道是否有一种方法可以为多个步骤使用相同的docker镜像,然后在某些其他步骤中退出该docker镜像。