个人博客,记录知识防止遗忘
gitlab + jenkins 自动构建
gitlab + jenkins 自动构建

gitlab + jenkins 自动构建

gitlab 和 jenkins 分别安装好之后,就可以进行配置,让二者配合工作了

内容大纲

1 准备

1.1 创建账号

因为涉及到gitlab和jenkins的对接,所以我这里分别新建了对应的账户,如下所示:

账号所在平台 账号 说明
gitlab平台 jenkins gitlab平台上新建的用户,给jenkins用,使得jenkins可以登录gitlab拉取代码;需要绑定dev组,并授予足够的权限
jenkins平台 gitlab jenkins平台上新建的用户,给gitlab用,使得gitlab有代码更新时可以及时通知jenkins

1.2 gitlab 账号权限及项目创建

需要确保上述创建的 jenkins 账户对本项目有相应的权限,具体权限得结合jenkins的触发器来综合选择,我这里为了实验方便,直接给了jenkins账户管理者权限。
image.png

1.3 构建命令脚本准备

由于我待会要设定jenkins的触发器规则是:当开发向gitlab提交代码后,gitlab自动触发jenkins拉取最新代码并构建。那就需要预先编写一个脚本,在构建的时候执行。
一般的构建脚本会包含打包或生成容器等操作。构建脚本要放在安装jenkins的服务器上,由于我这里是容器安装,所以理所应当要把脚本放在jenkins容器中,这很麻烦。但其实可以在构建时用ssh登录其他服务器,执行对应的构建脚本。
我这里偷个懒,用简单的shell命令代替shell脚本,例如 uname -rip addr ,jenkins拉取代码后,会执行这俩命令。

2 jenkins 配置

2.1 jenkins插件安装

gitlab 相关插件
搜索gitlab,结果有很多插件,这里只需要安装常用的2个就行
image.png

publish over ssh
此插件可用于构建前或构建后通过ssh 推送指定文件到某服务器,简单实用。本文中不做演示。
image.png

2.2 新建jenkins任务

这里为了测试简单,新建一个自由风格即可
image.png
填写gitlab项目地址,以及有足够权限的gitlab账户(例如我这里在gitlab上新建了一个jenkins账户)
image.png

触发器可以根据实际来选择,这里为了测试方便,选择了只要有push就重新构建
另外需要记下图中的url,后续配置gitlab需要用到,我这里是 http://10.8.8.6:50081/project/test
image.png

3 gitlab配置

3.1 gitlab 修改网络限制

因为gitlab 10.6 版本以后为了安全,不允许向本地网络发送webhook请求,而我的jenkins和gitlab都安装在同一服务器上,虽然都是用docker部署,彼此隔离,但请求的url都是10.8.8.6开头的。所以如果我们想向本地网络发送webhook请求,就需要先修改gitlab上的一个选项:
如下图红框所示,将其勾选即可。
image.png

3.2 gitlab配置jenkins相关信息

如下图所示,在设置中找到集成选项,找到jenkins,打开进行设置
image.png
填写之前jenkins创建触发器时的url,以及jenkins平台上有相应权限的账户(例如我创建的是 gitlab)
image.png

配好之后可以直接点击"Test settings"按钮来简单测试,如下图,2次测试都没问题
image.png
image.png

4 完整测试

首先用git push 代码到gitlab
image.png
登录gitlab上查看,发现已推送了钩子消息给jenkins
image.png
jenkins上查看,发现代码已自动拉取,并执行了测试的shell命令
image.png

至此,基本的自动构建已经实现,若搭配shell脚本,即可实现自动构建;
再搭配 publish over ssh 插件 以及shell脚本,即可实现构建完后自动推送至其他服务器,自动部署
(推送shell脚本到目标服务器,推送构建的结果文件到目标服务器,再执行目标服务器上的shell)

5 题外话:

5.1 harbor+k8s

以上只是简单实现了自动构建,搭配脚本也能实现一些不太复杂的工作,但是实际维护起来也不是很整洁。
所以其实可以搭建个k8s,再搭个harbor来配合jenkins:

大体流程可以参考下图(这是张很著名的网图,出处已经不可靠了)

只要开发提交代码,就会触发gitlab的推送,然后jenkins拉取代码,用shell脚本构建docker 镜像并上传到harbor ,随后k8s 开始拉取镜像部署,测试化境k8s没问题之后,另一套生产的k8s再次拉取镜像部署。
651008-20180822210239316-405061637.png

5.2 关于k8s

后续有时间我会再搭建一套环境做个实验,到时正好重温下k8s,好久没用过都忘了。

说起k8s,之前还是看大佬的博客,用二进制方式安装的k8s,当时大佬说 “二进制安装才能理解的更透彻”。
我便埋头苦干,当时只觉得好繁琐,安装各种组件,添加各种证书,何止繁琐,简直烦躁!
最后好在坚持下来了,收获还是不小。

由于大佬的博客非常详细,当时我没有自己做笔记。
今天想起来去看了眼,发现原博客的二进制安装方式已经标记废除了。。。
image.png
好在大佬又更新了基于kubeadm 的部署方法,正好也重头开始,二战k8s

最后贴一下大佬的k8s文档链接,防止迷路
https://www.yuque.com/duduniao/k8s/tr3hch

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注