使用picocli解析Java程序选项在Spinnaker Run Job阶段不起作用

时间:2019-01-11 19:25:38

标签: java gradle spinnaker picocli

我使用gradle应用程序插件的run任务运行带有args的java主程序。该程序使用picocli解析命令行参数。使用以下命令在我的开发环境中运行时,效果很好:

./gradlew  run --args="-ahttp://foo.com/bar -dmydeviceid"

当我将ssh放入我的应用docker镜像的docker容器中时,它也可以正常运行。

但是,如果我使用相同的docker镜像在Spinnaker管道Run Job阶段中运行相同的Gradle运行任务,它将无法正常工作。日志语句显示参数已由程序正确接收,但未由picocli处理。我猜这是因为出于某种原因,picocli的代码生成器未在Spinnaker管道的“运行作业”中运行。

有关如何解决此问题的任何建议。

1 个答案:

答案 0 :(得分:1)

我找到了解决方法。我没有使用“ gradle run”来运行程序,而是创建了一个shell脚本,该脚本使用gradle应用程序插件生成的程序的发行版tar。

这是脚本的样子:

#!/usr/bin/env bash

# Build application tar
gradle -i distTar

tar -xvf ./build/distributions/apk-deployer-cli.tar

./apk-deployer-cli/bin/apk-deployer-cli -a $APK_URL -d $DEVICE_ID

然后在大三角帆阶段配置中,我将$ APK_URL和$ DEVICE_ID设置为该阶段的环境变量的一部分,如下所示:

      "envVars": [
        {
          "name": "APK_URL",
          "value": "${parameters[\"APK_URL\"]}"
        },
        {
          "name": "DEVICE_ID",
          "value": "${parameters[\"DEVICE_ID\"]}"
        }
      ]