2015-09-27 38 views
0

這裏是我想實現的:詹金斯 - 上游項目依賴問題

我有一個jenkins項目,其中有4個上游項目。但是我不想在上游工作完成時觸發這個項目,但我希望通過遠程API觸發項目,然後等待上游項目完成構建,如果這些項目正在構建。

可以說所有的4個上游項目可以建立從通過API傳遞的任何分支的源代碼,但我想只有當一個特定的分支傳遞給這些上游項目的下游項目啓動。

場景:

可以說我有兩個集羣A和B,對這個問題的緣故,我想我的部署代碼羣集A,即前端和後端代碼。現在我有一個項目來構建前端和一個項目來構建後端(這兩個項目可以基於傳遞的分支爲集羣A和B構建代碼)。現在,我有兩個用於集羣A的部署項目,它將部署前端和後端。所以,當我通過一個分支爲集羣A構建代碼時,它將觸發構建項目。但是現在我只希望這兩個部署項目在特定分支通過時啓動。

回答

0

如果你想控制建立遠程然後使用傑金斯CLI - 我發現它非常有用http://jenkinshost:8080/cli

你需要得到SSH密鑰配置權,添加用戶的運行CLI公鑰用戶要使用詹金斯用戶配置(不是在命令行上

測試鍵設置與

java -jar jenkins=cli.jar -s http://jenkinshost:8080 who-am-i 

那麼這應當報告哪些用戶將被用來在運行構建運行在詹金斯的工作詹金斯


但我認爲你可以使用條件生成步驟插件您的問題

https://wiki.jenkins-ci.org/display/JENKINS/Conditional+BuildStep+Plugin

這將允許你把條件包裹一個生成步驟即

if branch==branchA then 
    trigger step - deploy to clusterA 

if branch==branchB then 
    trigger step - deploy to clusterB 

我個人認爲這個插件有點笨重,它使第j OB配置頁面有些凌亂

另一種解決方案,我想出了是隨時撥打孩子作業,然後讓它決定是否運行。

所以我必須在孩子作業開始的腳本一步,看它是否應該運行

if [${branch}="Not the right branch name" ] ; then 
    echo "EXIT_GREEN" 
    exit 1 
fi 

現在,您已經失敗了這份工作,這將導致父作業去紅色,但使用的Groovy Postbuild插件https://wiki.jenkins-ci.org/display/JENKINS/Groovy+Postbuild+Plugin您可以添加後生成步驟是這樣

if (manager.logContains(".*EXIT_GREEN.*")) { 
    manager.addBadge("info.gif","This job had nothing to do") 
    [email protected] = hudson.model.Result.SUCCESS 
} 

兒童作業運行的綠色(與反對建立一個信息圖標),但實際上沒有做任何事情。顯然,如果分支是您想要部署的分支,那麼第一個腳本步驟不會運行exit 1並且作業繼續正常運行