gpt4 book ai didi

docker - 我如何运行所有 jenkins 管道步骤,除了 docker 容器中的一个步骤

转载 作者:行者123 更新时间:2023-12-02 17:59:32 25 4
gpt4 key购买 nike

我正在尝试设置 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,这看起来像不必要的麻烦)。

我想知道是否有某种方法可以在多个步骤中使用相同的 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 你可以嵌套阶段

关于docker - 我如何运行所有 jenkins 管道步骤,除了 docker 容器中的一个步骤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57631440/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com