簡體   English   中英

創建或刪除git分支時觸發Jenkins中的構建

[英]Trigger build in Jenkins when git branches are created or deleted

我在詹金斯(Jenkins)上有一個在GitHub上的項目的工作,我想在創建新分支或刪除現有分支時觸發。 這可能嗎?

注意:Jenkins服務器位於公司內部,因此我們不能使用來自GitHub的Web掛鈎。

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

使用Job DSL插件,您可以使用Groovy創建或刪除項目。 包含github掃描並從中創建作業並不難。 這樣做的好處是,它也可以識別已刪除的作業。

即安裝Job 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} ")
        }
    }
}

如果您覺得不錯,可以嘗試這種方法。 :)

在構建機器上安排cron以執行以下任務:

  1. 從Git存儲庫中獲取分支列表並將其存儲在文件中,例如branch_list

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

    git ls-remote gitolite@git.server.com:repository_name

    例如,

     [tom@master ~]$ git ls-remote gitolite@git.server.com: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 

    過濾出分支名稱,可以使用:

     [tom@master ~]$ git ls-remote gitolite@git.server.com:repository_name | grep -v HEAD | cut -d/ -f3 | sort > branch_list_latest 
  2. 最后獲取的文件,即branch_list進行比較 如果存在差異,則觸發構建。 您可以使用diffcmp命令。

     git ls-remote gitolite@git.server.com: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將在特定時間間隔后繼續獲取分支列表。 您可以根據需要定義間隔。

我現在所在的位置有兩個長期存在的分支,其余幾乎都是短暫的要素分支。

我們已經為長期存在的分支機構工作。

對於我看過的功能分支

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

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

並發現它們對於我們的使用來說都有些復雜。

取而代之的是,我為分支規范“ * _build”設置了一項作業,即如果您推送以“ _build”結尾的分支,它將由Jenkins構建。 下一步要記住,當您查看時,拉取請求最好命名為“ xyz ..._ build” :)

最好的,安德斯

暫無
暫無

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

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