将命令的输出放在变量 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 实例中执行,您定义的任何变量都可以使用。
我尝试用 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 实例中执行,您定义的任何变量都可以使用。