当前位置: 首页 > 面试题库 >

如何在Docker容器中运行除詹金斯管道之外的所有步骤

浦出野
2023-03-14
问题内容

我正在尝试建立一个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,您可以嵌套阶段



 类似资料:
  • 问题内容: 我想在Docker容器中运行Jenkins。一切都好。我可以这样运行:我也可以添加持久性存储。当我创建管道必须执行命令(和)时,问题就来了。首先,错误是未在系统上安装docker。是的,期望。然后我开始搜索,发现如何在容器中运行docker(传递2个持久卷): 这可以运行,但是有一些例外。容器中有命令,但是当我尝试运行它时,它将引发异常: 我该如何解决这个问题?在Docker中安装Je

  • 我试图建立一个jenkins多分支管道,在docker容器中运行我的所有代码验证步骤,然后构建docker映像并将其推出docker容器。 目前,我的 Jenkinsfile 看起来有点像这样(为了便于阅读,它精简了): 这里的问题是,我使用 dockerfile 代理的每个阶段,jenkins 都会尝试重建 docker 映像。这些阶段都被缓存了,但是发送构建上下文并实际处理所有内容仍然需要比我

  • 我正在使用jenkins管道,我的Jenkinsfile有几个阶段和工作。有没有办法在詹金斯管道之外运行特定的工作? 示例:假设其中一个阶段是执行“SCP构建工件到远程位置”。出于某种原因,这失败了,如果我想手动运行jenkins管道之外的其他工作,我如何做到这一点? 我对调用新的构建最不感兴趣。那么,我们可以手动运行jenkins管道以外的故障后的剩余作业吗?

  • 问题内容: 我有一个在我的jenkinsfile中使用的类,这里是其简化版本: 我提供的詹金斯在jenkinsfile使用时参数。在这里模拟具有脚本和sh的jenkins对象的最佳方法是什么?谢谢你的帮助 问题答案: 前一周我遇到了类似的问题,我想到了: 并与您的脚本一起使用(以未命名的sh调用扩展): 它输出: 现在,它本身并不是很有用,但是很容易添加定义模拟方法行为的逻辑,例如,此版本根据要读

  • 问题内容: 我有两条詹金斯管道,比方说管道A和管道B。我想在管道B中调用管道A。我怎样才能做到这一点? (管道A是管道B的子集。管道A负责执行一些日常工作,可以在管道B中重用) 我已经在计算机上安装了Jenkins 2.41。 问题答案: 以下解决方案对我有效: 在此处添加“管道:构建步骤”官方文档的链接:https : //jenkins.io/doc/pipeline/steps/pipeli

  • 问题内容: 我正在尝试在詹金斯(Jenkins)中运行以下内容,但我得到任何建议的错误? 错误-为什么在shell脚本中不使用文件名重新填充? 问题答案: 我建议在双引号中运行bash命令,并转义和字符。考虑以下Jenkins管道示例脚本: 我在此示例中使用的文件包含: 当我运行它时,我得到以下控制台输出: 运行脚本文件后,将其内容更改为: 希望能帮助到你。