Обновление глобальной переменной среды в конвейере Jenkins со стадии - возможно ли это? - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть Jenkinsfile с некоторыми глобальными переменными и некоторыми этапами.я могу обновить глобальную переменную вне сцены?

Пример:

pipeline {
  agent any

  environment {                 
    PASSWD = "${sh(returnStdout: true, script: 'python -u do_some_something.py')}"
    ACC = "HI"
  }

  stage('stage1') {
      when { expression { params.UPDATE_JOB == false } }

      steps{
        script {
          def foo= sh(  returnStdout: true, script: 'python -u do_something.py ')
          env.ACC =  foo
          println foo
          print("pw")
          println env.PASSWD
       }
     }  
   }
}

Можно ли обновить переменную ACC значением из foo, чтобы я мог использоватьПеременная ACC на следующем этапе?

1 Ответ

0 голосов
/ 29 ноября 2018

Вы не можете переопределить переменную среды, определенную в блоке environment {}.Однако есть один трюк, который вы можете использовать.Вы можете ссылаться на ACC переменную окружения двумя способами:

  • явным образом env.ACC
  • неявным образом ACC

Значениеenv.ACC нельзя изменить после установки в блоке environment {}, но ACC ведет себя следующим образом: если переменная ACC не установлена, то значение env.ACC становится доступным (если, конечно, существует).Но когда переменная ACC инициализируется на любом этапе, ACC ссылается на это вновь установленное значение на любом этапе.Рассмотрим следующий пример:

pipeline {
    agent any

    environment {
        FOO = "initial FOO env value"
    }

    stages {
        stage("Stage 1") {
            steps {
                script {
                    echo "FOO is '${FOO}'" // prints: FOO is 'initial FOO env value'

                    env.BAR = "bar"
                }
            }
        }

        stage("Stage 2") {
            steps {
                echo "env.BAR is '${BAR}'" // prints: env.BAR is 'bar'
                echo "FOO is '${FOO}'" // prints: FOO is 'initial FOO env value'
                echo "env.FOO is '${env.FOO}'" // prints: env.FOO is 'initial FOO env value'
                script {
                    FOO = "test2"
                    env.BAR = "bar2"
                }
            }
        }

        stage("Stage 3") {
            steps {
                echo "FOO is '${FOO}'" // prints: FOO is 'test2'
                echo "env.FOO is '${env.FOO}'" // prints: env.FOO is 'initial FOO env value'
                echo "env.BAR is '${BAR}'" // prints: env.BAR is 'bar2'

                script {
                    FOO = "test3"
                }

                echo "FOO is '${FOO}'" // prints: FOO is 'test3'
            }
        }
    }
}

И, как вы можете видеть в приведенном выше примере, единственное исключение из правила - если переменная окружения инициализируется вне блока envrionment {}.Например, env.BAR в этом примере было инициализировано в Stage 1, но значение env.BAR можно изменить в Stage 2, и Stage 3 увидит измененное значение.

...