问题摘要:
- 如果阶段的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并没有直接提供这样的功能。
但你可以用几种不同的方式来做:
- 脚本阶段
- 詹金斯舞台
- 运行作业阶段
并在那里实现您需要的任何逻辑。
另一种选择是添加几个条件阶段,这些阶段将根据您的输入而跳过。