jenkins - jenkins dsl 作业脚本:如何在下游参数化步骤中访问环境变量(通过 propertiesFile 注入)
问题描述
我的 dsl 工作脚本简介
job('test') {
steps {
shell('echo VERSION=$VERSION > version.txt\n' +
'echo VERSION_SUFFIX=$VERSION_SUFFIX >> version.txt\n' +
'echo GROUP_ID=$GROUP_ID >> version.txt')
// EnvInject Plugin
environmentVariables {
propertiesFile('version.txt')
}
}
publishers {
postBuildScripts {
steps {
shell('echo ${VERSION}')
}
onlyIfBuildSucceeds(false)
onlyIfBuildFails(false)
}
downstreamParameterized {
trigger('next-job') {
parameters {
predefinedProp('relVersion', '${VERSION}')
}
}
}
}
}
我需要 $VERSION 号才能将参数传递给下游作业。
我尝试了 ${env.VERSION} 并尝试了许多选项,但我无法抓住 VERSION 。任何帮助表示赞赏,在此先感谢。
解决方案
您可以使用Prepare an environment for the run
在 SCM 之前执行的选项。
选择Prepare an environment for the run
不是属于pre-build/ build /post build
,而是工作properties
。
没有作业 DSL API 支持配置此选项。但是我们可以使用配置块。
job('next-job') {
configure { project ->
project / 'properties' << 'EnvInjectJobProperty' {
info {
loadFilesFromMaster false
propertiesContent 'Branch=${relVersion}'
}
keepBuildVariables true
keepJenkinsSystemVariables true
overrideBuildParameters false
on true
}
} // end of configure block
scm {
git {
remote {
url("ssh://git@bitbucket.rl.git")
}
branches('${branch}')
}
} // end of scm
steps {}
publishers {}
}
以上job DSL可以生成以下xml作为种子job的config.xml的内容
<project>
<actions></actions>
<description></description>
<keepDependencies>false</keepDependencies>
<properties>
<EnvInjectJobProperty>
<info>
<loadFilesFromMaster>false</loadFilesFromMaster>
<propertiesContent>Branch=${relVersion}</propertiesContent>
</info>
<keepBuildVariables>true</keepBuildVariables>
<keepJenkinsSystemVariables>true</keepJenkinsSystemVariables>
<overrideBuildParameters>false</overrideBuildParameters>
<on>true</on>
</EnvInjectJobProperty>
</properties>
<canRoam>true</canRoam>
<disabled>false</disabled>
<blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
<blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
<triggers></triggers>
<concurrentBuild>false</concurrentBuild>
<builders></builders>
<publishers></publishers>
<buildWrappers></buildWrappers>
<scm class='hudson.plugins.git.GitSCM'>
<userRemoteConfigs>
<hudson.plugins.git.UserRemoteConfig>
<url>ssh://git@bitbucket.rl.git</url>
</hudson.plugins.git.UserRemoteConfig>
</userRemoteConfigs>
<branches>
<hudson.plugins.git.BranchSpec>
<name>${branch}</name>
</hudson.plugins.git.BranchSpec>
</branches>
<configVersion>2</configVersion>
<doGenerateSubmoduleConfigurations>false</doGenerateSubmoduleConfigurations>
<gitTool>Default</gitTool>
</scm>
</project>
您可以在http://job-dsl.herokuapp.com/上尝试 jod DSL来检查生成的 xml 是否符合预期。
推荐阅读
- c++ - 使用 SIMD 优化列最大值
- node.js - 使用验证器功能验证密码在猫鼬中不起作用
- c# - 如何从 dot net core 3.1 中的多个连接字符串自动连接
- swift - AVAudioEngine MIDI 文件播放(当前进度+MIDI 结束回调)Swift
- javascript - 单击一个复选框后,所有复选框都被选中
- flutter - 我想在 Flutter 中的每个午夜重置以前的数据
- java - Netbeans 未安装在 MacOS Big Sur 上
- mysql - VB.NET:mysql更新查询
- php - php exec 返回意外结果,而在终端中直接调用命令返回正确结果(使用 Laravel)
- javascript - Firebase 函数会话 Cookie 未在子域上定义