大三角帆:如果使用触发器参数设置为管道表达式,则将舞台参数设置为花线参数

时间:2019-01-15 01:16:57

标签: spinnaker

问题摘要:

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

详细信息:

我有一个可选的管道参数APK_URL。如果已设置,那么我想将其用作舞台的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

即使APK_URL不为null,看来Java三元运算符正在评估由触发参数生成的url。

有人可以告诉我如何将阶段参数设置为管道参数以进行手动执行,以及如何将阶段参数设置为管道表达式以进行触发执行。 TIA。

1 个答案:

答案 0 :(得分:0)

实际上,Spinnaker并不直接提供此类功能。

但是您可以通过几种不同的方式来做到这一点:

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

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

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