【问题标题】:Jenkinsfile execute stage only if parameter not initialized仅当参数未初始化时,Jenkinsfile 才执行阶段
【发布时间】:2021-12-31 22:51:13
【问题描述】:

我有一个多分支管道作业,它执行声明性管道 Jenkins 文件。 在这个声明性管道中,我有 2 个参数,一个选择参数和一个字符串参数。 由于尚未从 Jenkins 文件加载参数(它尚未运行,并且它们必须在 Jenkins 文件中),在第一次运行分支时,作业失败并出现不知道我的参数的错误。 我的问题是:只有当我看到 Jenkins 参数未初始化时,我才能运行一个阶段?

【问题讨论】:

  • 如果您对它是否是第一个版本感兴趣,请尝试env.BUILD_NUMBER。否则,选项和字符串参数都有默认值。
  • @MaratC 感谢您的回复。我不检查内部版本号的原因是因为这个解决方案对我来说不够健壮。我是什么意思?例如,当更改 jenkinsfile 中的参数名称时,此问题会重复,因此它可能是通过的作业的构建 20,之后我重命名了参数并且在构建 21 上它失败了。

标签: jenkins jenkins-pipeline jenkins-plugins


【解决方案1】:

我已经通过这种方式解决了这个问题:为您的选择添加一个“默认”值,并在您的舞台上使用表达式对其进行检查。可以用 String 参数做同样的事情。

parameters {
    choice(choices: ['none', 'internal', 'alpha', 'beta'], description: 'Deploy app to selected track', name: 'DEPLOY_TRACK')
}

然后在你的舞台上:

stage('Deploy') {
    when {
        // Only execute this stage when selected DEPLOY_TRACK is `internal`, `alpha` or `beta`
        expression {
            return params.DEPLOY_TRACK != 'none'
        }
    }
    ...
}

【讨论】:

  • 感谢您的回复,这个解决方案对我不起作用,因为在我的分支上第一次构建时,用户无法选择参数值,并且也没有使用默认值,因为参数不是已初始化。
  • 选项列表中的第一个选项应该是默认值,即使用户设置或不能设置。见this answer
  • 是的,我知道选择参数的第一个值例如是默认选项,在某些工作中肯定是这种情况。但是我的一些工作没有从参数中获得默认值,并且我得到参数未知的错误。
  • 您能更新您的问题并添加您的管道吗?
猜你喜欢
  • 2020-11-08
  • 2021-04-08
  • 1970-01-01
  • 2013-12-11
  • 2018-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多