2017-02-16 99 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'部分內必須有一組有限的構造。 –

相關問題