本文章达到了一万六千字,有点多,但是比较全
一、Jenkinx+Gitlab持续集成环境概述
(1)什么是CI/CD
- CI为持续集成,CD为持续交付和持续部署,一般CD就是持续交付
- CI/CD概述:
持续集成(CI): 持续集成(Continuous integration)是指开发者在代码的开发过程中,可以频繁的将代码部署到master主干上,并且进行自动化测试
持续交付(CD): 持续交付(Continuous Delivery)是指在持续集成的基础上,将代码部署到预生产环境,即测试环境
持续部署(CD): 在持续交付的基础上,把代码部署到生产环境的过程自动化
- 一层套一层,使用CI/CD的目的就是使整个开发、运维的环境变成一个闭环,提高效率
(2)Jenkins概述
- Jenkins是一个开源软件项目,是基于JAVA开发的一款持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变为可能
- 官方网站: https://jenkins.io/
(3)Gitlab概述
- Gitlab是一个利用Ruby on Redis开发的开源应用程序,实现了一个自托管的Git项目仓库,用户可以通过web界面进行访问公开或者私人项目
- Gitlab拥有和Github类似的功能,都能浏览源代码、管理缺陷和注释,可以管理团队对仓库的访问,Gitlab会提供一个文件历史库去存放提交过的项目版本,并且还提供一个代码片段收集功能,可以轻松实现代码复用,方便以后有需要的时候进行查找
- Ruby on Redis: 是一个可以使开发、部署、维护web应用程序变得简单的框架
(4)Gitlab和Github的区别
- 相同点
二者都是基于web的Git仓库,很大程度上Gitlab是仿照Github做出来的,并且二者都提供了分享开源项目的平台,为开发团队提供了存储、分享、发布和合作开发项目的中心化的、云存储的场所
- 不同点
GitHub如果要使用私有仓库,超过四个是需要付费的,而Gitlab可以在上面创建私人的免费仓库,因为公司可以自己部署Gitlab
Gitlab让开发团队对他们的代码仓库拥有更多的控制,相对于Github,有着不少特色,例如:可以免费设置仓库权限、运行用户选择分享一个项目的源代码、运行用户设置项目的获取权限,进一步的提升了安全性,还可以设置获取到团队整体的改进进度,通过innersourcing让不在权限范围内的人访问不到该资源。开发者还可以把某个代码打上”仍在进行中“的标签来提醒其他成员这个代码没有完成,从而阻止未完成的代码合并到其他的代码中
总的来说,从代码的私有性来看,有时候公司并不希望员工获取到全部的代码,而Gitlab无疑是更好的选择,但是对于开源代码来说,GIthub依然是代码托管的首选
******注释****** git是一个分布式的版本控制器,是一种命令、一种工具,Gitlab和Github都是基于git实现的在线代码托管仓库,不同的是Github是面向互联网开放的,而Gitlab通常都是公司内部网络使用,两者都有网站页面 gitlab-ce是社区服,是免费的,gitlab-ee是企业版,是收费的
(5)Jenkins配合Gitlab持续集成系统的工作流程
开发者将新版本推送到Gitlab中
Gitlab会触发Jenkins的master主节点(Jenkinx是可以分主从节点的)进行一次建造
Jenkins主节点将这个建造任务分配给若干个注册的从节点中的一个,这个从节点会根据事先设置好的脚本进行建造,这个脚本可以做的事情有很多,例如编译、测试、生产测试报告等功能,这些原本需要手动完成的任务都可以交给Jenkins来完成
如果在建造过程中需要编译,一般会使用分布式编译器distcc来加快编译速度
二、部署持续集成环境
(1)实验环境
系统 | 主机名 | ip | 扮演角色 | 安装软件 |
Centos7.4 | gitlab | 192.168.100.202 | Gtilab | gitlab-ce-12.0.2-ce.0.el7.x86_64.rpm |
Centos7.4 | jenkins | 192.168.100.203 | Jenkins | jenkins-2.222.4-1.1.noarch.rpm |
Centos7.4 | apache | 192.168.100.204 | web | apache |
注意:Gitlab的内存给大一点,最好是4G,Jenkins给2G,不然后面会报错
(2)实验步骤
-搭建Gitlab(100.202)
******(1)先做基础配置 [root@Centos7 ~]# hostnamectl set-hostname gitlab [root@Centos7 ~]# su [root@gitlab ~]# systemctl stop firewalld [root@gitlab ~]# setenforce 0 setenforce: SELinux is disabled [root@gitlab ~]# mount /dev/cdrom /mnt/ mount: /dev/sr0 写保护,将以只读方式挂载 mount: /dev/sr0 已经挂载或 /mnt 忙 /dev/sr0 已经挂载到 /mnt 上 ******(2)安装gitlab依赖包 [root@gitlab ~]# yum install -y curl policycoreutils openssh-server openssh-clients postfix policycoreutils-python 。。。。。。 完毕! ******(3)开启邮件服务,默认使用postfix发送邮件 [root@gitlab ~]# systemctl enable postfix [root@gitlab ~]# systemctl start postfix ******(4)关闭防火墙,或者允许http通过,做基础配置的时候已经关了 [root@gitlab ~]# firewall-cmd --permanent --add-service=http #允许http通过 [root@gitlab ~]# systemctl reload firewalld #重载 ******(5)安装gitlab #安装gitlab需要rpm包,有两种方法下载rpm包 使用迅雷下载:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-12.0.2-ce.0.el7.x86_64.rpm 使用YUM源下载:(YUM下载非常慢) [root@gitlab ~]# vim /etc/yum.repos.d/gitlab.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@gitlab ~]# yum install -y gitlab-ce #安装社区版的gitlab 。。。。。。 完毕! #这里直接上传软件包进行安装gitlab [root@gitlab ~]# ll 总用量 625204 -rw-------. 1 root root 1264 1月 12 18:27 anaconda-ks.cfg -rw-r--r-- 1 root root 640204790 6月 30 17:16 gitlab-ce-12.0.2-ce.0.el7.x86_64.rpm [root@gitlab ~]# yum -y install gitlab-ce-12.0.2-ce.0.el7.x86_64.rpm 。。。。。。 完毕! *. *. *** *** ***** ***** .****** ******* ******** ******** ,,,,,,,,,***********,,,,,,,,, ,,,,,,,,,,,*********,,,,,,,,,,, .,,,,,,,,,,,*******,,,,,,,,,,,, ,,,,,,,,,*****,,,,,,,,,. ,,,,,,,****,,,,,, .,,,***,,,, ,*,. _______ __ __ __ / ____(_) /_/ / ____ _/ /_ / / __/ / __/ / / __ `/ __ \ / /_/ / / /_/ /___/ /_/ / /_/ / \____/_/\__/_____/\__,_/_.___/
******(6)配置gitlab访问地址 [root@gitlab ~]# vim /etc/gitlab/gitlab.rb 。。。。。。 13 external_url 'http://192.168.100.202' #修改url为自己的ip地址 。。。。。。 #保存退出 ******(7)重置gitlab,每次修改完配置文件都需要重置,重置大约需要三分钟左右 [root@gitlab ~]# gitlab-ctl reconfigure 。。。。。。 Running handlers: Running handlers complete Chef Client finished, 509/1343 resources updated in 02 minutes 27 seconds gitlab Reconfigured! #出现这个表示重置成功 ******(8)查看端口,gitlab默认使用nginx作为web界面,要注意的是,如果在访问web界面时总是报502的话,需要清空防火墙规则或者关闭防火墙,并且内存要大于4G不然有时也会报502,每次重置完之后不要马上进行访问,稍微等一两分钟再访问 [root@gitlab ~]# netstat -anpt | grep 80 tcp 0 0 127.0.0.1:8080 0.0.0.0:* LISTEN 2038/unicorn master tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 2103/nginx: master tcp 0 0 127.0.0.1:8082 0.0.0.0:* LISTEN 2056/sidekiq 5.2.7 tcp 0 0 0.0.0.0:8060 0.0.0.0:* LISTEN 2103/nginx: master tcp 0 0 127.0.0.1:8080 127.0.0.1:47272 TIME_WAIT - tcp 0 0 127.0.0.1:8080 127.0.0.1:47264 TIME_WAIT - tcp 0 0 127.0.0.1:8080 127.0.0.1:47274 TIME_WAIT - tcp 0 0 127.0.0.1:44214 127.0.0.1:8060 ESTABLISHED 2526/prometheus tcp 0 0 127.0.0.1:8060 127.0.0.1:44214 ESTABLISHED 2104/nginx: worker tcp 0 0 127.0.0.1:52642 127.0.0.1:8082 ESTABLISHED 2526/prometheus tcp 0 0 127.0.0.1:8080 127.0.0.1:47266 TIME_WAIT - tcp 0 0 127.0.0.1:8082 127.0.0.1:52642 ESTABLISHED 2056/sidekiq 5.2.7
(9)登录gitlab
第一次登录gitlab需要为root用户修改密码,root用户是gitlab的超级管理员,这里输入新的密码:nihao123!
成功登录gitlab
******(10)汉化gitlab # gitlab中文社区版的项目,v7-v8.8 是由 Larry Li发起的“GitLab 中文社区版项目”(https://gitlab.com/larryli/gitlab),从 v8.9之后,@xhang 开始继续该汉化项目(https://gitlab.com/xhang/gitlab)。 # 软件下载地址,这里使用是V12版本的gitlab所以需要下载v12的汉化包 # 下载地址:https://gitlab.com/xhang/gitlab/-/archive/12-0-stable/gitlab-12-0-stable-zh.tar.gz [root@gitlab ~]# ll #上传软件包 总用量 699968 -rw-------. 1 root root 1264 1月 12 18:27 anaconda-ks.cfg -rw-r--r-- 1 root root 76557595 6月 30 17:35 gitlab-12-0-stable-zh.tar.gz -rw-r--r-- 1 root root 640204790 6月 30 17:16 gitlab-ce-12.0.2-ce.0.el7.x86_64.rpm [root@gitlab ~]# tar xf gitlab-12-0-stable-zh.tar.gz [root@gitlab ~]# cat gitlab-12-0-stable-zh/VERSION #确认版本 12.0.3 ******(11)开始汉化 [root@gitlab ~]# gitlab-ctl stop #先停止gitlab ok: down: alertmanager: 0s, normally up ok: down: gitaly: 1s, normally up ok: down: gitlab-monitor: 0s, normally up ok: down: gitlab-workhorse: 0s, normally up ok: down: grafana: 0s, normally up ok: down: logrotate: 0s, normally up ok: down: nginx: 1s, normally up ok: down: node-exporter: 0s, normally up ok: down: postgres-exporter: 1s, normally up ok: down: postgresql: 0s, normally up ok: down: prometheus: 0s, normally up ok: down: redis: 1s, normally up ok: down: redis-exporter: 0s, normally up ok: down: sidekiq: 0s, normally up ok: down: unicorn: 0s, normally up [root@gitlab ~]# unalias cp #删除cp的别名 [root@gitlab ~]# cp -rf gitlab-12-0-stable-zh/* /opt/gitlab/embedded/service/gitlab-rails/ #后面的报错不用管 cp: 无法以目录"gitlab-12-0-stable-zh/log" 来覆盖非目录"/opt/gitlab/embedded/service/gitlab-rails/log" cp: 无法以目录"gitlab-12-0-stable-zh/tmp" 来覆盖非目录"/opt/gitlab/embedded/service/gitlab-rails/tmp" [root@gitlab ~]# gitlab-ctl start #开启gitlab,在开启后等一两分钟再访问gitlab否则会报错 ok: run: alertmanager: (pid 4094) 0s ok: run: gitaly: (pid 4102) 1s ok: run: gitlab-monitor: (pid 4123) 0s ok: run: gitlab-workhorse: (pid 4127) 0s ok: run: grafana: (pid 4134) 1s ok: run: logrotate: (pid 4147) 0s ok: run: nginx: (pid 4153) 1s ok: run: node-exporter: (pid 4158) 0s ok: run: postgres-exporter: (pid 4162) 1s ok: run: postgresql: (pid 4243) 0s ok: run: prometheus: (pid 4252) 0s ok: run: redis: (pid 4261) 1s ok: run: redis-exporter: (pid 4265) 0s ok: run: sidekiq: (pid 4270) 1s ok: run: unicorn: (pid 4276) 0s
访问web界面,成功汉化
-Gitlab的使用
- 基本命令
名称 | 作用 |
gitlab-ctl stop | 关闭gitlab |
gitlab-ctl start | 开启gitlab |
gitlab-ctl restart | 重启gitlab |
gitlab-ctl reconfigure | 重置gitlab,在修改完配置文件后需要执行,不能乱用 |
- gitlab相关配置文件和目录
名称 | 作用 |
/etc/gitlab/gitlab.rb | gitlab主配置文件,可以自定义一些邮件服务等 |
/var/log/gitlab/ | 日志目录,对应各服务的日志的目录 |
/var/opt/gitlab/ | 服务目录,对应各个服务的目录 |
/var/opt/gitlab/git-data | 仓库目录,记录项目仓库等提交信息 |
-关闭gitlab注册功能
默认情况下,用户可以自己去注册账号,这样显然是不安全的,所以可以关闭gitlab的账户注册功能
-配置gitlab邮件报警
运维人员最注重的一点就是告警邮件,所以gitlab也配备了邮件发送的功能,但是使用gitlab的默认设置可能收不到邮件,所以需要我们手动修改,在做邮件报警时需要加一块桥接网卡
官网各种邮箱配置实例:https://docs.gitlab.com/omnibus/settings/smtp.html
******(1)修改配置文件,这里配置的是qq的smtp [root@gitlab ~]# vim /etc/gitlab/gitlab.rb 。。。。。。 #在58行添加,都是注释直接空一行写就行 gitlab_rails['smtp_enable'] = true gitlab_rails['smtp_address'] = "smtp.qq.com" #指定smtp服务器 gitlab_rails['smtp_port'] = 465 #每个服务器都有对应的端口,qq的是465 gitlab_rails['smtp_user_name'] = "1248873545@qq.com" #邮箱 gitlab_rails['smtp_password'] = "tlefpqamwrhkhage" #smtp号 gitlab_rails['smtp_authentication'] = "login" gitlab_rails['smtp_enable_starttls_auto'] = true gitlab_rails['smtp_tls'] = true gitlab_rails['gitlab_email_from'] = '1248873545@qq.com' #发送邮件的邮箱 #保存退出 ******(2)重置gitlab [root@gitlab ~]# gitlab-ctl reconfigure 。。。。。。 Running handlers: Running handlers complete Chef Client finished, 16/669 resources updated in 01 minutes 07 seconds gitlab Reconfigured! ******(3)登录控制台发送邮件 [root@gitlab ~]# gitlab-rails console 。。。。。。 irb(main):002:0> Notify.test_email('1248873545@qq.com', 'test', 'test').deliver_now #发送邮箱到1248873545@qq.com,标题为test,内容为test Notify#test_email: processed outbound mail in 123.1ms Sent mail to 1248873545@qq.com (2811.6ms) Date: Wed, 30 Jun 2021 10:07:59 +0800 From: GitLab <1248873545@qq.com> Reply-To: GitLab <noreply@192.168.100.202> To: 1248873545@qq.com Message-ID: <60dbd1ff541c0_1ff33fc03fccf97c28335@gitlab.mail> Subject: test Mime-Version: 1.0 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 7bit Auto-Submitted: auto-generated X-Auto-Response-Suppress: All <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> <html><body><p>test</p></body></html> => #<Mail::Message:70094578102080, Multipart: false, Headers: <Date: Wed, 30 Jun 2021 10:07:59 +0800>, <From: GitLab <1248873545@qq.com>>, <Reply-To: GitLab <noreply@192.168.100.202>>, <To: 1248873545@qq.com>, <Message-ID: <60dbd1ff541c0_1ff33fc03fccf97c28335@gitlab.mail>>, <Subject: test>, <Mime-Version: 1.0>, <Content-Type: text/html; charset=UTF-8>, <Content-Transfer-Encoding: 7bit>, <Auto-Submitted: auto-generated>, <X-Auto-Response-Suppress: All>>
邮件可以成功发送后,开始修改root用户的邮箱,因为root用户的默认邮箱为admin@example.com,修改邮箱后创建组会发送邮件警告
-创建一个新群组
- Private: 只有组成员才能看到
- Internal: 只要登录的用户就能看到
- Public: 所有人都能看到