[英]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以执行以下任务:
从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
对最后获取的文件,即branch_list进行比较 。 如果存在差异,则触发构建。 您可以使用diff
或cmp
命令。
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.