首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何运行所有jenkins管道步骤,但在码头容器中的步骤除外

如何运行所有jenkins管道步骤,但在码头容器中的步骤除外
EN

Stack Overflow用户
提问于 2019-08-23 18:34:30
回答 2查看 3.5K关注 0票数 8

我正在尝试设置jenkins多分支管道,以便在一个码头容器中运行我的所有代码验证步骤,然后构建码头映像并将其推到所述的码头容器之外。

目前,我的Jenkinsfile看起来有点像这样(为了便于阅读):

代码语言:javascript
复制
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,这看起来比需要的麻烦更多)。

我想知道是否有什么方法可以在多个步骤中使用相同的对接映像,但在其他步骤中从这个对接映像中提取出来。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-02 19:13:31

弄明白了!

代码语言:javascript
复制
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您可以嵌套阶段

票数 12
EN

Stack Overflow用户

发布于 2019-08-24 08:59:27

使用dockerfile作为构建代理总是会导致容器重新生成。如果您只想在(预构建)容器中运行一些步骤,请使用docker作为代理。当然,这也可以是在同一管道中本地构建的容器。您还可以利用绑定坐骑在容器之间共享数据。

如果不确定,请查看文档12。在您的情况下,也许将全局代理设置为none也是明智的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57631440

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档