Spinnaker:如果使用触发器参数将stage param设置为piepline param,则将其设置为管道表达式



问题摘要:

  • 如果阶段的envvar不为null,则将其设置为可选的管道参数(用于手动执行情况)
  • 如果管道参数为null,则使用触发器params将阶段的envvar设置为管道表达式值(用于从jenkins触发的执行)

详细信息:

我有一个可选的管道参数APK_URL。如果它被设置了,那么我想把它用作stage的envVar APK_URL。如果它没有设置,那么我希望它使用一个使用管道表达式的触发器参数创建的url。我尝试了以下方法:

{
...
"parameterConfig": [
{
"description": "The url  or url-key for apk to deploy to device",
"label": "APK_URL",
"name": "APK_URL",
"required": false
}
],
"stages": [
{
...
"containers": [
{
"args": [],
"command": [
"./scripts/entrypoint-deploy.sh"
],
"envVars": [
{
"name": "APK_URL",
"value": "(${parameters["APK_URL"]} != null) ? ${parameters["APK_URL"]} : https://my.com/application/${trigger['buildInfo']['scm']['branch']/${trigger['buildInfo']['artifacts'][0]['displayPath']}"
}
],
...
}
]
...
}

当我在指定APK_URL参数的情况下手动运行管道(无触发器)时,会出现错误:

Failed to evaluate [value] EL1007E: Property or field 'branch' cannot be found on null

似乎java三元运算符正在评估由触发器参数生成的url,即使APK_url不为null。

有人能告诉我我是如何将stage参数设置为pipeline参数以手动执行的,以及如何将stage参数设置为pipeline表达式以触发执行的吗。TIA。

实际上Spinnaker并没有直接提供这样的功能。

但你可以用几种不同的方式来做:

  • 脚本阶段
  • 詹金斯舞台
  • 运行作业阶段

并在那里实现您需要的任何逻辑。

另一种选择是添加几个条件阶段,这些阶段将根据您的输入而跳过。

最新更新