我正在尝试设置jenkins多分支管道,以便在一个码头容器中运行我的所有代码验证步骤,然后构建码头映像并将其推到所述的码头容器之外。
目前,我的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填充和构建坞映像的能力(至少没有连接到外部坞进程sock,这看起来比需要的麻烦更多)。
我想知道是否有什么方法可以在多个步骤中使用相同的对接映像,但在其他步骤中从这个对接映像中提取出来。
发布于 2019-10-02 19:13:31
弄明白了!
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您可以嵌套阶段
https://stackoverflow.com/questions/57631440
复制相似问题