前言:
通过Jenkins与GitLab联动,当gitlab仓库中代码发生变动(增、删、改),自动触发Jenkins自动构建发布,实现自动化运维。
思路:
- 安装部署gitlab、安装部署Jenkins
- jenkins安装功能插件
- 安装git工具
- Jenkins job配置构建触发器
- gitlab仓库配置webhooks
一、安装部署Gitlab、Jenkins
1、GitLab的安装流程如下:(点击跳转)
GitLab安装部署教程
2、Jenkins的安装流程如下:(点击跳转)
Jenkins安装部署教程
二、Jenkins安装插件
必备的插件是Git、GitLab、GitLab Hook;当然还可以加上Credentials Binding,来储存我们的明文密码,提高安全性。
插件安装完毕后,添加相应功能
方式一、通过http方式链接
方式二、SSH密钥类型
SSH免密登录示意图:
1、使用root用户生成公钥和私钥
ssh-keygen -t rsa
在/root/.ssh/目录保存了公钥和使用
id_rsa:私钥文件
id_rsa.pub:公钥文件
2、把生成的公钥放在Gitlab中
以root账户登录——》点击头像——》Settings——》SSH Keys
复制刚才 id_rsa.pub文件的内容到这里,点击“Add Key”
3、把生成的私钥放在Jenkins中
打开全局凭证——》添加凭证
配置新项目,选择好合适的git地址 和对应的凭证
三、安装Git工具
为了让jenkins支持从gitlab拉取源码,需要在服务器上安装Git工具
1、Linux安装Git
yum install git -y 安装
git --version 安装后查看版本
2、进入jenkins设置
接着登录jenkins界面,依次打开"系统管理" -> "Global Tool Configuration" 全局工具配置-> "Git" -> "Path to Git executable",
在此处填入"whereis git"查询出的地址 + "/bin/git" (如上面"whereis git"的地址为"/usr/local/git",则应该填入 "/usr/local/git/bin/git") 并保存。
最后再在Jenkins新建项目中源码管理Repository URL添加git地址,尝试多刷几次就可以了。
3、安装指定版本的git或者最新版git
有时候我们安装的git不是最新版本。可能会导致添加git仓库失败,例如以下情形:
原因分析:这是由于git客户端版本过低造成的!或者未安装git
Jenkins本机默认使用"yum install -y git" 安装的git版本比较低,应该自行安装更高版本的git。
我们可以从GitHub上下载最新的源码编译后安装最新的git
这里可以参考这位作者的博客
git安装
这里的描述及其部署都很详细,所以我就不过多赘述了O(∩_∩)O哈哈~
四、Jenkins job配置构建触发器
1、进入jenkins选中需要配置的项目,进行设置
Enabled GitLab triggers 允许gitlab触发
push events 允许push 只要gitlab收到push操作 构建就执行 触发事件
Opened Merge Request Events 合并请求 合并操作也可以触发
只有两种方式可以触发 push上去触发构建, 执行merge请求 把代码合并进来了
2、点击上图中的高级,可以进行深度设置
允许哪个分支 , 当哪个分支收到push或者merge请求,默认为所有分支 收到触发制的时候 就是执行job
可以单独定义 只允许master分支 才构建
根据自己需求定义
token作用,访问webhooks URL 需要携带token过来,才能触发,有url也不行,有url和token才触发
3、将这里配置生成的webhook URL配置到Gitlab中,就完成了。
五、gitlab仓库配置webhooks
1、开启webhook功能
使用root账户登录到后台,点击Admin Area——》Settings——》Network
·
2、勾选“Allow requests to the local network from web hooks and services”
·
3、在项目添加webhook
点击项目——》Settings——》Integrations
此处的URL就是第四步中jenkins触发器生成的,复制进去即可
4、点击Test可以对我们配置的webhook进行测试验证
5、注意:以下设置必须完成,否则会报错!
Manager Jenkins ——》Configure System
6、如图所示即为配置成功
六、效果演示
我们在 jenkins job 主页面看到构建任务被触发。
在gitlab 模拟一个push请求过来, jenkins自动触发构建
触发成功!!!