在Jenkins > Global > JDK安装>我添加了JDK7,它的名称是oracle-7u80;类似地,在Maven安装下,我添加了Maven 3.5安装,并将其命名为mvn。
现在,我在管道脚本中使用上述两个安装:
pipeline {
agent any
tools {
maven 'mvn'
jdk 'oracle-7u80'
}
stages {
stage('Example') {
steps {
}
}
}
}我不想在管道中的Tools部分中硬编码jdk和Maven值。我希望通过环境变量或属性传递这些值,以便能够在外部管理它们。
是否有一种方法将使用环境变量的工具中定义的值(mvn或oracle-7u80)传递给Maven和jdk?
就像我需要在Steps/Script部分中注入一个值一样,在Jenkins管道中,我可以在环境变量中全局定义,或者使用Jenkins项目配置通用检查标记准备运行检查标记的环境保持Jenkins环境变量,我可以用properties File定义在属性内容中提供环境变量。
我的目的是得到这样的格式:
pipeline {
agent any
tools {
maven '${MVN_VERSION}'
jdk '${ORACLE_VERSION'}
}
stages {
stage('Example') {
steps {
}
}
}
}发布于 2021-08-12 19:47:22
管道项目通常与Jenkinsfile (管道脚本来自管道→定义下拉列表中的管道脚本)一起使用,以将源代码版本及其构建配置绑定到一起以进行可复制的构建。
在构建之前从外部注入构建工具版本与此想法相矛盾。
我也不确定这在概念上是否可能,因为(环境)变量来自外部的值是在stages ... script中设置的,这是一个与tools完全不同的声明分支。但是,这叫做声明式管道,不是命令,所以秩序不重要.理论上。我试试看。
有关将外部值传递到内部变量的一般情况,请参阅以及问题的答案。
Maven版本注入尝试
pipeline {
agent any
tools {
maven "${MVN_VERSION}"
}
stages {
stage('Try: Maven version injected') {
steps {
script {
env.MVN_VERSION = sh script: 'echo "Maven 3.8.1"', returnStdout: true
}
echo "${MVN_VERSION}"
}
}
}
}如预期的那样:
[Pipeline] stage
[Pipeline] { (Declarative: Tool Install)
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
groovy.lang.MissingPropertyException: No such property: MVN_VERSION for class: groovy.lang.Binding
...我脑海中浮现的另一个想法是通过选择参数s使这个项目通过两个参数(例如MVN_GLOBAL_TOOL_NAME、JDK_GLOBAL_TOOL_NAME)参数化,这是有效的:
pipeline {
agent any
tools {
maven "${MVN_GLOBAL_TOOL_NAME}" // coming from parameterized project's build parameter
}
stages {
stage('Maven tool as build parameter') {
steps {
echo "MVN_GLOBAL_TOOL_NAME=${MVN_GLOBAL_TOOL_NAME}"
}
}
}
}控制台输出
[Pipeline] stage
[Pipeline] { (Declarative: Tool Install)
[Pipeline] tool
[Pipeline] envVarsForTool
[Pipeline] }
[Pipeline] // stage
[Pipeline] withEnv
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Maven version as build parameter)
[Pipeline] tool
[Pipeline] envVarsForTool
[Pipeline] withEnv
[Pipeline] {
[Pipeline] script
[Pipeline] {
[Pipeline] echo
MVN_GLOBAL_TOOL_NAME=Maven 3.8.1
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS另见${JENKINS_URL}/job/${JOB_NAME}/api/
执行构建
如果构建包含参数,则将其发布到此URL备注:${JENKINS_URL}/job/${JOB_NAME}/buildWithParameters,并将参数作为表单数据提供。
另见:${JENKINS_URL}/env-vars.html/。
https://stackoverflow.com/questions/68762847
复制相似问题