CI(jenkins+gitlab)

Jenkins是什么?

Jenkins是一款java开发的功能强大的持续集成,持续发布工具,与之相对应的还有Drone这个工具,这里我们主要介绍Jenkins。

为什么使用Jenkins

  • 安装和配置灵活方便,支持多种方式安装(docker、软件包、war包、源码)
  • 配置 方便可视化操作
  • 丰富的插件
  • 可扩展,分布式架构(master-slave)

环境信息

操作系统:ubuntu 16.04
java:1.8.0_161-b12
jenkins: 2.89.4

部署gitlab

1
2
3
4
5
6
7
8
9
docker run --detach \
--hostname gitlab.example.com \
--publish 443:443 --publish 80:80 --publish 22:22 \
--name gitlab \
--restart always \
--volume /srv/gitlab/config:/etc/gitlab \
--volume /srv/gitlab/logs:/var/log/gitlab \
--volume /srv/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:latest

访问http://gitlab_ip

安装Jenkins

jenkins的安装方式有多种,有通过容器方式安装的,有通过rpm包和deb包方式安装还有通过war包安装的,这里使用deb包方式安装。

因为Jenkins是基于java开发的所以我们先配置java环境
先安装jdk8
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

安装

1
2
mkdir  /usr/local/jdk1.8/
tar -xvf jdk-8u16.tar.gz -C /usr/local/jdk1.8/

配置环境变量
编辑/etc/profile

1
2
3
export JAVA_HOME=/usr/local/jdk1.8/jdk1.8.0_161
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jart
1
source /etc/profile

测试

安装Jenkins

1
2
3
4
wget -q -O - https://pkg.jenkins.io/debian/jenkins-ci.org.key | sudo apt-key add -
sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
sudo apt-get update
sudo apt-get install jenkins

启动

1
systemctl start jenkins

访问
Jenkins默认是访问8080端口

从图上给的路径获取默认密码

安装方式标准安装和自定义安装,标准安装主要进行一些标准插件的安装,自定义安装就是自己可以选择插件进行安装。这里我们选择标准安装

等待安装完

安装完,设置用户名和密码

这边我们与gitlab做对接所以需要安装gitlab插件
系统管理—>管理插件—–>可选插件—->gitlab plugin

安装完成后配置gitlab plugin
系统管理—>系统配置

输入gitlab的地址

还有填写gitlab的 access token
先去gitlab申请


将token保存好


配置credentials

kind那选gitlab token,然后add

给gitlab配置公钥,用于pull和push代码,哪台机器需要从gitlab上拉取和上传代码就需要配置,这里Jenkins节点需要,当然也可以直接在Jenkins上配置用户名和密码去连接
在gitlab的SSH keys处贴上机器的公钥,注意区分机器

Jenkins上创建个job

点击确定

可以看见这里连接上了我们刚刚配置Jenkins gitlab-plugin的配置

源码管理

可以用ssh的连接也可以用http的连接,我这里用ssh的因为我改了默认gitlab的ssh端口所以链接需要改一下
如果gitlab 的ssh用的不是默认的22端口需要改成如下
ssh://git@ip:ssh_port/wanshaoyuan/wanshaoyuan.git
1、增加了ssh://

2、增加了端口号

3、把用户名前面的冒号改成了斜杠(/)
因为我们还没有配置credentials所以会报错点击旁边add配置credentials

用户名填写你生成公钥写的用户名private key填写你的私钥

然后就不会报错了,同时我这里选择的也是master分支
触发器这里有几种方式

分别解释下
Build after other projects are built 当另一个构建任务完成之后触发
Build periodically 周期性的触发
Build when a change is pushed to GitLab. GitLab CI Service URL: http://191.8.2.112:12000/project/test-go-dev 当代码有更新的时候触发,通过GitLab CI
GitHub hook trigger for GITScm polling 通过Github钩子触发
Poll SCM 定期检查代码有无更新,有更新时触发

这里我们使用Build when a change is pushed to GitLab. GitLab CI Service URL的方式,因为使用定时检查的话对Jenkins压力会很大的,使用webhook的方式,当gitlab有push代码或其他方式时会通知Jenkins,所以这里还需要配置gitlab的webhook

复制Build when a change is pushed to GitLab. GitLab CI Service URL: 后面那串地址链接

打开gitlab


输入刚刚那串url


默认触发器是push事件时,触发webhook,需要注意的是因为我们这里的Jenkins配置了用户名和密码所以
url需要在原来基础上添加用户名和密码其他不变
格式为
http://username:password@192.168.1.4:1080/project/dashboard-build

点击test按钮进行测试,返回状态码为200表示配置正确。

如果同网段Jenkins webhook 返回500,需要用root帐号登录进gitlab
setting–>勾上Allow requests to the local network from hooks and services

构建

这里我们选执行shell

做个简单的操作比如说我git push一个test.txt的文件上去,然后用构建命令就去读取这个文件

应用并保存

然后我们push到test.txt到wanshaoyuan这个project
写这样一段话

1
2
3
git add .
git commit -m "test jenkins"
git push

可以看见Jenkins很快触发了构建

查看输出