Декларативный конвейерный набор Jenkins для глобальной среды var из результатов предыдущего этапа - PullRequest
0 голосов
/ 27 февраля 2019

в декларативном конвейере Jenkins, есть ли способ установить глобальную переменную среды для этапа на основе результатов предыдущего этапа?Я хотел бы иметь возможность динамически устанавливать агент на основе этого.У меня есть код, который не работает (ниже), но это иллюстрирует то, что я пытаюсь сделать:

pipeline {
  agent { node { label 'standard' } }

  stages {
    stage ('first') {
      steps {
        sh 'MYSTRING=`myapp.py getstring`'
      }
    }
    stage ('second') {
      agent { node { label "${MYSTRING}-agent" } }
      ...
    }
  }
}

1 Ответ

0 голосов
/ 27 февраля 2019

Это бы сработало.

class Global{
    static nextNode
}

pipeline {
  agent { label 'standard' } 
  stages {
    stage ('first') {
      steps {
          script {
            Global.nextNode=sh(script: 'myapp.py getstring', returnStdout: true).trim()
          }
      }
    }
    stage ('second') {
      agent { label "${Global.nextNode}-agent" } 
    }
  }
}

Но я настоятельно рекомендую вам забыть о декларативном синтаксисе конвейера, поскольку он, вероятно, приведет к очень быстрому росту седых волос!

Ниже приведенопример в скриптовом режиме.Приведенный ниже пример действительно работает, в то время как приведенный выше требует двух исполнителей.В моем случае главный узел имеет только один, и поэтому он не работает, поскольку агенты являются вложенными.

node('linux') {
  stage ('first') {
    nextNode=sh(script: 'echo \$NODE_NAME', returnStdout: true).trim()
    echo nextNode
  }
}

node ("${nextNode}") {
  stage ('second') {
    echo nextNode
    sh 'ls'
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...