Установить переменную окружения jenkins с помощью jenkinsfile - PullRequest
0 голосов
/ 01 марта 2019

В 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()

Сегодня мы используем Jenkins2, с функцией jenkinsfile, и я хотел знать, как сделать то же самоев файл Дженкинса?

это будет работать, если да, есть ли лучший способ?:

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

EDIT : допустим, у меня есть существующая переменная env, LAST_DEPLOY = "0.1", используя:

environment {
    LAST_DEPLOY = "0.2"
 } 

только изменит эту переменную длятекущее выполнение и каким-то образом в конце оно будет сброшено до «0.1», я хочу, чтобы модификация продолжалась для следующих сборок.

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Итак, текущее решение, которое я нашел, было добавить это в файл 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 -> Утверждение сценария в процессе -> Утвердить

Cf: Jenkins CI Конвейерные сценарии не разрешают использовать метод groovy.lang.GroovyObject https://jenkins.io/doc/book/managing/script-approval/

0 голосов
/ 01 марта 2019

просто посмотрите официальные документы, https://jenkins.io/doc/pipeline/tour/environment/

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

, и затем вы сможете использовать его в sh шаге, как $ {NODE_ENV}

...