首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Jenkinsfile中动态选择代理

在Jenkinsfile中动态选择代理
EN

Stack Overflow用户
提问于 2019-12-31 22:29:38
回答 1查看 262关注 0票数 0

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

我试过这样的东西

代码语言:javascript
复制
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将被跳过。

有没有可能做像下面这样的代码块?

代码语言:javascript
复制
//...
if (fileExists("Dockerfile")) {
    agent {dockerfile}
}
else {
    agent none
}
//...
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-31 23:14:59

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

如果谁有更优雅的解决方案,请让我知道。

代码语言:javascript
复制
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()
        }
    }

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

https://stackoverflow.com/questions/59545345

复制
相关文章

相似问题

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