2017-02-16 4 views
2

Я пытаюсь преобразовать конвейер сценария в декларативный трубопровод и работать в некоторых основных (я думаю) проблемах.Назначение переменных в параллельном шаге с использованием шагов декларативного трубопровода в Jenkins

stage ('Deploy to Docker') { 
     steps { 
      parallel (
       "instance1" : { 
        environment { 
         containerId = sh(script: "docker ps --quiet --filter name=${fullDockerImageName}", returnStdout: true).trim() 
        } 
        steps { 
         .... 
        } 
       } 
      ) 
     } 
    } 

Это вызывает следующее исключение:

WorkflowScript: 197: Expected a step @ line 197, column 29. 
          containerId = sh(script: "docker ps --quiet --filter name=${fullDockerImageName} ", returnStdout: true).trim() 

Поскольку я не позволил сделать переменное присвоение внутри steps {} блока, я переехал его в environment {} блока, но это, кажется, не сделайте трюк.

Любая идея о том, как установить такие переменные?

ответ

3

См. my answer here, вы можете выполнить произвольный сценарий сценария внутри этапа script. Итак, на ваш пример:

stage ('Deploy to Docker') { 
    steps { 
     parallel (
      "instance1" : { 
       steps { 
        script { 
         env['containerId'] = sh(script: "docker ps --quiet --filter name=${fullDockerImageName}", returnStdout: true).trim() 
        } 
        .... 
       } 
      } 
     ) 
    } 
} 
+0

Спасибо за ответ, попробуем это скоро. Это намеренно? Я предполагаю, что это то же самое с if-statements (возможно, они не могут использоваться в «шагах»). Невозможно найти какую-либо документацию, была ли она разработана таким образом (и почему), или если это просто функция, которая есть. –

+0

Да, подумайте, что это намеренно, т. Е. Есть причина, по которой они добавили шаг 'script'. Если вы посмотрите здесь, https://jenkins.io/doc/book/pipeline/syntax/#declarative-steps, есть некоторые рассуждения об этом. Я думаю, что основной причиной этого «ограничения» является то, что они добавляют графическое редактирование декларативных конвейеров, и, следовательно, в разделе «шаги» должен быть ограничен набор конструктов. –