詹金斯"调用Maven 3"构建步骤不会公开POM_ *变量

时间:2015-07-28 12:39:13

标签: maven jenkins artifactory cloudbees

我使用Jenkins作为我的CI服务器,使用Artifactory作为我的工件库。 Artifactory插件适用于自由风格的项目,只需使用Invoke Maven3构建步骤来获取依赖项并部署工件即可使用。此外,我还有另一个构建步骤,用于构建docker镜像并使用CloudBees Docker Build and Publish插件将其推送到我的私有docker注册表。

问题在于我想在CloudBees配置中使用POM_ *变量,这些变量应该由Maven插件公开,如here所述。但每次我构建项目时,都会出现以下错误:

https://

我不知道这个问题究竟是什么原因。也许Invoke Maven3构建步骤通过不暴露env变量导致了这个问题。另一个来源可能是不使用env变量的CloudBees插件。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

您在自由式项目中提到的构建步骤不是Maven插件的一部分。描述的环境变量仅针对本机Maven项目设置。从另一个项目类型,我想你需要做类似

的事情
POM_VERSION=$(mvn help:evaluate -Dexpression=project.version | fgrep -v '[INFO]')

在脚本的开头继续继续使用该变量。

将变量暴露给后续的非shell构建步骤,例如来自CloudBees Docker Build和Publish插件,是另一回事;可能有一些插件可以做到,但我不确定是什么。 (也许是EnvInject。)切换到工作流作业可能更简单,使用CloudBees Docker Workflow plugin来驱动Docker操作(取决于你在Artifactory插件中使用的确切内容):

node { stage 'build' git '…' sh 'mvn package' stage 'package' sh 'mvn help:evaluate -Dexpression=project.version | fgrep -v '[INFO]' > .version' def version = readFile '.version' def image = docker.build("my-image:${version}") stage 'publish' docker.withRegistry(…) { image.push() } }

顺便说一下,你可以添加一个刚刚运行的shell构建步骤

env | sort

如果您想知道哪些环境变量可用。

答案 1 :(得分:0)

根据@Jesse Glick的回答,搜索一下并与jenkins稍微挣扎,我最终得到了以下解决方案,就像一个魅力。

1 - 添加"执行Shell"构建步骤包含以下命令:

echo POM_VERSION=$(mvn help:evaluate -Dexpression=project.version | fgrep -v '[INFO]') > pom_file
echo POM_ARTIFACTID=$(mvn help:evaluate -Dexpression=project.groupId | fgrep -v '[INFO]') >> pom_file
echo POM_GROUPID=$(mvn help:evaluate -Dexpression=project.artifactId | fgrep -v '[INFO]') >> pom_file

2 - 添加"注入环境变量"构建步骤(来自EnvInject插件)并输入" pom_file" as"属性文件路径"

3 - 添加" Docker构建和发布"构建步骤并根据需要在其配置中使用POM_VERSION,POM_ARTIFACTID,POM_GROUPID。