Gitlab与Jenkins构建CICD环境

本文详细介绍了如何利用GitLab和Jenkins搭建持续集成(CI)和持续部署(CD)环境。从GitLab与GitHub的区别入手,讲解了GitLab的安装、配置及权限管理。接着,部署Jenkins并配置与GitLab的集成,实现自动拉取代码、构建、测试和发布到Web服务器。通过Build Pipeline插件展示了CICD流程,并探讨了使用分支进行版本回滚的策略。最后,演示了Jenkins发布Java项目到Tomcat的完整过程。
摘要由CSDN通过智能技术生成

 一、概述

1、CI 持续集成

持续集成:持续集成(continuous integration)是指开发者在代码开发过程中,可以频繁将代码部署集成到主干,并进行自动化测试
持续交付:是指在持续集成的基础之上,将代码部署到预生产环境
持续部署:在持续交付的基础之上,把部署到生产环境的过程自动化

2、持续集成流程

1、开发者将新版本 push Gitlab
2、Gitlab 随后触发 jenkins master 节点进行一次 build。(或者通过 web hook 定时检测)
3、jenkins master 节点将这个 build 任务分配给若干个注册的 slave 结点中的一个,这个 slave 结 点根据一个事先设置好的脚本进行 build。这个脚本可以做的事情很多,比如编译,测试,生成测试报告等等。这些原本需要手动完成的任务都可以交给 jenkins 来做
4、我们在 build 中要进行编译,这里使用了分布式编译器 distcc 来加快编译速度

3、CICD流程

gitlab 创建代码项目  >>>  gitlab 部署公钥  >>>  jenkins 安装插件  >>>  创建新项目   >>>  绑定私钥  >>>  添加触发器  >>>  测试部署  >>>  增加 Build Pipeline 插件以流程图的形式展示各个 Job 的顺序

4、Jenkins

Jenkins 概述:是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能

官方地址:Jenkins

5、GitLab和GitHub的区别

相同点:
二者都是基于webGit仓库,在很大程度上 GitLab 是仿照 GitHub 来做的,它们都提供了分享开源项目的平台,为开发团队提供了存储、分享、发布和合作开发项目的中心化于存储的场所。

不同点:
1、GitHub
如果要使用私有仓库,是需要付费的。GitLab可以在上面创建私人的免费仓库。
2、GitLab 让开发团队对他们的代码仓库拥有更多的控制,相比于 GitHub,它有不少的特色:允许 免费设置仓库权限;允许用户选择分享一个 project 的部分代码;允许用户设置 project 的获取权限,进一步的提升安全性;可以设置获取到团队整体的改进进度通过 innersourcing让不在权限范围内的人访问不到该资源。

总结:从代码私有性(安全性)方面来看,有时公司并不希望员工获取到全部的代码,这个时候 GitLab无疑是更好的选择。但对于开源项目而言,GitHub 依然是代码托管的首选

6、对比

git :是一种版本控制系统,是一个命令,是一种工具
gitlib :是用于实现 git 功能的开发库
github :是一个基于 git 实现的在线代码托管仓库,包含一个网站界面,向互联网开放
gitlab :是一个基于 git 实现的在线代码仓库托管软件,一般用于在企业内部网络搭 git私服

注意: gitlab-ce 社区版 ; gitlab-ee 是企业版,收费

二、部署Gitlab

系统 IP 主机名 角色
CentOS 7.4 192.168.2.14 Gitlab Gitlab
CentOS 7.4 192.168.2.15 jenkins jenkins
CentOS 7.4 192.168.2.16 Apache Apache(web)
windows 7 192.168.2.50 wind 客户端

注意:Gitlab主机内存  ≥ 4G ,不然后面会报错(内存5G,CPU 6)

 清华大学镜像站:https://mirrors.tuna.tsinghua.edu,cn/gitlab-ce/yum/el7/

GitLab包含软件:

alertmanager
gitaly
gitlab-exporter
gitlab-workhorse
grafana
logrotate
nginx
node-exporter
postgres-exporter
postgresql
prometheus
redis
redis-exporter
sidekiq
unicorn

 安装前需要设置好网卡可以上网

配置防火墙


[root@Gitlab ~]# iptables -F                      #清空规则             
[root@Gitlab ~]# systemctl stop firewalld         
[root@Gitlab ~]# systemctl disable firewalld        

禁止防火墙,就不用执行下面两条命令:
[root@Gitlab ~]# firewall-cmd --permanent --add-service=http              
[root@Gitlab ~]# systemctl reload firewalld               

时间同步服务器


[root@Gitlab ~]# yum -y install ntp              
......
[root@Gitlab ~]# sed -i '/^server/s/^/#/g' /etc/ntp.conf               
[root@Gitlab ~]# cat <<END >>/etc/ntp.conf        
server 127.127.1.0
fudge 127.127.1.0 stratum 8
END           

[root@Gitlab ~]# ntpdate time.nist.gov               
11 Feb 17:27:25 ntpdate[73029]: adjust time server 128.138.141.172 offset 0.004230 sec

[root@Gitlab ~]# systemctl restart ntpd         
[root@Gitlab ~]# systemctl enable ntpd              
Created symlink from /etc/systemd/system/multi-user.target.wants/ntpd.service to /usr/lib/systemd/system/ntpd.service.

(一)、安装Gitlab


[root@Gitlab ~]# yum install -y policycoreutils-python                     #安装依赖               
.........
[root@Gitlab ~]# rpm -ivh gitlab-ce-14.7.2-ce.0.el7.x86_64.rpm             #上传rpm包
.......
[root@Gitlab ~]# vim /etc/gitlab/gitlab.rb                                 #修改 gitlab 外部访问地址;可以修改为IP地址,也可以修改为自定义的gitlab域名
.........
  32 external_url 'http://192.168.2.14
...
保存
[root@Gitlab ~]# gitlab-ctl reconfigure                                    #初始化gitlab,会重置为最原始的配置
...........
.....
gitlab Reconfigured!

[root@Gitlab ~]# gitlab-ctl status                                         #查看状态
........
..
[root@Gitlab ~]# netstat -anptu| grep 80                                   #默认使用nginx做为web界面
tcp        0      0 127.0.0.1:8080          0.0.0.0:*               LISTEN      10439/puma 5.5.2 (u 
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      10757/nginx: master 




访问测试:192.168.2.14

 访问成功后发现需要用户和密码在 Gitlab 中 默认有 root 用户但是密码是自动生成的接下来进行重置密码

(二)、重置密码

1、进入控制台


[root@Gitlab ~]# gitlab-rails console              

2、查询root用户账号信息并赋值给u


irb(main):001:0> u=User.where(id:1).first               
=> #<User id:1 @root>

3、设置密码


irb(main):002:0> u.password=12345678           #root用户密码设置为12345678
=> 12345678

4、确认密码


irb(main):003:0> u.password_confirmation=12345678                   
=> 12345678

5、保存设置


irb(main):004:0> u.save!               
=> true

 6、退出控制台

exit

7、重启GitLab


[root@Gitlab ~]# gitlab-ctl restart              

访问GitLab页面输入用户名root和你新设置的密码,登录成功则可进入到GitLab主页。

 (三)、Gitlab的命令


gitlab-ctl stop                           #关闭 gitlab

gitlab-ctl start                          #启动 gitlab 

gitlab-ctl restart                        #重启 gitlab

systemctl restart gitlab-runsvdir         #gitlab启动报warning: redis: unable to open supervise/ok: file does not exist

GitLab的配置文件:/etc/gitlab/gitlab.rb 	       #可以自定义一些邮件服务等
日志地址:/var/log/gitlab/                      #对应各服务
服务地址:/var/opt/gitlab/                      #对应各服务的主目录 
仓库地址:/var/opt/gitlab/git-data              #记录项目仓库等提交信息

sudo gitlab-ctl tail                           #查看所有的logs; 按 Ctrl-C 退出         

sudo gitlab-ctl tail gitlab-rails              #拉取/var/log/gitlab下子目录的日志

sudo gitlab-ctl tail nginx/gitlab_error.log    #拉取某个指定的日志文件

gitlab-rake gitlab:check SANITIZE=true --trace #检查gitlab

(四)、关闭 gitlab的注册功能

默认情冴下可以直接注册账号,我们不需要注册功能,可以关闭

 最后保存更改;退出登录后再次查看已经没有注册提示了

 (五)、配置邮箱报警

linux运维最注重的一点就是告警邮件,所以Gitlab一样提供了邮件发送的功能。使用默认设置可能收不到邮件,这里使用第三方SMTP服务器

在官方有各种邮箱配置实例:SMTP settings | GitLab

1、修改配置文件

这里我使用的是QQ邮箱


[root@Gitlab ~]# vim /etc/gitlab/gitlab.rb            #在112行后面插入以下内容
...............
 113 gitlab_rails['smtp_enable'] = true
 114 gitlab_rails['smtp_address'] = "smtp.qq.com"
 115 gitlab_rails['smtp_port'] = 465
 116 gitlab_rails['smtp_user_name'] = "1234567890@qq.com"
 117 gitlab_rails['smtp_password'] = "邮箱授权码  不是邮箱密码"
 118 gitlab_rails['smtp_authentication'] = "login"
 119 gitlab_rails['smtp_enable_starttls_auto'] = true
 120 gitlab_rails['smtp_tls'] = true
 121 gitlab_rails['gitlab_email_from'] = '1234567890@qq.com'
.........
....
保存

[root@Gitlab ~]# gitlab-ctl reconfigure                #初始化gitlab
...........
....
[root@Gitlab ~]# gitlab-rails console                  #登陆控制台
--------------------------------------------------------------------------------
 Ruby:         ruby 2.7.5p203 (2021-11-24 revision f69aeb8314) [x86_64-linux]
 GitLab:       14.7.2 (89599212ee6) FOSS
 GitLab Shell: 13.22.2
 PostgreSQL:   12.7
--------------------------------------------------------------------------------
Loading production environment (Rails 6.1.4.4)
irb(main):001:0> Notify.test_email('1234567890@qq.com', '测试一', '测试').deliver_now            #给1234567890发送一个测试邮件 
Delivered mail 6205d85720795_16bb5adc2973c@Gitlab.mail (1179.0ms)
=> #<Mail::Message:279200, Multipart: false, Headers: <Date: Fri, 11 Feb 2022 11:30:31 +0800>, <From: GitLab <1228413999@qq.com>>, <Reply-To: GitLab <noreply@gitlab.example.com>>, <To: 1228413999@qq.com>, <Message-ID: <6205d85720795_16bb5adc2973c@Gitlab.mail>>, <Subject: 测试一>, <Mime-Version: 1.0>, <Content-T
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乘浪初心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值