2017-02-16 87 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语句相同(似乎无法在'steps'中使用这些语句)。无论是以这种方式设计(以及为什么),还是仅仅是一个即将到来的功能,都无法真正找到任何文档。 –

+0

是的,认为这是故意的,即有一个原因是他们已经添加了“脚本”步骤。如果你看这里,https://jenkins.io/doc/book/pipeline/syntax/#declarative-steps,这里有一些推理。我认为这个“限制”的主要原因是他们添加了声明性管道的图形编辑,因此'steps'部分内必须有一组有限的构造。 –