我使用gradle应用程序插件的run任务运行带有args的java主程序。该程序使用picocli解析命令行参数。使用以下命令在我的开发环境中运行时,效果很好:
./gradlew run --args="-ahttp://foo.com/bar -dmydeviceid"
当我将ssh放入我的应用docker镜像的docker容器中时,它也可以正常运行。
但是,如果我使用相同的docker镜像在Spinnaker管道Run Job阶段中运行相同的Gradle运行任务,它将无法正常工作。日志语句显示参数已由程序正确接收,但未由picocli处理。我猜这是因为出于某种原因,picocli的代码生成器未在Spinnaker管道的“运行作业”中运行。
有关如何解决此问题的任何建议。
答案 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\"]}"
}
]