2017-01-17 50 views
0

我有幾個源代碼存儲庫,其中包含由Jenkins構建的各種代碼位,以及Jenkins作業和源存儲庫之間的一對一映射。除此之外,我有一個單個存儲庫,其中包含用於創建/更新構建其他回購的Jenkins作業的Job DSL腳本。這種情況看起來是這樣的:Jenkins種子作業只執行自上次運行後修改的DSL腳本?

enter image description here

我希望找到一種方法來存儲作業DSL腳本個人的源代碼倉庫內,對旁邊的代碼,並有將觸發一個單一的種子工作通過推送通知任何其他存儲庫。不幸的是,這似乎並沒有得到很好的支持(見this question的接受答案)。鑑於此,現在將所有DSL都保存在一個單獨的存儲庫中似乎很簡單,並且將通知推送到該存儲庫會觸發對常規腳本的重新處理。它一切正常,或多或少。

這就是說,我略微擔心種子作業 - 何時觸發 - 重新運行全部的DSL腳本,而不僅僅是那些實際已經改變的。 (我真的不確定這是否是一個'問題',本身,我只是擔心它可能會導致後來出乎意料的行爲。)

是否有某種方式可以重構種子作業,以便它只重新運行由觸發構建的提交修改的腳本?或...這不值得擔心嗎?

回答

2

作業DSL只會在生成的配置更改時更新作業。它將生成的XML與現有配置進行比較,以查看是否需要更新。見JenkinsJobManagement.java。因此,如果您不手動更換作業或運行在後臺修改作業配置的惡意插件,重新運行腳本時應該沒有問題。

作業DSL在運行多個腳本時會重用Groovy腳本引擎,因此性能影響應該很低。見DslScriptLoader.groovy。因此,如果你的腳本沒有副作用(例如,進行REST調用或修改文件系統),那麼重新運行腳本即使不必要也應該沒有問題。

+0

感謝您確認我不用擔心重新運行未經修改的DSL腳本 - 特別是提供源代碼鏈接來證明它。 – evadeflow