将命令的输出放在变量 GoCD 中

Put output of a command in a variable GoCD

我尝试用 GoCD 作业中的项目版本创建一个变量。

我的项目是用maven构建的。项目的版本在 pom.xml 文件中设置(存在于 git 存储库中)。

Maven 允许使用命令检索项目的版本:

mvn help:evaluate -Dexpression=project.version

所以我尝试将此命令的输出放在 linux 变量中:

my_version=${mvn help:evaluate -Dexpression=project.version}

然后使用它将项目推送到 docker 存储库:

docker push my_project:$my_version

问题是 GoCD 似乎有自己的解释器(参见 https://docs.gocd.org/current/faq/dev_use_current_revision_in_build.html)。要使用变量,我必须这样做:

sh -c docker push my_project:$my_version

但我找不到设置 linux 变量的方法。

GoCD 可以做些什么吗?这样做的正确方法是什么?

GoCD 不会为整个作业维护单个 shell 会话。因此,即使您使用 sh export MY_VERSION=... 并尝试在同一作业的下一个任务中使用它,它也不会按预期工作。

要解决此问题,最好的方法是将要执行的整组命令包装在一个 shell 脚本中,然后将该 shell 脚本作为任务执行。鉴于整个 shell 脚本将在单个 shell 实例中执行,您定义的任何变量都可以使用。