簡體   English   中英

Jenkins - 將更新的修訂版傳遞給下游工作

[英]Jenkins - passing updated revision to downstream jobs

我們已將構建系統從CruiseControl遷移到jenkins以獲得多平台產品。 這是一個單一的整體工作:
1.檢查變化
2.更新屬性文件中的產品版本號
3.將文件提交到subversion
4.將svn修訂號傳遞給其他平台進行本地檢查(性能原因)
5. build(C ++,Java)
6.測試

在Jenkins中,我們將構建和測試分成兩個作業,構建觸發測試。 所有平台構建都必須成功運行測試。 無論平台B上的構建失敗如何,我都希望在平台A上運行測試,但這是一個不同的問題。

我現在要解決的問題是構建階段。 當Jenkins啟動時,它會在作業開始時知道存儲庫的SVN_REVISION。 我們在作業期間在編譯之前增加構建號,這是我們需要傳遞給下游作業的svn修訂版。 我們需要確保在所有平台上檢查相同的修訂版本,並且測試作業也檢查相同的修訂版本。 編譯需要2-3個小時並且測試大約需要7個小時,因此在構建期間發生的一些新提交是正常的,這些提交將包含在測試作業中。 我們還在構建階段提交了由於不同的結賬速度而被包含在一個平台中而不是其他平台的提交。

我們已經嘗試過參數化觸發插件,它可以傳遞SVN_REVISION - 時間作業開始時的修訂,但是沒有通過帶有內部版本號的修改文件的修訂版。 我們在其他情況下使用參數化觸發器,它可以滿足我們的需求。

我正在考慮將svn版本號添加到屬性文件中。 我可以在其他作業中從屬性文件中讀取修訂版,假設文件沒有被更改,這可能有風險。 svn使用':'分隔屬性,IIRC,其他屬性使用'='表示key = value,因為我們還讀取了在shell腳本中使用的屬性。 還有其他依賴項目,所以當我回到辦公室並設置一個沙箱(半天的工作)時,我會嘗試這個。

有人有任何建議或意見嗎?

感謝這篇文章和以下評論: https//itisatechiesworld.wordpress.com/jenkins-related-articles/jenkins-configuration/jenkins-passing-a-parameter-from-one-job-to-another/

以下是對我有用的答案:

  1. 獲取參數化觸發器插件(如何安裝:管理Jenkins->管理插件 - >可用並檢查“參數化觸發器插件”並安裝,注意我還安裝了“環境注入器插件”,這可能也是必要的)
  2. 轉到JOB_1並添加Post-Build操作(在其他項目上觸發參數化構建)
  3. 鍵入要構建JOB_2的項目
  4. 添加參數(預定義參數)
  5. 在“參數”框中鍵入以下內容:SVN_REV = $ {SVN_REVISION}
  6. 申請並保存
  7. 最重要的是:您必須將此參數(SVN_REV)添加到JOB_2
  8. 轉到並選中“此版本已參數化”並添加“字符串參數”
  9. 鍵入“SVN_REV”(必須是同名)並輸入默認值1或任何內容
  10. 它現在是一個環境變量,要訪問它,你只需要%SVN_REV%
  11. 在構建步驟中,您可以編寫echo%SVN_REV%並顯示SVN_REVISION。

簡而言之(必須在BOTH作業中指定參數)JOB_1 => SVN_REV = $ {SVN_REVISION}

JOB_2 =>將SVN_REV添加為字符串參數,以訪問類型%SVN_REV%

我認為克隆工作區插件適合你。 它允許您克隆工作空間,以便其他作業可以使用它。 使用這個,我會為我的工作配置這樣的東西。

  • (1)主要工作:檢查源,更新構建號,進行工作區克隆
  • (2)平台1:使用#1的克隆,為平台1構建,為測試平台1制作工作區克隆
  • (3)平台2:使用#1的克隆,為平台2構建,為測試平台2制作工作區克隆
  • (4)測試平台1:使用來自#2的克隆
  • (5)測試平台2:使用#3中的克隆

我們遇到類似的問題,我們想在奴隸機器上調用作業並傳遞master正在使用的SVN版本,以下是我們如何解決這個問題:

1)使用預定義參數說MASTER_SVN_REVISION調用子作業並為其賦值SVN_REVISION 在此輸入圖像描述

2)現在在您在步驟1中調用的作業中,使用以下機制來使用MASTER_SVN_REVISION的值

在此輸入圖像描述

參數化觸發器插件中的一個源選項是:

  • 屬性文件中的屬性從觸發構建的工作空間讀取

如果在原始工作區中創建此項而未將其簽入,則在觸發下游作業之前不會有任何更改風險。

在構建步驟中,您可以編寫echo %SVN_REV%並顯示SVN_REVISION。 簡而言之(必須在BOTH作業中指定參數)

JOB_1 => SVN_REV=${SVN_REVISION}
JOB_2 => Add SVN_REV as a String Parameter, to access type %SVN_REV%

使用${SVN_REV }進行訪問。 它對我有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM