美文网首页iOS 持续化集成持续集成持续集成
Jenkins+git+webhook自动触发部署和测试任务

Jenkins+git+webhook自动触发部署和测试任务

作者: 萩茝 | 来源:发表于2016-03-04 18:27 被阅读28114次

需求:

目前上线前会将需要上线的代码push到release分支,然后由人工填写参数点击触发jenkins上的任务。希望这个过程能完成自动化,只要有人往release上推代码,就自动跑部署release分支并测试

解决办法及步骤:

1.在jenkins里需要自动触发的job里的“源码管理”部分添加设置,如下图。填好git仓库url和需要检测的分支名称

注意事项:

a.在填url的时候可能会提示找不到命令的错误,遇到这个错的解决办法是去jenkins系统管理->系统设置,找到git设置部分,在Path to Git executable里填上git的路径,这个路径在服务器上执行命令which git可得到。

b.还有可能遇到的是报Permission denied这样的错误。这是由于jenkins运行时所用的系统用户没有访问git仓库权限导致的。需要在运行jenkins的用户目录下生成git的公钥和私钥,并将owner改成该用户。

2.在jenkins需要触发的job里“构建触发器”部分勾选Poll SCM,但里面什么都不填。

如果填则是填crontab那种格式的命令。填了的话就是让它每隔一段时间去检查下源码管理里所设置的git仓库里的分支有没有更新,有更新则触发该job,没更新则不触发。这样设置的缺点是检查得如果太过频繁,是对网络资源的浪费,但是检查时间隔得太长触发又不及时。

而且使用过程中有个问题,就是比如5分钟检查一次,第一次检查的时候检测到有更新,于是执行job,这个job执行的时间比较长超过了检查时间5分钟,那下一次检查的时候,由于这个job还正在运行中,则它还会认为这更新没有被job执行,如此便会再次触发job。只有在触发的job执行完时,它才知道这个更新是被这个构建执行过的,不用再触发了。

所以官方上也并不推荐这种方法,推荐的是远程触发的方式,比如用git的post-receive钩子触发,只要在钩子里写上这句即可。

curl http://yourserver/git/notifyCommit?url=[&branches=branch1[,branch2]*][&sha1=]

由于我们的项目用的是gitLab,然后gitLab有个webhook可以用。原理上跟post-receive钩子是差不多的。

3.在Jenkins里装一个插件https://wiki.jenkins-ci.org/display/JENKINS/Gitlab+Hook+Plugin

看名字就知道这个插件是为了配合gitLab用的

4.在gitLab项目中添加web hook(Project Settings --> WebHooks)

gitlab的web hook有很多种,可以满足不同的需求,因为我们的需求是push代码的时候触发,所以选的是Push events.

Url的作用:这个地方填的url是gitlab发请求用的。其实它的原理就是当开发人员在git上的操作触发这个hook时,gitlab就向这个url发一个post请求。请求中带着一堆参数比如提交者是谁,提交的分支是哪个,commit号是多少等等。接受这个请求的那端可以利用这些信息去处理后续的一些事情,比如部署测试通知等等。

此处,由于我们在jenkins上安装了gitlab hook插件,所以我们只需要按照它的使用方法在url里填上以下链接即可:

http://your-jenkins-server/gitlab/notify_commit

效果:

有人release上提交代码后,就会自动触发jenkins上的任务。push到别的分支是不会触发的。

参考文献:

https://github.com/elvanja/jenkins-gitlab-hook-plugin#notify-commit-hook

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

相关文章

网友评论

  • 8a43e46bfaef:http://your-jenkins-server/gitlab/notify_commit 这个地址是jenkins项目地址吗?
    我填写了但是没有用,请问具体是那个链接地址?
    萩茝:@初凉_0709 就域名部分是需要填你自己的jenkins的域名啊
  • 42112e92c012:《Jenkins+git+webhook自动触发部署和测试任务- 简书》写的不错不错,收藏了。

    推荐下,分布式作业中间件 Elastic-Job 源码解析 16 篇:http://tinyurl.com/y93r9wfg


    8afe04d66ee7:写的不错,谢谢博主;已 收 藏~
  • 41889613e024:终于找到有用的文档了!jenkins可以自动部署了,非常感谢!
    萩茝::smile: 不客气
  • 0dbda6ea05a5:你好,我是的是hooks 不是web hooks,我现在发现无法区分主干和分支的更新,不知道怎么弄,楼主可否帮助一下呢
    dc35e12e99aa:@萩茝 之前在gitlab上添加了钉钉机器人的webhooks,但并不是每次push都会触发hooks,这是为什么,直接表现是钉钉机器人有时能push到钉钉群,大部分时间就跟死了一样没任何反应,事实上gitlab是一直有push事件的
    dc35e12e99aa:@萩茝 还需要
    萩茝:@Howtoplay 不好意思啊 不怎么登录。现在还需要帮助么~
  • 孤独感爆棚:你好,我有一个疑问就是不用设置网络代理吗?
    萩茝:@孤独感爆棚 不好意思 好久没登录了 不用设置

本文标题:Jenkins+git+webhook自动触发部署和测试任务

本文链接:https://www.haomeiwen.com/subject/hllmkttx.html