docker - 我如何运行所有 jenkins 管道步骤,除了 docker 容器中的一个
问题描述
我正在尝试设置 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;博士你可以嵌套阶段
推荐阅读
- regex - 正则表达式查找和替换固定标签内的逗号并使用记事本++更改数字
- c++ - 如何增加 Visual Studio C++ 中的堆栈大小?
- c# - 如何修复应用服务中的 SNAT 耗尽
- node.js - 在带有路由器的vue js导航栏中查找链接的问题
- python - 此网站无法提供安全连接 Google App Engine
- c# - 在静态构造函数中或外部声明静态字段之间的区别
- ios - Flutter 上的 AirPlay IOS
- c# - 过滤包含所有节点和子节点的 TreeView
- html - 如何在 MaterializeCSS 中将 cols 放在一行的中心?
- python - 如何将数据从 python 传递到 html?