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



我使用 gradle 应用程序插件的运行任务用 args 运行我的 java 主程序。该程序使用 picocli 来解析命令行参数。使用以下命令在我的开发环境中运行时,这工作正常:

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

当我通过 ssh 进入我的应用程序 docker 映像的 docker 容器时,它也能正常运行。

但是,如果我使用相同的 docker 映像在 Spinnaker 管道运行作业阶段运行相同的 Gradle 运行任务,则它不起作用。日志语句显示程序正确接收参数,但 picocli 未处理参数。我猜这是因为由于某种原因,picoli 的代码生成器没有在 Spinnaker 管道的运行作业中运行。

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

我找到了解决方法。我没有使用 'gradle run' 运行程序,而是创建了一个 shellscript,它使用 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 设置为阶段 env var 的一部分,如下所示:

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

最新更新