Конвейер Дженкинса присваивает переменную несколько раз

#if-statement #jenkins #jenkins-groovy

#оператор if #Дженкинс #дженкинс-заводной

Вопрос:

Возможно ли повторно присвоить значение переменной несколько раз внутри IF в одном блоке скрипта? У меня есть блок сценария, в котором мне нужно передавать значения переменных в разные среды:

 script {
    if (env.DEPLOY_ENV == 'staging') {
        echo 'Run LUX-staging build'
        def ENV_SERVER = ['192.168.141.230']
        def UML_SUFFIX = ['stage-or']
        sh 'ansible-playbook nginx_depl.yml --limit 127.0.0.1'
        
        echo 'Run STAGE ADN deploy'
        def ENV_SERVER = ['192.168.111.30']
        def UML_SUFFIX = ['stage-sg']
        sh 'ansible-playbook nginx_depl.yml --limit 127.0.0.1'                      
        
        echo 'Run STAGE SG deploy'
        def ENV_SERVER = ['stage-sg-pbo-api.example.com']
        def UML_SUFFIX = ['stage-ba']
        sh 'ansible-playbook nginx_depl.yml --limit 127.0.0.1'                                              
    }
}
 

Но я получаю сообщение об ошибке в задании Дженкинса при втором назначении переменной:

 org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
WorkflowScript: 80: The current scope already contains a variable of the name ENV_SERVER
@ line 80, column 11.
                    def ENV_SERVER = ['192.168.111.30']
         ^

WorkflowScript: 81: The current scope already contains a variable of the name UML_SUFFIX
 @ line 81, column 11.
                    def UML_SUFFIX = ['stage-sg']
         ^
 

Или, возможно, любые другие способы множественного присвоения внутри одного IF части блока скрипта.

Ответ №1:

Использование def определяет переменную. Это необходимо только при первом вызове. поэтому удаление def для других вызовов должно работать

 script {
  if (env.DEPLOY_ENV == 'staging') {
      echo 'Run LUX-staging build'
      def ENV_SERVER = ['192.168.141.230']
      def UML_SUFFIX = ['stage-or']
      sh 'ansible-playbook nginx_depl.yml --limit 127.0.0.1'
      
      echo 'Run STAGE ADN deploy'
      ENV_SERVER = ['192.168.111.30']
      UML_SUFFIX = ['stage-sg']
      sh 'ansible-playbook nginx_depl.yml --limit 127.0.0.1'                      
      
      echo 'Run STAGE SG deploy'
      ENV_SERVER = ['stage-sg-pbo-api.example.com']
      UML_SUFFIX = ['stage-ba']
      sh 'ansible-playbook nginx_depl.yml --limit 127.0.0.1'                                              
  }
}
 

Переменные будут ограничены только блоком if, поэтому у вас не будет доступа к ним за пределами этого блока.