首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将环境变量传递给Jenkins管道工具部分?

如何将环境变量传递给Jenkins管道工具部分?
EN

Stack Overflow用户
提问于 2021-08-12 18:56:27
回答 1查看 1.7K关注 0票数 1

在Jenkins > Global > JDK安装>我添加了JDK7,它的名称是oracle-7u80;类似地,在Maven安装下,我添加了Maven 3.5安装,并将其命名为mvn。

现在,我在管道脚本中使用上述两个安装:

代码语言:javascript
复制
    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定义在属性内容中提供环境变量。

我的目的是得到这样的格式:

代码语言:javascript
复制
pipeline {
    agent any
    tools {
        maven '${MVN_VERSION}'
        jdk '${ORACLE_VERSION'}
    }
    stages {
        stage('Example') {
            steps {
            
                }
            }
        }
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-12 19:47:22

管道项目通常与Jenkinsfile (管道脚本来自管道→定义下拉列表中的管道脚本)一起使用,以将源代码版本及其构建配置绑定到一起以进行可复制的构建。

在构建之前从外部注入构建工具版本与此想法相矛盾。

我也不确定这在概念上是否可能,因为(环境)变量来自外部的值是在stages ... script中设置的,这是一个与tools完全不同的声明分支。但是,这叫做声明式管道,不是命令,所以秩序不重要.理论上。我试试看。

有关将外部值传递到内部变量的一般情况,请参阅以及问题的答案。

Maven版本注入尝试

代码语言:javascript
复制
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}"                
            }
        }
    }
}

如预期的那样:

代码语言:javascript
复制
[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_NAMEJDK_GLOBAL_TOOL_NAME)参数化,这是有效的:

代码语言:javascript
复制
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}"                
            }
        }
    }
}

控制台输出

代码语言:javascript
复制
[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/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68762847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档