首页 > 解决方案 > 詹金斯,全球变量

问题描述

有以下代码可以正常工作(成功添加全局变量),但在管道中执行此代码的结果总是 FAILED。我无法使用 try-catch 捕获错误 - 没有任何内容输出到管道控制台。如果我用def做代码(行被注释掉),FAILED不会发生(管道是绿色的),但是代码不起作用(变量没有添加。我如何发现错误或确保管道没有不失败?

import hudson.slaves.EnvironmentVariablesNodeProperty
import jenkins.model.*

try {
  /*
  Jenkins instance = Jenkins.getInstance()
  //jenkins = Jenkins.instance //this need script approve
  def globalNodeProperties = instance.getGlobalNodeProperties()
  def envVarsNodePropertyList = globalNodeProperties.getAll(hudson.slaves.EnvironmentVariablesNodeProperty.class)
  def newEnvVarsNodeProperty = null
  def envVars = null    
   */

  instance = Jenkins.getInstance()
  globalNodeProperties = instance.getGlobalNodeProperties()
  envVarsNodePropertyList = globalNodeProperties.getAll(EnvironmentVariablesNodeProperty.class)

  newEnvVarsNodeProperty = null
  envVars = null

  if ( envVarsNodePropertyList == null || envVarsNodePropertyList.size() == 0 ) {
    newEnvVarsNodeProperty = new EnvironmentVariablesNodeProperty();
    globalNodeProperties.add(newEnvVarsNodeProperty)
    envVars = newEnvVarsNodeProperty.getEnvVars()
  } else {
    envVars = envVarsNodePropertyList.get(0).getEnvVars()
  }
} catch(Exception ex) {
  println("Exception error: ${ex}")
}


envVars.put("sample_var", "Sample Groovy Global Var")
instance.save()

标签: variablesjenkins

解决方案


请检查此(功能)代码(它也不起作用):

import hudson.slaves.EnvironmentVariablesNodeProperty
import jenkins.model.*

@NonCPS
def add_global_var() {

instance = Jenkins.getInstance()
globalNodeProperties = instance.getGlobalNodeProperties()
envVarsNodePropertyList = globalNodeProperties.getAll(EnvironmentVariablesNodeProperty.class)

newEnvVarsNodeProperty = null
envVars = null

if ( envVarsNodePropertyList == null || envVarsNodePropertyList.size() == 0 ) {
  newEnvVarsNodeProperty = new EnvironmentVariablesNodeProperty();
  globalNodeProperties.add(newEnvVarsNodeProperty)
  envVars = newEnvVarsNodeProperty.getEnvVars()
} else {
  envVars = envVarsNodePropertyList.get(0).getEnvVars()
}

envVars.put("snapshot_id", "Sample Groovy Global Var 4")
instance.save()

}


pipeline {
    agent { node { label 'slave' } }

    stages {

        stage('Check global var') {

            steps {

                add_global_var()

            }

        }
    }
}

推荐阅读