【问题标题】:Dynamically select agent in Jenkinsfile在 Jenkinsfile 中动态选择代理
【发布时间】:2019-12-31 23:14:58
【问题描述】:

我希望能够根据存储库中 Dockerfile 的存在来选择是否使用 dockerfile 代理执行管道阶段。如果没有Dockerfile,则该阶段应在本地运行。

我尝试了类似的东西

pipeline {
    stage('AwesomeStage') {
        when {
            beforeAgent true
            expression { return fileExists("Dockerfile") }
        }
        agent { dockerfile }
        steps {
           // long list of awesome steps that should be run either on Docker either locally, depending on the presence of a Dockerfile
        }
    }

}

但结果是当没有Dockerfile 时,整个stage 被跳过。

是否可以做类似下面的块?

//...
if (fileExists("Dockerfile")) {
    agent {dockerfile}
}
else {
    agent none
}
//...

【问题讨论】:

    标签: jenkins jenkins-pipeline jenkins-groovy


    【解决方案1】:

    我想出了这个解决方案,它依赖于定义一个函数来避免重复,并根据代理类型定义两个不同的阶段。

    如果有人有更优雅的解决方案,请告诉我。

    def awesomeScript() {
    // long list of awesome steps that should be run either on Docker either locally, depending on the presence of a Dockerfile
    }
    pipeline {
        stage('AwesomeStageDockerfile') {
            when {
                beforeAgent true
                expression { return fileExists("Dockerfile") }
            }
            agent { dockerfile }
            steps {
               awesomeScript()
            }
        }
        stage('AwesomeStageLocal') {
            when {
                beforeAgent true
                expression { return !fileExists("Dockerfile") }
            }
            agent none
            steps {
               awesomeScript()
            }
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-26
      • 2013-06-29
      • 2021-02-05
      相关资源
      最近更新 更多