0

我有一個CD管道,需要用戶在某些階段確認,所以我想在管道等待用戶輸入時釋放服務器資源。Jenkins 2聲明性管道 - 是否有可能運行節點(代理任何)中的所有階段,但有一些沒有它運行?

pipeline { 
    agent any 
    stages { 
    stage ('Build Stage') { 
     steps { 
     ... 
     } 
    } 
    stage ('User validation stage') { 
     agent none 
     steps { 
     input message: 'Are you sure you want to deploy?' 
     } 
    } 
    stage ('Deploy Stage') { 
     steps { 
     ... 
     } 
    } 
    } 
} 

你可以在上面看到,我有一個全球性的agent any但在用戶確認階段我加agent none

有人可以確認這做我想做的事(沒有代理/節點正在等待用戶輸入)?我沒有看到如何驗證它,在執行日誌中沒有什麼不同...

如果不是,我該怎麼做?

+0

你有在這裏的迴應https://stackoverflow.com/questions/42159221/use-a-lightweight-executor-for-a-declarative-pipeline-stage-agent-none –

+0

它看起來不錯,但仍然引發一些問題,使用相同的標籤可以在不同的階段獲得不同的節點(工作區)?我們該如何處理? – codependent

回答

0

這不會像你期望的那樣工作。您無法在整個管道中指定agent any,然後預計agent none不佔用執行程序。

爲了證明這一點,因爲你擁有它,你可以運行此代碼,雖然它是在input階段等待,去你的主詹金斯網頁,並期待在構建執行人狀態。你會看到有一個執行者仍然在執行你的工作。

接下來,將您的管道切換爲agent none,並將agent any添加到所有其他步驟(除了輸入步驟之外)並執行相同的測試。您可以看到,在輸入階段等待時,沒有任何執行者被佔用。

至於你關於不同節點上的不同工作區的問題......假設你使用SCM中的代碼,它將在每個新節點上檢出,所以這不是問題。您唯一需要擔心的是您在每個階段創建的工件。

「希望」你會留在同一個節點上是不安全的,儘管詹金斯會「試着」讓你留在那裏。但即使如此,也不能保證您將獲得相同的工作區目錄。

正確的處理方法是stash您可能已創建或修改的所有文件,您將在後面的階段中使用。然後在下面的階段,unstash所需的文件。永遠不要假設文件會在具有自己節點聲明的階段之間進行。

+0

感謝您的信息。只是有幾個疑問:我必須在存儲時使用唯一的名稱嗎?例如連接「stashedArtifact」+ buildNumber。是否有任何問題存儲工件,如戰爭或jar文件高達80MB? – codependent

+0

你可以將它命名爲你想要的,並使用它來去除。但我不知道使用同一個名字存儲多次的影響。它會打破還是結合?不確定。 關於大小的問題在這裏的文檔中得到解答:https://jenkins.io/doc/pipeline/steps/workflow-basic-steps/#code-stash-code-stash-some-files-to-be-二手稍後在最構建 –

相關問題