我正在尝试设置一个 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,这看起来像比必要的麻烦更多)。
我想知道是否有什么方法可以使用samedocker 镜像执行多个步骤,然后从该 docker 镜像中拉出执行其他一些步骤。
弄清楚了!
pipeline {
agent {
label 'AWS'
}
stages {
stage('do everything in docker') {
agent {
dockerfile {
filename 'Dockerfile.jenkins'
reuseNode true
}
}
stages {
stage('stuff in docker') {
steps {
stuff
}
stage('more stuff in docker') {
steps {
stuff
}
}
}
}
stage('stuff not in docker') {
steps {
stuff
}
}
stage('more stuff not in docker') {
steps {
stuff
}
}
}
post {
always {
cleanWs()
}
}
}
tl;博士你可以嵌套阶段
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)