我使用 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"]}"
}
]