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

Krz*_*lak 7 maven gitlab docker gitlab-ci

我想通过 gitlab CI 构建 docker 镜像,并将项目的版本作为标签:

docker build -t dockerimage:VERSION-IN-POM .
Run Code Online (Sandbox Code Playgroud)

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

${pom.version}
Run Code Online (Sandbox Code Playgroud)

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

Ruw*_*han 10

假设您在构建环境中有 maven,您可以使用 maven help plugin 和 grep 来提取版本。

VERSION=$(mvn --non-recursive help:evaluate -Dexpression=project.version | grep -v '\[.*')
echo $VERSION
Run Code Online (Sandbox Code Playgroud)

  • 我不得不拖尾输出,我的最终语句: VERSION=$(mvn --batch-mode --non-recursive help:evaluate -Dexpression=project.version | grep -v '\[.*' | tail -1) (2认同)

Jak*_*nia 7

Gitlab-CI 没有提供这样的便利,而是让您可以使用 shell 脚本做任何想做的事情。在命令脚本中做到这一点并不难。您可以安装xmllintapt install libxml2-utils在 Ubuntu 上),然后您可以通过一个简单的查询来获取它:

xmllint --xpath '/*[local-name()="project"]/*[local-name()="version"]/text()' pom.xml
Run Code Online (Sandbox Code Playgroud)

所以都可以通过这两行来解决:

- apt install libxml2-utils
- docker build -t dockerimage:$(xmllint --xpath '/*[local-name()="project"]/*[local-name()="version"]/text()' pom.xml) .
Run Code Online (Sandbox Code Playgroud)


小智 5

这适用于我的变量:gitlab-ci.yml

    mvn -Dexec.executable='echo' -Dexec.args='${project.version}' --non-recursive exec:exec -q
Run Code Online (Sandbox Code Playgroud)


小智 5

另一种maven命令行替代方式直接获取版本信息

mvn --non-recursive help:evaluate -Dexpression=project.version -q -DforceStdout
Run Code Online (Sandbox Code Playgroud)