我希望能够根据存储库中是否存在Dockerfile来选择是否使用dockerfile代理执行管道阶段。如果没有Dockerfile,stage应该在本地运行。
我试过这样的东西
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
}
//...发布于 2019-12-31 23:14:59
我想出了这个解决方案,它依赖于定义一个函数来避免重复,并根据代理的类型定义两个不同的阶段。
如果谁有更优雅的解决方案,请让我知道。
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()
}
}
}https://stackoverflow.com/questions/59545345
复制相似问题