我在詹金斯有一个Maven工作.在实际构建步骤之前,我有一个"执行shell"预构建步骤.在那个shell中我设置了一个变量:
REVISION=$(cat .build_revision)
Run Code Online (Sandbox Code Playgroud)
我想在"目标和选项"中的Maven构建作业中使用该变量:
clean install -Drevision=${REVISION}
Run Code Online (Sandbox Code Playgroud)
但这不起作用!"Drevision"设置为"$ {REVISION}"而不是$ {REVISION}的实际值.输出:
Executing Maven: -B -f /home/gerrit/.jenkins/jobs/<job_name>/workspace/pom.xml clean install -Drevision=${REVISION}
Run Code Online (Sandbox Code Playgroud)
它适用于Jenkins环境变量:
clean install -Dbuild=${BUILD_NUMBER}
Run Code Online (Sandbox Code Playgroud)
它将"Dbuild"设置为实际的构建号.输出:
Executing Maven: -B -f /home/gerrit/.jenkins/jobs/<job_name>/workspace/pom.xml clean install -Dbuild=54
Run Code Online (Sandbox Code Playgroud)
我的问题:如何在Maven"目标和选项"中使用shell变量?
编辑:
我尝试在预构建shell之后使用Jenkins EnvInject插件 "注入环境变量",现在可以通过例如构建后的shell访问我的变量,但它仍然无法在Maven"目标和选项"中使用.
然后可以使用EnvInject插件设置"向构建过程注入环境变量",这实际上使这些变量在Maven"目标和选项"中可用,但这些变量在SCM结账后立即设置,即在预构建步骤之前,并且不支持表达式评估.
jju*_*kel 36
你在这里是正确的轨道,但错过了EnvInject-Plugin的第三个功能:"注入环境变量"构建步骤,可以根据脚本或属性的结果将变量注入以下构建步骤.
我们正在使用EnvInject插件; 脚本设置资源并使用属性传递其参数,然后由插件作为环境变量传播这些属性.
即为构建设置临时数据库:

小智 8
我遇到了一个非常类似的问题,试图计算构建版本并将其注入构建版本.在遇到所有相同的问题(不扩展等)之后,我使用了"从脚本生成环境变量"选项,该选项将输出解释为标签=值对到Jenkins变量中.剧本 :
#generate a version code that is high enough to surpass previously published clients
val=`expr 150000 + $BUILD_NUMBER`
echo VERSION_CODE=$val
Run Code Online (Sandbox Code Playgroud)
在此之后,我能够将$ VERSION_CODE注入maven,如下所示:
-Dbuild.vercode=${VERSION_CODE}
Run Code Online (Sandbox Code Playgroud)
希望对你有用.
| 归档时间: |
|
| 查看次数: |
53996 次 |
| 最近记录: |