我正在尝试建立一个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 process sock的情况下,不必要的麻烦)。
我想知道是否可以通过某种方法将 同一个 docker映像用于多个步骤,然后从该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; dr,您可以嵌套阶段