持续集成Jenkins+Gitlab

新博客网站1

新博客网站2

一、相关概念

1.1 持续集成:

持续集成(Continuous Integration),简称CI,是指开发者在代码的开发过程中,可以频繁的将代码部署集成到主干,并进程自动化测试。

持续集成Jenkins+Gitlab_第1张图片
CI

1.2 持续交付:

持续交付(Continuous Delivery),指的是在持续集成的环境基础之上,将代码部署到预生产环境

持续集成Jenkins+Gitlab_第2张图片
CD

1.3 持续部署:

持续部署(Continuous Deployment),是指在持续交付的基础上,把部署到生产环境的过程自动化,持续部署和持续交付的区别就是最终部署到生产环境是自动化的。

持续集成Jenkins+Gitlab_第3张图片
Continuous Deployment

PS:目前大部分公司都是做到持续交付,做到持续部署的还很少,因为上生产环境,还要有很多步骤需要做。

1.4上线基本流程:

1.代码获取(直接了拉取最新代码,使用tag标签获取某个版本代码)
2.编译 (可选)
3.配置文件放进去
4.打包
5.scp到目标服务器
6.将目标服务器移除集群
7.解压并放置到Webroot
8.Scp 差异文件
9.重启 (可选)
10.测试
11.加入集群


二、Gitlab

2.1Gitlab简介

GitLab是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。
GitLab拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。它还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找

2.2Gitlab部署

#环境准备
[root@node1 ~]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core) 
[root@node1 ~]# uname -r
3.10.0-693.el7.x86_64

#更换阿里yum源
[root@node1 yum.repos.d]# wget http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm 
[root@node1 ~]# wget http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
[root@node1 ~]# yum update -y

#更换gitlabyum源为清华大学
[root@node1 ~]# vim /etc/yum.repos.d/gitlab-ce.repo
[gitlab-ce]
name=gitlab-ce
baseurl=http://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7
repo_gpgcheck=0
gpgcheck=0
enabled=1
gpgkey=https://packages.gitlab.com/gpg.key
[root@node1 ~]# yum makecache
[root@node1 ~ ]#  yum install -y gitlab-ce

#安装依赖
[root@node1 ~]# yum install curl policycoreutils openssh-server openssh-clients postfix -y

#启动postfix
[root@node1 ~]# systemctl start postfix

#安装gitlab-ce   版本为gitlab-ce.x86_64 0:10.6.4-ce.0.el7
[root@node1 ~]# yum install -y gitlab-ce

#配置并启动gitlab   比较久,需要耐心等待一下,在此之前需要保证80端口不被占用
[root@node1 ~]# gitlab-ctl reconfigure

#等待完成,看到如下结果,说明配置成功
Running handlers:
Running handlers complete
Chef Client finished, 387/552 resources updated in 01 minutes 55 seconds
gitlab Reconfigured!

#查看启动状态 全部为run说明正常启动
[root@node1 ~]# gitlab-ctl status
run: gitaly: (pid 15333) 182s; run: log: (pid 14995) 225s
run: gitlab-monitor: (pid 15350) 181s; run: log: (pid 15153) 213s
run: gitlab-workhorse: (pid 15318) 182s; run: log: (pid 14876) 239s
run: logrotate: (pid 14928) 231s; run: log: (pid 14927) 231s
run: nginx: (pid 14895) 237s; run: log: (pid 14894) 237s
run: node-exporter: (pid 15132) 219s; run: log: (pid 15131) 219s
run: postgres-exporter: (pid 15387) 180s; run: log: (pid 15240) 199s
run: postgresql: (pid 14634) 273s; run: log: (pid 14633) 273s
run: prometheus: (pid 15370) 181s; run: log: (pid 15191) 205s
run: redis: (pid 14574) 279s; run: log: (pid 14573) 279s
run: redis-exporter: (pid 15175) 207s; run: log: (pid 15174) 207s
run: sidekiq: (pid 14858) 245s; run: log: (pid 14857) 245s
run: unicorn: (pid 14820) 247s; run: log: (pid 14819) 247s

至此最基本的gitlab已经正常运行起来了!

2.3Gitlab使用

2.3.1 此时我们在浏览器中访问http://192.168.66.129

Web页面提示需要设置一个密码(最少8位数)我这里设置密码为:12345678


持续集成Jenkins+Gitlab_第4张图片
image.png

登录系统,默认用户名为root


持续集成Jenkins+Gitlab_第5张图片
image.png

关闭自动注册 因为为内部使用不需要用户自己注册,由管理员分配用户即可
点击Admin Area 进入管理区域
持续集成Jenkins+Gitlab_第6张图片
image.png

点击settings 把Sign-up enabled的钩去掉即可


持续集成Jenkins+Gitlab_第7张图片
image.png

保存即可
2.3.2 创建组,创建项目

进去管理区域,点击New group


持续集成Jenkins+Gitlab_第8张图片
image.png

输入相关信息,并选择Private


持续集成Jenkins+Gitlab_第9张图片
image.png

点击Create group即可,如下说明创建成果
持续集成Jenkins+Gitlab_第10张图片
image.png

类似上面的方法,创建一个项目,并选择web组


持续集成Jenkins+Gitlab_第11张图片
image.png

看到如下,说明项目创建成功
持续集成Jenkins+Gitlab_第12张图片
image.png

测试一下
新建一个Readme,并随意输入
持续集成Jenkins+Gitlab_第13张图片
image.png
2.3.3 在客户端测试,并配置ssh免秘
[root@node1 ~]# useradd www
[root@node1 ~]# passwd www
更改用户 www 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@node1 ~]# su www
[www@node1 root]$ ssh-keygen -t rsa -C "[email protected]"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/www/.ssh/id_rsa): 
Created directory '/home/www/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/www/.ssh/id_rsa.
Your public key has been saved in /home/www/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:J5Ja/RLAE4KPv70zz1YMmrz7r5ojLPfchGThH9hBdI8 [email protected]
The key's randomart image is:
+---[RSA 2048]----+
|   .. ..o .      |
|  .  o o . o     |
|   o  = . E .    |
|  . .. O..       |
|   . .OoSo.      |
|    .=++ *o      |
|   ..o..+..      |
|  . =.*=..       |
|   o oB@*o.      |
+----[SHA256]-----+
[www@node1 root]$ cd 
[www@node1 ~]$ cd .ssh/
[www@node1 .ssh]$ ll
总用量 8
-rw------- 1 www www 1679 4月  21 16:40 id_rsa
-rw-r--r-- 1 www www  400 4月  21 16:40 id_rsa.pub
[www@node1 .ssh]$ cat id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDGS5bnpPvBPLkh/j3OJ8j3Z0dkxgUgLMT2ebeL0U/c7cQ6xGRgKajfLLb2xp+U4XCgU6kKBncXvFWh4PY7/eBPpVbpstJmtf/13gAYB/skHen+jl58k1JP4m/9W/aB6KW3PBRuWF9BA3ki0fHt624R2qSHoaveHiP2YK/9hsYhAizzdN3Y6JMCfSxZ7/FluLb+tXuASLuVQqyilxxZGkAjY0/15zntXyNTovAfseeRrmyAktvMgjK9ZfdGZp/nzS3LXclw2/QhAyT4mLL9FzLLWE2adYuBxj/42UrVZrc7bfkTMUllYvSq4Qkg0VS/8n5FLxEjAIKwPDTkbeTFVKan [email protected]
[www@node1 .ssh]$ 

上面创建了一个www用户,并生产了秘钥文件,在浏览器中点击个人头像,点击settings进入设置,点击SSH keys


持续集成Jenkins+Gitlab_第14张图片
image.png

输入刚刚生成的公钥,点击Add key既可


持续集成Jenkins+Gitlab_第15张图片
image.png

获取项目路径,复制相关路径
持续集成Jenkins+Gitlab_第16张图片
image.png

在客户端测试

[www@node1 ~]$ git clone [email protected]:web/web-demo.git
正克隆到 'web-demo'...
ssh: Could not resolve hostname gitlab.example.com: Name or service not known
fatal: Could not read from remote repository.

#PS 因为我这里是虚拟机没有配置相关域名,也没有修改hosts,这里就临时把gitlab.example.com改成IP既可,后面可以修改配置文件
Please make sure you have the correct access rights
and the repository exists.
[www@node1 ~]$ git clone [email protected]:web/web-demo.git
正克隆到 'web-demo'...
The authenticity of host '192.168.66.129 (192.168.66.129)' can't be established.
ECDSA key fingerprint is SHA256:wJyF35WdLaQJxzWYaVgjv61ujKzHcTw1DpR789UPUQ8.
ECDSA key fingerprint is MD5:3c:96:f6:ad:15:ba:73:fd:67:ac:54:52:84:4d:0a:b3.
Are you sure you want to continue connecting (yes/no)? yes       
Warning: Permanently added '192.168.66.129' (ECDSA) to the list of known hosts.
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 6 (delta 0), reused 0 (delta 0)
接收对象中: 100% (6/6), done.
[www@node1 ~]$ ll
总用量 0
drwxrwxr-x 3 www www 35 4月  21 16:49 web-demo
[www@node1 ~]$ cd web-demo/
[www@node1 web-demo]$ ll
总用量 4
-rw-rw-r-- 1 www www 44 4月  21 16:49 README.md
[www@node1 web-demo]$ cat README.md 
测试专用 测试 。。。。。。。。[www@node1 web-demo]$ 

至此Gitlab基本使用已经完成

三、Jenkins

3.1 Jenkins简介

Jenkins只是一个平台,真正运作的都是插件。这就是jenkins流行的原因,因为jenkins什么插件都有
Hudson是Jenkins的前身,是基于Java开发的一种持续集成工具,用于监控程序重复的工作,Hudson后来被收购,成为商业版。后来创始人又写了一个jenkins,jenkins在功能上远远超过hudson
Jenkins官网:https://jenkins.io/

3.2 Jenkins部署

Jenkins 是由java语言编写,所以我们这里需要java环境,我事先已经安装好了1.8.0_161
PS:因为gitlab中的unicorn组件会监听8080端口,而Jenkins默认也是监听8080,这里我们采用node2来部署jenkins

#jenkins自己提供了yum源,这里采用yum方式,也可以采用源码编译的方式

[root@node2 ~]# cd /etc/yum.repos.d/
[root@node2 yum.repos.d]# wget http://pkg.jenkins.io/redhat/jenkins.repo
[root@node2 ~]# rpm --import http://pkg.jenkins.io/redhat/jenkins.io.key
[root@node2 ~]# yum install -y jenkins
[root@node2 ~]# systemctl start jenkins

在浏览器端访问http://192.168.66.130:8080,看到如下界面就说明启动成功


持续集成Jenkins+Gitlab_第17张图片
image.png

查看输入密码,登录进入,会看到如下页面


持续集成Jenkins+Gitlab_第18张图片
image.png

选择安装推荐插件即可,等待安装完成
持续集成Jenkins+Gitlab_第19张图片
image.png

填写要创建的管理用户这里使用Admin 密码为12345678,点击保存并完成即可。


持续集成Jenkins+Gitlab_第20张图片
image.png

点击开始使用Jenkins即可
持续集成Jenkins+Gitlab_第21张图片
image.png

至此基本的Jenkins已经正常的运行了

3.3 Jenkins插件安装

因为我们要和gitlab结合,所以这里需要安装gitlab的插件
在系统管理中,进入插件管理,搜索gitlab


持续集成Jenkins+Gitlab_第22张图片
image.png

按实际情况,选择需要的插件,点击下载待重启后安装既可


持续集成Jenkins+Gitlab_第23张图片
image.png

等待安装完成,并重启Jenkins

四、实现持续集成

点击创建一个新任务,输入任务名字,选择自由风格,点击确定既可


持续集成Jenkins+Gitlab_第24张图片
image.png

在源码管理添加源码路径,点击Add,添加认证,这里是git,如果是svn,需要安装svn相关插件


持续集成Jenkins+Gitlab_第25张图片
image.png

选择SSH认证方式
持续集成Jenkins+Gitlab_第26张图片
image.png

在Gitlab上创建deploy keys


持续集成Jenkins+Gitlab_第27张图片
image.png

点击新建,并在node2 新建www用户,并创建秘钥文件
[root@node2 yum.repos.d]# useradd www
[root@node2 yum.repos.d]# cd 
[root@node2 ~]# passwd www
更改用户 www 的密码 。
新的 密码:
无效的密码: 密码未通过字典检查 - 过于简单化/系统化
重新输入新的 密码:
抱歉,密码不匹配。
新的 密码:
无效的密码: 密码未通过字典检查 - 过于简单化/系统化
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@node2 ~]# su www
[www@node2 root]$ ssh-keygen -t rsa -C "[email protected]"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/www/.ssh/id_rsa): 
Created directory '/home/www/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/www/.ssh/id_rsa.
Your public key has been saved in /home/www/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:CSt+dEEFmyv40qJ5d1e/NbCHbn9fgEYLaf2FhKHuptk [email protected]
The key's randomart image is:
+---[RSA 2048]----+
|        oo. .o.  |
|       . o +.. . |
|      . + = o . .|
|     . o * o + . |
|    o + S . +.o  |
|   . = o . .. +. |
|    + +   o. + oo|
|   o.+. .=. ..o.+|
|  o. . .o.E ..oo+|
+----[SHA256]-----+
[www@node2 root]$ cd
[www@node2 ~]$ ll
总用量 0
[www@node2 ~]$ cd .ssh/
[www@node2 .ssh]$ ll
总用量 8
-rw------- 1 www www 1675 4月  21 23:42 id_rsa
-rw-r--r-- 1 www www  400 4月  21 23:42 id_rsa.pub
[www@node2 .ssh]$ cat id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDZZE5beieQdGcCQLkHjeh/4TJXwGnybLc7A0xVfTSQszjq7jx/m6jjE4pOHMQX/yUqb9Pg+NdvsJynpV1ZSNr/ojm18vR4S7sj+6nEV0kIP0IWOLeqSlHKvr9BFggkvcAjSTzsSc31P1Wn8rs6z9xag8WWK759vSz1BdG85fW5xgDdlu8ynwGulF6roOa2pAKhCCk2ibRvwYbpElVGcFA6taf7LOnR63842JsYbeC+a8XTcZmWFWVq8JYfeDcoHZ/61gC9lmiIlsVlEGifAJaM6KHQxkViQtEpWzgfRvKEnBmXigiCUvbJPBNSPCbzSPVYK+Yv1llBsGJQfp/74glD [email protected]
[www@node2 .ssh]$ 

持续集成Jenkins+Gitlab_第28张图片
image.png

点击Create既可,填写私钥文件,点击Add既可


持续集成Jenkins+Gitlab_第29张图片
image.png

点击保存既可,点击立即构建


持续集成Jenkins+Gitlab_第30张图片
image.png

点击查看查看控制台
持续集成Jenkins+Gitlab_第31张图片
image.png

至此持续集成初步已经完成了

你可能感兴趣的:(持续集成Jenkins+Gitlab)