jenkins dsl 作业脚本:如何在下游参数化步骤中访问环境变量(通过 propertiesFile 注入)
jenkins dsl job script: How to access environment variable, (which is injected via propertiesFile, ) in downstreamParameterized step
我的 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 。感谢任何帮助,提前致谢。
您可以使用在 SCM 之前执行的选项 Prepare an environment for the run
。
选项 Prepare an environment for the run
不属于 pre-build/ build /post build
,但属于工作 properties
。
没有作业 DSL API 支持配置此选项。但是我们可以使用configure块。
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 {}
}
以上作业DSL可以生成以下xml作为种子作业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 是否符合预期。
我的 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 。感谢任何帮助,提前致谢。
您可以使用在 SCM 之前执行的选项 Prepare an environment for the run
。
选项 Prepare an environment for the run
不属于 pre-build/ build /post build
,但属于工作 properties
。
没有作业 DSL API 支持配置此选项。但是我们可以使用configure块。
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 {}
}
以上作业DSL可以生成以下xml作为种子作业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 是否符合预期。