我想通过gitlab CI使用项目的版本作为标记来构建docker映像:
docker build -t dockerimage:VERSION-IN-POM .
在詹金斯的管道中,我得到的是这样的版本:
${pom.version}
是否可以通过类似的便捷方式从gitlab CI中读取版本?还是我必须为此编写脚本?
答案 0 :(得分:3)
Gitlab-CI没有提供这种便利,相反,它使您可以使用Shell脚本执行任何您想做的事情。在命令脚本中执行此操作并不难。您可以安装xmllint(在Ubuntu上为apt install libxml2-utils
),然后通过simple query来获取它:
xmllint --xpath '/*[local-name()="project"]/*[local-name()="version"]/text()' pom.xml
因此,可以通过以下两行来解决所有问题:
- apt install libxml2-utils
- docker build -t dockerimage:$(xmllint --xpath '/*[local-name()="project"]/*[local-name()="version"]/text()' pom.xml) .
答案 1 :(得分:3)
假设您在构建环境中有Maven,则可以使用maven帮助插件和grep提取版本。
VERSION=$(mvn --non-recursive help:evaluate -Dexpression=project.version | grep -v '\[.*')
echo $VERSION
答案 2 :(得分:1)
您可以使用sed或grep。
比使用mvn --non-recursive help:evaluate ...
获取工件ID
grep -m1 '<artifactId>' pom.xml | grep -oP '(?<=>).*(?=<)'
获取版本
grep -m1 '<version>' pom.xml | grep -oP '(?<=>).*(?=<)'
如果您使用的是docker,则某些图像没有最新版本的grep,因此您需要使用带有剪切功能的创意解决方案,例如:
grep -m1 '<artifactId>' pom.xml |cut -d '<' -f2 |cut -d '>' -f2
答案 3 :(得分:0)
这适用于我的变量:gitlab-ci.yml
mvn -Dexec.executable='echo' -Dexec.args='${project.version}' --non-recursive exec:exec -q
答案 4 :(得分:0)
如伊万(Ivan)在他的post中所指出的,这在我的脚本中起作用:
-RELEASE_VERSION = <div class="container">
<input type="checkbox" class="checks" value="hot"> hot
<input type="checkbox" class="checks" value="cold"> clod
<a href="#" onclick="submitFun();return false;">ok </a>
</div>
-echo $ RELEASE_VERSION
答案 5 :(得分:0)
直接获取版本信息的另一种maven命令行替代方法
mvn --non-recursive help:evaluate -Dexpression=project.version -q -DforceStdout