java - 使用 picocli 解析 Java 程序选项在 Spinnaker Run Job 阶段不起作用
问题描述
我使用 gradle 应用程序插件的运行任务运行带有 args 的 java 主程序。该程序使用 picocli 解析命令行参数。当使用以下命令在我的开发环境中运行时,这可以正常工作:
./gradlew run --args="-ahttp://foo.com/bar -dmydeviceid"
当我 ssh 进入我的应用程序 docker 映像的 docker 容器时,它也运行良好。
但是,如果我在 Spinnaker 管道 Run Job 阶段使用相同的 docker 映像运行相同的 Gradle 运行任务,则它不起作用。日志语句显示参数被程序正确接收但没有被 picocli 处理。我猜这是因为 picocli 的代码生成器由于某种原因没有在 Spinnaker 管道的运行作业中运行。
任何建议如何解决这个问题。
解决方案
我找到了一种解决方法。我没有使用 'gradle run' 运行程序,而是创建了一个 shellscript,它使用 gradle application plugin 生成的程序的分发 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\"]}"
}
]
推荐阅读
- c# - 使用 C# 在按钮上添加 SQL 查询
- typescript - 如何在 TypeScript 中为递归(如 s 表达式)定义泛型类型别名?
- javascript - 如何在 JavaScript 中动态创建数组/数组名
- javascript - 当元素的显示从“无”变为“块”时按钮移动
- java - 列表类型的 Java 泛型用法
- c++ - std::pair 的初始化列表
, 双> - windows - 自动安装 NDIS 过滤器驱动程序
- php - 通过 html 表单 php 加载、编辑和更新 xml 文件
- algorithm - 判断数组中是否有名人
- windows - WINDOWS“启动cmd”让我发疯(设置颜色)