最近发现市面上讲配置jenkins来配合github 做ci检查的文章不是很清楚,所以周末抽了两天时间自己从头搭建了一套jenkins+ github 的PR检测流程
主要的目标是:当有人提交Pull request的时候,会触发jenkins来对这次提交的内容进行一个简单的检测,例如,语法格式检测,如果通过,则会允许PR继续merge, 如果pipeline 检测失败,pull request无法merge
文章以github为例(gitlab也搭建了一套,给我自己的云服务器给干死了,好资源太多)
在动手之前,先看一下两个大哥:
首先我们要搞清楚一件事:那就是jenkins 和github之间是要通信的,比如:
所以我们要配置相应的credentail
那么从头开始吧:
我创建的repo (创建的步骤我就不重复了):
https://github.com/BlueShells/testpipelinejenkins
GitHub个人头像->ettings > Developer settings > Personal access tokens, 点击Generate new token
选择对应的权限,基本意思就是如果有个人拿着这个token来,他能干哪些事情(jenkins后边会拿着这个token来更新pipleline的结果让github知道)
注意,生成以后记得复制出来存起来,要不一会就看不到了
Jenkins->Manage plugins -> Available
安装插件并重启jenkins
我们现在需要配置我们前边说的credentail, 让jenkins能够和github进行沟通:
Jenkins-> Manage Jenkins->Configure Credentials ->system->Global credentials->Add Credentials(jenkins这个配置简直坑爹,我找了好半天)
先添加第二部的token
然后我们再添加一个github的用户名密码用来pull code
注意,如果可以还是通过秘钥的方式来Pull code能方便一些,用户名密码也不是麻烦,如果使用ssh 秘钥,可以参考下图配置
Jenkins->Manage jenkins->Config system
配置参考下图:
配置完还可以添加Test Credentails 来测试,测试成功说明最起码jenkins能和github沟通了
然后需要配置的地方为:
然后
再然后:
注意,这个地方要注意下,Pipeline 这个地方我图省事,用的是一个repo,也就是说,我把我的Pipeline的配置文件放到了我新创建的repo里,名字叫Jenkinsfile
逻辑就是: 有人提交pr -> 触发当前Job->根据jenkinsfile里边写的逻辑完成检测->然后返回github
pipeline这个地方完全可以是另外的repo
这一步就是我们让我们的github在监控到有新的PR的时候,去主动触发jenkins job
在我们新建的repo中,Settings > Webhooks->Add web hook
然后勾选
创建完成可以在列表页面看到状态,webhook的状态是”:white_check_mark:”说明正常,否则,你需要根据提示修好它
第八步:测试
创建自己的pull request 就可以测试了
这里要说明一下,新的pr提交过来以后,我们的Pipeline到底做了什么?其实就是第六步中定义的groovy文件里定义了我们要做的东西 https://github.com/BlueShells/testpipelinejenkins/blob/master/Jenkinsfile ,我现在什么都没有做,只是单纯打印出里如下信息:
也就是说,我打印出来了所有 github 触发jenkins时传递过来的参数,拿到这些参数以后,我们就可以做一些事情了,例如:
通过传递过来的参数我知道了PR 的源branch, 我就可以通过命令把这个branch pull 到本地来(然后我们可以通过git命令拿到这次修改的文件git diff –name-only origin/master…HEAD)
然后我们就可以对修改的文件进行一些格式的检查…….