2016-05-16 68 views
7

我今天將Jenkins從1.618升級到2.3。這包括安裝它推薦的大量插件(主要是Pipeline插件及其依賴項)。預定義的參數不再傳遞給子作業

自升級以來,任何時候任何工作開始另一項工作時,我都會收到一個新錯誤(或者至少是一個新的不需要的行爲)。除非子作業已經定義了這些鍵,否則將任何傳遞給子作爲「預定義參數」的值都將被忽略。

讓我說明一下:假設我有一個parent作業和一個child作業。

Parent通過「觸發參數化構建其他項目」後發佈操作啓動child。在該生成後操作的定義中,在「預定義參數」下,我定義了FOO=BAR

在Jenkins 1.618中,當child以這種方式觸發時,它將FOO設置爲參數,其值爲BAR

但是在2.3中,FOO沒有設置在child的構建版上。

如果我修改child使FOO始終是工作的一個參數,它會再從parent拿起FOO=BAR集。這是一個無法接受的解決方法,因爲我們以這種方式傳遞了許多參數,並且在兩端定義它們太脆弱並且違反了「不要重複自己」的原則。

無論我是通過「其他項目上的觸發器參數化構建」後構建操作還是通過MultiJob項目的MultiJob階段觸發子作業,我都可以得到相同的結果。

這是預期的改變嗎?之前是否破碎,我們只是錯誤地使用它?或者這是一個錯誤?

+3

這聽起來像它涉及到最新的[詹金斯安全更新(https://開頭詹金斯.IO /博客/ 2016/05/11 /安全更新/)。 –

+0

它確實如此。謝謝! – PortMan

回答

16

根據詹金斯2 Security updates,你可以通過設置繞過它:

hudson.model.ParametersAction.keepUndefinedParameters =真

爲了驗證這一點的解決方法,去管理詹金斯 - >腳本控制檯,然後運行:

System.setProperty("hudson.model.ParametersAction.keepUndefinedParameters", "true") 

要使其成爲永久性,請按照以下方式更改Jenkins參數(並重新啓動Jenkins之後):

在Windows上編輯jenkins。XML在詹金斯的主目錄,例如:

<arguments> 
    -Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle 
    -Dhudson.model.ParametersAction.keepUndefinedParameters=true 
    -jar "%BASE%\jenkins.war" --httpPort=8080 
</arguments> 

對於大多數Linux發行版,你可以修改JENKINS_ARGS內部文件:

的/ etc /默認/詹金斯(或詹金斯-OC )

爲CentOS,修改內部文件JENKINS_JAVA_OPTIONS

的/ etc/SYSCONFIG /詹金斯(或詹金斯-OC)

下面是報道的插件列表,所影響的問題,並已經開放的錯誤: https://wiki.jenkins-ci.org/display/JENKINS/Plugins+affected+by+fix+for+SECURITY-170

+0

如何將'hudson.model.ParametersAction.keepUndefinedParameters = true'添加到'linux'文件**/etc/default/jenkins **?我嘗試在JENKINS_ARGS字段的開頭添加它並且沒有'-D'。我似乎無法找到任何人注意如何做到這一點... –

+1

由於某種原因,在我的Debian安裝中,將選項添加到JENKINS_ARGS不起作用;相反,它在將它添加到JAVA_ARGS中時起作用 – Claudiu

+0

將'JAVA_ARGS =「$ JAVA_ARGS -Dhudson.model.ParametersAction.keepUndefinedParameters = true」'添加到**/etc/default/jenkins **(在Ubuntu上)並從命令行重新啓動Jenkins 'sudo服務jenkins重新啓動'。 – aoles

1

我找不到一個關於如何爲linux機器設置的開始 - 結束答案。幾個小時的交叉參考指南後,這是最終工作。這些詹金斯配置應該有幾種味道。我爲這個答案使用了Ubuntu風格。

  1. 獲取Groovy scripting插件
  2. 考辨您的$JENKINS_HOME被設定。默認情況下,它應該在~/.jenkins,但我沒有設置這個服務器,所以我不得不去挖掘一些配置文件。如果你也這樣做,這是我必須做的:的/etc/default/jenkinsvi
    • 檢查內容搶到$JENKINS_HOME的價值 - 我的是/var/lib/$NAME和進一步上漲的文件,$NAME設置爲jenkins,所以這是/etc/libs/jenkins
  3. 目錄更改爲$JENKINS_HOME路徑
  4. 搜索一個名爲init.groovy.d目錄 - 如果它不存在,使一個然後cd進去。您可能需要使用sudo如果需要,使其
  5. 創建於init.groovy.d目錄,在.groovy結束一個新的文件 - 我剛剛打電話給我params.groovy
  6. 輸入下面的腳本代碼到我們剛纔提出的常規文件:
    • import jenkins.model.*; System.setProperty("hudson.model.ParametersAction.keepUndefinedParameters", "true")

保存並關閉,然後重新啓動您的Jenkins服務器。

這應該解除封鎖你,如果你遇到了相同的問題,我做了。你的里程可能會有所不同:)我最終使用了一個啓動腳本來結合this solution proposed by Jenkins使用該功能。

1

有一些解決方案

  1. commabd線
    java -Dhudson.model.ParametersAction.keepUndefinedParameters=true -jar jenkins.war
  2. 常規
    import jenkins.model.*; System.setProperty("hudson.model.ParametersAction.keepUndefinedParameters", "true")
相關問題