当前位置: 首页 > 知识库问答 >
问题:

Jenkins:如何在Maven“目标和选项”中使用预构建shell中的变量

常俊侠
2023-03-14

我在詹金斯有一份梅文的工作。在实际构建步骤之前,我有一个“执行外壳”预构建步骤。在这个shell中,我设置了一个变量:

REVISION=$(cat .build_revision)

我想在“目标和选项”中的Maven构建作业中使用该变量:

clean install -Drevision=${REVISION}

但这是行不通的!“Drevision”设置为“${REVISION}”,而不是${REVISION}的实际值。输出:

Executing Maven:  -B -f /home/gerrit/.jenkins/jobs/<job_name>/workspace/pom.xml clean install -Drevision=${REVISION}

它适用于Jenkins环境变量:

clean install -Dbuild=${BUILD_NUMBER}

它将“构建”设置为实际构建号。输出:

Executing Maven:  -B -f /home/gerrit/.jenkins/jobs/<job_name>/workspace/pom.xml clean install -Dbuild=54

我的问题:如何在Maven“目标和选项”中使用shell变量??

编辑:

我尝试在预构建shell之后使用Jenkins EnvInject插件“注入环境变量”,现在我的变量可以通过后期构建shell访问,但在Maven的“目标和选项”中仍然不可用。

然后可以使用EnvInject插件设置“将环境变量注入构建过程”,这实际上使这些变量在Maven“目标和选项”中可用,但这些变量是在SCM签出之后,即在预构建步骤之前设置的,并且不支持表达式求值。

共有3个答案

赵浩邈
2023-03-14

这个问题是由Jenkins Maven项目插件中的一个bug引起的,详细内容见2012年6月22日发布的bug报告。从2.1版开始,该插件尚未修复。

已经为Maven项目插件提出了一个修复方案,但尚未集成。这里是拉取请求的链接:https://github.com/jenkinsci/maven-plugin/pull/14

如果您使用应用的拉取请求补丁自己构建插件,变量将被注入并按预期提供给“目标和选项”字段。

司寇光华
2023-03-14

我遇到了一个非常类似的问题,试图计算一个构建版本并将其注入到构建中。在遇到所有相同的问题(不展开等)之后,我使用了“从脚本生成环境变量”选项,该选项将输出解释为将tag=value对转换为Jenkins变量。剧本:

  #generate a version code that is high enough to surpass previously published clients
  val=`expr 150000 + $BUILD_NUMBER`
  echo VERSION_CODE=$val

在此之后,我能够将$VERSION_代码注入maven,如下所示:

  -Dbuild.vercode=${VERSION_CODE}

希望对你有用。

席俊
2023-03-14

您在正确的轨道上,但错过了EnvInject-Plugin的第三个特性:“注入环境变量”构建步骤,该步骤可以根据脚本或属性的结果将变量注入到后续构建步骤中。

我们使用EnvInject插件就像这样;脚本设置资源并使用属性通信其参数,然后插件将这些属性作为环境变量传播。

 类似资料:
  • null 我已经在“Manage Jenkins”-->“Configure System”下配置了Maven设置。 当我在“预步骤”部分创建“调用顶级Maven目标”步骤时,所有工作都按照预期进行。在“目标”行中,我可以指定“-x”、“clean install”等,并且maven通过打印这些目标,例如: [DEBUG]正在从.../settings.xml读取全局设置 [DEBUG]正在使用.

  • 我的项目结构如下: 是内的依赖项。 > 我应该在Jenkins中创建单独的作业来单独构建每个模块吗? 我为创建了一个作业,但出现以下错误(已将目标和操作设置为“清洁安装”: [INFO]扫描项目...[INFO] [INFO] ------------------------------------------------------------------------ [INFO]构建mypro

  • 我已经为一个项目配置了SVN-Jenkins-Maven-Tomcat。小项目的每件事都很好。但当我试图构建包含大量JAR和包的实际项目时…它显示错误..找不到xxx包。我已经手动将依赖项JAR添加到本地maven存储库中。

  • 问题内容: 我已经在Eclipse IDE中创建了一个Aspectj项目,但是我需要使用Maven来构建它。 我有maven-aspectj插件,但不知道如何使用它。 问题答案: 以下是我执行此步骤的步骤。这给了我编译时的编织。如果您需要其他策略,显然您需要其他方法(例如用于运行时AOP代理的Spring AOP )。 添加一个属性以标准化您使用的AspectJ版本: 添加运行时依赖项: 添加As

  • 我有一个Maven3项目。有两个主要的EJB模块,比如说A和B,还有一个超级POM。当前的构建过程生成一个。zip文件,它由两个。ear文件组成,即a.ear和b.ear文件。然后将此ZIP文件夹手动部署到WebSphere。我们使用的是WAS8.0。有多个配置文件,如test、dev、local。我们提到mvn中的配置文件名(使用-p),我们希望为其生成一个构建。 现在,我们的构建和部署过程应该

  • 我正在使用maven构建我的java项目,但未能成功。因此,任何人都可以告诉我pom中需要的基本标记及其相应值。xml来构建项目?此外,如何从命令行手动添加Storm依赖项? 我的项目目录结构: 最初,我尝试了Maven Link并创建了< code>pom.xml,如下所示: 但是,之后我使用< code>mvn package。它抛出这个异常: 之后,我使用这个链接Maven link 2并创