代码之家  ›  专栏  ›  技术社区  ›  Logan Wlv

用jenkins文件设置jenkins环境变量

  •  0
  • Logan Wlv  · 技术社区  · 6 年前

    在Jenkins1中,我们有一个脚本来设置环境变量,类似于:

    //...imports
    instance = Jenkins.getInstance()
    globalNodeProperties = instance.getGlobalNodeProperties()
    envVarsNodePropertyList = globalNodeProperties.getAll(hudson.slaves.EnvironmentVariablesNodeProperty.class)
    
    newEnvVarsNodeProperty = null
    envVars = null
    
    if ( envVarsNodePropertyList == null || envVarsNodePropertyList.size() == 0 ) {
      newEnvVarsNodeProperty = new hudson.slaves.EnvironmentVariablesNodeProperty();
      globalNodeProperties.add(newEnvVarsNodeProperty);
      envVars = newEnvVarsNodeProperty.getEnvVars();
      envVars.put(NEW_VAR, "toto");
    } else {
      for (property in envVarsNodePropertyList) {
        envVars = property.getEnvVars();
        envVars.put("EXISTING_VAR","tata");
      }
    }
    instance.save()
    

    def setEnvVar() {
        script {
        //all the script above
        }
    }
    pipeline {
    agent any
    tools {
        maven 'Maven3_6'
        jdk 'Jdk8'
    }
    stages {
        stage ('Initialize') {
            steps {
                setEnvVar()
            }
        }
    ...
    

    :假设我有一个现有的env变量,LAST_DEPLOY=“0.1”使用:

    environment {
        LAST_DEPLOY = "0.2"
     } 
    

    只会修改当前执行的变量,最后会重置为“0.1”,我希望修改能持续到下一个版本。

    0 回复  |  直到 6 年前
        1
  •  0
  •   Denys    6 年前

    看看官方文件, https://jenkins.io/doc/pipeline/tour/environment/

       environment {
            NODE_ENV = 'sandbox'
            DB_NAME    = 'db_common'
        }
    

    然后你就可以用在 像${NODE\u ENV}这样的步骤

        2
  •  0
  •   Logan Wlv    6 年前

    所以我找到的当前解决方案是在jenkins文件中添加以下内容:

    import jenkins.*
    import jenkins.model.*
    import hudson.*
    import hudson.model.*
    import hudson.slaves.*
    
    def updateEnvVar() {
        script {
        instance = Jenkins.getInstance()
        globalNodeProperties = instance.getGlobalNodeProperties()
        envVarsNodePropertyList = globalNodeProperties.getAll(hudson.slaves.EnvironmentVariablesNodeProperty.class)
    
        newEnvVarsNodeProperty = null
        envVars = null
    
        if ( envVarsNodePropertyList == null || envVarsNodePropertyList.size() == 0 ) {
          newEnvVarsNodeProperty = new hudson.slaves.EnvironmentVariablesNodeProperty();
          globalNodeProperties.add(newEnvVarsNodeProperty);
          envVars = newEnvVarsNodeProperty.getEnvVars();
          envVars.put(NEW_VAR, "toto");
        } else {
          for (property in envVarsNodePropertyList) {
            envVars = property.getEnvVars();
            envVars.put("EXISTING_VAR","tata");
          }
        }
    
        instance.save()
        }
    }
    pipeline {
    ...
    

    首先,Jenkins会发送一些安全错误,您可以通过 管理Jenkins->过程中脚本审批->审批

    Jenkins CI Pipeline Scripts not permitted to use method groovy.lang.GroovyObject https://jenkins.io/doc/book/managing/script-approval/