Gitlab Jenkins WebHook 持续集成配置踩坑记
Jenkins相关介绍
Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能.
目的
配置Gitlab与Jenkins,达到当Gltlab中Push代码时,Jenkins能够自动从Gitlab代码库同步代码的最新版本,并且自动构建。
前提
安装Gitlab Plugin、Gitlab Hook Plugin等Gitlab相关Plugins。
方法步骤
1.Jenkins中,选择想要配置持续集成的项目,进入项目配置,勾选“触发远程构建”、“Build when a change is pushed to GitLab. GitLab CI Service URL”两个选项,并配置“身份验证令牌”
1
|
openssl rand -hex 12
|
两个选项分别提供了两种触发方式来持续集成。前者适用范围更广,后者仅适用于Gitlab。
本文将分别讲解两者的使用方法与坑。
触发远程构建(更通用,多坑)
2.1 打开对应Gitlab项目仓库配置,Settings-Integrations配置持续集成相关选项。
URL则填写Jenkins配置中“触发远程构建(例如,使用脚本)”选项中所提示的URL结构组合填写,Secret Token不填写
1
|
JENKINS_URL/job/hostconf/build?token=TOKEN_NAME
|
勾选相应的Trigger,然后Save 保存配置即可。
还可以Test一下,如果返回200、201,则为配置成功。
Build When a change is Pushed to gitlab(仅限Gitlab,少坑)
3.1在Jenkins中勾选Build when a change is pushed to GitLab. GitLab CI Service之后,将URL填写到Gitlab项目的settings-Integrations中的URL,保存后进行test,如果返回20x,则测试通过。
采坑记录
第一种方法
返回403 Crumb XXX
去掉“防止跨站点请求伪造”前的勾,就可以解决
返回403 Auth相关信息,提示用户Anonymous Users 没有Build等相关权限
这样的情况是Jenkins设置了权限限制,匿名用户权限不足,此时需要登录,在Gitlab的设置中URL填写为以下格式,带上用户名和密码即可
1
|
https://foo:password@jenkins.example.com/github-webhook/build?token=
|
带上明文密码太危险了?Jenkins为每个用户提供了Api Token。前往Jenkins-系统管理-管理用户,选取你的用户,会看到
点击“show Api Token” 即可看到用户的用户名和对应的apiToken
因此在Gitlab中的持续集成URL可以如此配置
1
|
https://username:apitoken@jenkins.example.com/github-webhook/build?token=
|
即可免去明文密码带来的危险性。
第二种方法(Gitlab专用)
填写好Gitlab专用链接之后依然403 提示Anonymous Users没有build权限等
在Jenkins-系统管理-系统设置中:
去掉Enable authentication for ‘/project’ end-point的勾子,即不对Gitlab专用Webhook链接的/project进行权限验证,即可进行正常持续集成。
总结
Jenkins提供了两种方法来实现Gitlab的持续集成,前者生成了通用url,任何程序、脚本都可以调用。但如果Jenkins需要认证,则必须在url 中提供认证信息。
第二种Gitlab专用链接,配置较为简单,注意一下相关设置即可正常使用。
相关链接
http://www.360doc.com/content/18/0503/16/10072361_750826096.shtml
https://stackoverflow.com/questions/7427557/jenkins-and-github-webhook-http-403