2012-08-16 63 views
11

我正在使用Jenkins創建構建管道,並且需要觸發管道中的部署步驟。這意味着手動過程(構建自動發生,定時,然後在部署階段停止,等待手動授權)。如何鏈接手動觸發的下游作業,同時傳遞參數?

我需要使用上一步中的參數觸發部署步驟。

因此,使用「參數化插件」,我可以在作業之間傳遞參數。我可以觸發自動或手動觸發的下游作業(不知道這是標準功能還是手動構建是由某個插件添加的)。

但是,我找不到任何方式來觸發手動參數化作業。

有誰知道一種方法來做到這一點?有另一個我可以使用的插件嗎?

我需要參數的原因是我創建了一個通用的部署作業,並且需要傳遞模塊名稱和maven版本以進行部署。我爲可能爲爲每個模塊創建特定的部署作業,但這會非常痛苦。

我也一直在考慮下面,但它似乎是一個雜牌:

  1. 自動化作業執行建立,觸發「部署觸發器」建設,傳遞參數。
  2. 「部署觸發器」這些參數寫入一個文件在文件系統(生成步驟 - shell執行),並手動觸發實際部署作業
  3. 部署作業(必須使用工作區從「部署觸發器」工作)從文件系統讀取參數(使用EnvInject插件)。

有各種各樣的問題,這種方法

  1. 我只是不喜歡它。
  2. 有一箇中間作業只是傳遞參數。這雜波詹金斯工作區
  3. 由於在同一個工作區進行構建,似乎脆弱,我(!雖然可行)
+0

你有沒有想出這可容忍的解決方案? – Niklas 2012-11-20 14:17:22

+0

不,最後我會自動觸發一箇中間作業,並將參數傳遞給它。這將環境變量設置爲工作區FS上的文件。然後我觸發了一個手動步驟,在_same_環境中運行另一個作業,該環境基於之前設置的環境文件設置環境。哈克。 – GKelly 2012-11-30 12:25:57

+0

我剛剛在構建中的後續步驟中使用腳本來回顯myparameter = $ POM_VERSION >> version.properties。 然後使用EnvInject讀取下一個版本中的version.properties。 – 2015-10-29 17:21:09

回答

6

build-pipeline-plugin的當前生產版本(1.4.2)允許它 - 使用參數指定手動下游作業,這些參數顯示在管道上並可從此處開始。 舊版本無法做到。

+0

還沒有嘗試過(我已經離開了這個項目),但我會信任這個插件。 – GKelly 2014-06-04 14:51:53

+1

我仍然無法完成這項工作。就像OP一樣,我可以使其自動化,並且效果很好,但手動不。 – 2015-10-29 16:48:50

+0

我有一個問題,自動運行是主導手動運行。事實證明,當另一項工作運行時,而不是完全依賴build-pipeline-plugin提供的手動觸發器,工作被設置爲構建。 – J0hnG4lt 2016-03-08 15:08:07

2

看看在建立流水線插件https://wiki.jenkins-ci.org/display/JENKINS/Build+Pipeline+Plugin

您可以指定要自動觸發或手動觸發的作業。

此外,如果你需要就業之間的參數傳遞,您將需要下載Groovy插件https://wiki.jenkins-ci.org/display/JENKINS/Groovy+plugin

爲了傳遞參數可以說,任務之間的SVN版本,你需要執行系統Groovy腳本在你的構建開始。這是一個將添加可供任何下游作業使用的SVN_UPSTREAM參數的示例。注意:我已經注意到創建一個下游作業,也有一個系統groovy腳本的問題。它似乎吹走了對創建的原始參數的任何引用。

import hudson.model.* 
def build = Thread.currentThread().executable; 
build.addAction(new ParametersAction(new StringParameterValue("SVN_UPSTREAM", build.getEnvVars()['SVN_REVISION']))); 
println "SVN_UPSTREAM:" + build.getEnvVars()['SVN_UPSTREAM']; 
+0

問題是我需要爲後續作業設置的設置是基於生成過程中生成的東西(例如,我傳入了構建的工件的版本號,這些工件是基於jenkins內部版本號和計算得出的值[maven版本,減'-SNAPSHOT]')。據我所知,系統腳本只能在開始工作時運行。 – GKelly 2012-11-30 12:28:46

+0

我試過各種插件; build-pipeline-plugin,build-flow-plugin,parameterized-trigger-plugin。問題是,他們都沒有提供這種功能。 [構建流插件看起來很有前途,但我一直沒有跟上它的發展。它可能現在提供這種功能,我不知道。雖然沒有在wiki頁面上提及任何類似的內容]。 – GKelly 2012-11-30 12:36:25

+0

使用groovy腳本查看上游作業是否正確,但不會傳遞給我。 – MikePatel 2012-12-17 12:39:24

1

構建管道插件可以做到這一點,但在寫這篇文章時,並沒有在任何發佈的版本。我從main(當時的rev 392)構建插件,其中包括this issue中提到的patch,它適用於我。
安裝完成後,您可以在第一個作業中使用稱爲「構建其他項目(手動步驟)」的構建後操作,然後您可以配置要傳遞給第二個(手動觸發)管道的參數工作。

+0

這是有前途的,但似乎不工作不幸。我可以讓下游作業使用自動參數作業,但不能使用手冊。 – 2015-10-29 16:50:55

2

有一種變通方法:

  • 安裝手冊推廣(促進建立時...>只有手動批准時),在上游工作
  • 在推廣指定添加操作>觸發參數基礎上其他項目,指定作業和添加參數

一旦您手動提升上游作業的特定版本,它將啓動構建下游作業。 但是下游作業不會出現在管道上。

+0

這是一個可以接受的解決方法,可以將參數傳遞給手動觸發作業。不幸的是,就我而言,我手動觸發的作業還需要一個手動輸入的參數,在這個解決方法中它不會停止並要求輸入參數。 – 2014-07-16 13:58:56

0

在我看來是沒有可能當您啓動管道輸送,管道,插件只檢查第一份工作的參數來實現目標

- >然後顯示(或不)的initParam屏幕

但是,當(例如部署),下一步是手動的,它需要PARAMATERS那麼initParam屏幕被忽略 看問題https://issues.jenkins-ci.org/browse/JENKINS-32336

相關問題