2014-09-26 104 views
6

我在Jenkins中爲GitHub上的項目工作,希望在創建新分支或刪除現有分支時觸發它。這可能嗎?在創建或刪除git分支時在Jenkins中觸發構建

注意:Jenkins服務器位於公司內部,因此我們無法使用來自GitHub的Web鉤子。

+0

如何從詹金斯連接(協議)到GitHub上? – Technext 2014-09-26 13:46:49

+0

應該不會太難爲它編寫腳本。基於ls命令http://stackoverflow.com/questions/10911923/get-list-of-git-branches-for-a-repo-hosted-on-github – 2014-09-26 16:13:00

+0

@Technext通過SSH,因爲它是一個私人存儲庫。 – Tobias 2014-09-26 20:32:30

回答

3

我可以想到一種方法,你可以使用。

使用作業DSL插件允許您使用Groovy創建或刪除項目。包含github掃描並創建工作並不難。關於它的好處是,它也識別已刪除的作業。

I.e.安裝工作DSL插件,創建一個種子作業(自由風格)有規律的觸發,並粘貼一個類似於以下到腳本..

def project = 'nbn/griffon-maven-plugin' 
def branchApi = new URL("https://api.github.com/repos/${project}/branches") 
def branches = new groovy.json.JsonSlurper().parse(branchApi.newReader()) 


branches.each { 
    def branchName = it.name 
    job { 
     name "${project}-${branchName}".replaceAll('/','-') 
     scm { 
      git("git://github.com/${project}.git", branchName) 
     } 
     steps { 
      maven("test -Dproject.name=${project}/${branchName} ") 
     } 
    } 
} 
+0

呵呵,實際上這是我創建或者銷燬分支時我想運行的DSL工作。現在它只是間隔運行,而且也可以正常工作。只是想知道是否可以讓它在有理由的時候才運行。 – Tobias 2014-09-26 20:29:57

+0

你仍然需要以任何一種方式輪詢。作業DSL不應該有太多的解析整個配置的開銷,並且應該正確地進行髒檢查,所以雖然Technext的解釋很好,但它可能只是需要以某種方式維護的開銷。如果您對Job DSL有任何建議,請隨時放下評論或兩條評論。 – 2014-10-01 01:48:59

2

你可以試試這個方法,如果它看起來對你很好。 :)

附表build機器上的一個cron來執行以下任務:

  1. 從Git倉庫取分支的列表,並將其存儲在一個文件,說branch_list

    我們使用Gitolite並使用git ls-remote命令訪問分支名稱。

    git ls-remote [email protected]:repository_name

    例如,

    [[email protected] ~]$ git ls-remote [email protected]:repository_name 
    08a119f0aec5d4286708d2e16275fcd7d80d2c25  HEAD 
    a91ef29f1be5bfe373598f6bb20d772dcc65b8ca  refs/heads/dev-mob 
    d138356cf752a46fd8c626229809c9eaae63a719  refs/heads/dev-ssorel 
    e7d7e2c617c4a42b299b29c0119283813800f1bb  refs/heads/dev-omni 
    3193b36d678f1af2dcc3a291c6313f28ede97149  refs/heads/dev-pay 
    72fd9d8586708011c763cd7bc4f7bd2a3513a12f  refs/heads/dev-sell 
    39455fc2672039a7f325e9cafe3777ed563368ef  refs/heads/dev-apis 
    a22eb000ffa1ac0fbbf51b6bc8aea31b040567a3  refs/heads/dev-front 
    78a63105ec754d7ba758af97d542e749ceb9c533  refs/heads/dev-tpsp 
    82d99796690b6c562872ea68655c74ebc3f0abfb  refs/heads/mainline 
    fd82522f9999cedb11e245b515d480187c2e9cc6  refs/heads/master 
    

    要過濾掉分支的名稱,你可以使用:

    [[email protected] ~]$ git ls-remote [email protected]:repository_name | grep -v HEAD | cut -d/ -f3 | sort > branch_list_latest 
    
  2. 做一個DIFF與最後牽強文件即branch_list。如果有差異,則觸發構建。您可以使用diffcmp命令。

    git ls-remote [email protected]:repository_name | grep -v HEAD | cut -d/ -f3 | sort > branch_list_latest 
    
    if ! cmp -s branch_list branch_list_latest; then 
        mv branch_list_latest branch_list 
        echo "Files differ which means branch created or removed. Triggering build..." 
        # Trigger build command 
    fi 
    

cron將會保持一定的時間間隔後取分支列表。您可以根據需要定義間隔。

0

我現在在哪裏我們有兩個長壽的分支,其餘的幾乎都是短命的特色分支。

我們已經有長期分支機構的工作。

對於功能分支我已經看過

https://pythonhosted.org/jenkins-autojobs/

http://entagen.github.io/jenkins-build-per-branch/

,發現它們都是稍微有點爲我所用複雜。

相反,我使用分支說明符「* _build」爲約定設置了一個作業,如果推送以「_build」結尾的分支,它將由Jenkins構建。下一步是要記住,當你回顧,拉要求更好地被命名爲「某某..._打造」 :)

最佳, 安德斯

相關問題