GitLab-CI在管道中获取Pom版本

时间:2018-09-05 15:11:29

标签: maven docker gitlab gitlab-ci

我想通过gitlab CI使用项目的版本作为标记来构建docker映像:

docker build -t dockerimage:VERSION-IN-POM .

在詹金斯的管道中,我得到的是这样的版本:

${pom.version}

是否可以通过类似的便捷方式从gitlab CI中读取版本?还是我必须为此编写脚本?

6 个答案:

答案 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