CI/CD之Jenkins+Gitlab(一)

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: CI/CD之Jenkins+Gitlab(上)


本文章达到了一万六千字,有点多,但是比较全


一、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/


181846863c6a422e8f1959b27ee68dda.png

63eebd695b0141ba9f21bb04c642fd5b.png


(3)Gitlab概述


  • Gitlab是一个利用Ruby on Redis开发的开源应用程序,实现了一个自托管的Git项目仓库,用户可以通过web界面进行访问公开或者私人项目


  • Gitlab拥有和Github类似的功能,都能浏览源代码、管理缺陷和注释,可以管理团队对仓库的访问,Gitlab会提供一个文件历史库去存放提交过的项目版本,并且还提供一个代码片段收集功能,可以轻松实现代码复用,方便以后有需要的时候进行查找


  • Ruby on Redis: 是一个可以使开发、部署、维护web应用程序变得简单的框架



147ab47237254071978bc5e0d7bcf528.png

8a6c3929edb247b0b585299e0652d095.png


(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 
。。。。。。
完毕!
       *.                  *.
      ***                 ***
     *****               *****
    .******             *******
    ********            ********
   ,,,,,,,,,***********,,,,,,,,,
  ,,,,,,,,,,,*********,,,,,,,,,,,
  .,,,,,,,,,,,*******,,,,,,,,,,,,
      ,,,,,,,,,*****,,,,,,,,,.
         ,,,,,,,****,,,,,,
            .,,,***,,,,
                ,*,.
     _______ __  __          __
    / ____(_) /_/ /   ____ _/ /_
   / / __/ / __/ /   / __ `/ __ \
  / /_/ / / /_/ /___/ /_/ / /_/ /
  \____/_/\__/_____/\__,_/_.___/

cc230e8e0a274a38be1d468db77716cd.png

******(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  

70bcd1e1adaf4af48611aed30a10456a.png

(9)登录gitlab


a9dea15368c8408db5b2972179981740.png



第一次登录gitlab需要为root用户修改密码,root用户是gitlab的超级管理员,这里输入新的密码:nihao123!


0695fb0cf3e346aa989500bae808754d.png


56c30d97fb52436aa95b0eee452a9b63.png


成功登录gitlab


51f019f461ea4320a238e92ad90c0d4a.png


******(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界面,成功汉化

486708d395074b5f8898133a7741d80e.png

16912775ee1a45dd81921ae1e1baca60.png


9ac87acdd3834ef0bffb94701b7e5e00.png

826283933f0d452dbfc32c9576db18b3.png

-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的账户注册功能


5876978d747f467ebbd6281e556cda9a.png


642de0f84c0c42f4bee9464fff322d96.png


6c35e414ed234f7ba8966da2453164ab.png

3519723dd7194653ae97089de91d4fa1.png

0b177e3b57c44be09a1c422968b6091f.png

e0a8a0e7809b4eedae88f03377d64307.png

e224666d460e474abfb7c70d1e5fa9f7.png

-配置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>>

5fd4c6af2eda4967919803ad8d954bdf.png

邮件可以成功发送后,开始修改root用户的邮箱,因为root用户的默认邮箱为admin@example.com,修改邮箱后创建组会发送邮件警告


c2ff22160bef479f9207a7995bbbdc49.png

64d8a343f19e4eaab0c5ea7e190a291f.png

e7f2d4620c5f4fdaa7d048b10210a3db.png

0253abf54a47460d82593e11f9be7c88.png

ecda33ff8f2344e8ac446c73b4f12f57.png

-创建一个新群组


94cc0b9acd2848b69dd179366d44e0ef.png

b717339eac5641f8bb5b4c211c40fef5.png


  • Private: 只有组成员才能看到
  • Internal: 只要登录的用户就能看到
  • Public: 所有人都能看到


24ecd4489a7b4eb7bc0a94b5f4874d3e.png


fe654f0528464852884ac898dc92eb74.png

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
13天前
无缝构建与部署:GitLab CI/CD首秀的实战攻略
无缝构建与部署:GitLab CI/CD首秀的实战攻略
25 0
无缝构建与部署:GitLab CI/CD首秀的实战攻略
|
1月前
|
JavaScript jenkins 持续交付
Jenkins自动构建 CI/CD流水线学习笔记(从入门到入土,理论+示例)
Jenkins自动构建 CI/CD流水线学习笔记(从入门到入土,理论+示例)
60 0
|
1月前
|
Devops 开发工具 数据安全/隐私保护
Docker Swarm总结+CI/CD Devops、gitlab、sonarqube以及harbor的安装集成配置(3/5)
Docker Swarm总结+CI/CD Devops、gitlab、sonarqube以及harbor的安装集成配置(3/5)
55 0
|
3月前
|
Shell 开发工具 git
GitLab CI/CD
GitLab CI/CD
54 0
|
3月前
|
小程序 前端开发 开发工具
Node+GitLab实现小程序CI系统
Node+GitLab实现小程序CI系统
|
3月前
|
存储 jenkins 持续交付
百度搜索:蓝易云【Docker+Rancher+Harbor+GitLab+Jenkins搭建CI/CD环境】
请注意,上述步骤仅为一个示例,实际搭建过程可能因环境和需求的不同而有所变化。因此,在实际操作中,请参考相应工具的官方文档和指南,以确保正确地配置和集成这些工具。
59 3
|
3月前
|
缓存 数据安全/隐私保护 Docker
安装gitlab
安装gitlab
147 0
|
6月前
|
Prometheus 监控 Cloud Native
私有仓库Gitlab的安装与汉化
私有仓库Gitlab的安装与汉化
108 0
|
5月前
|
网络安全 开发工具 数据安全/隐私保护
Gitlab的安装
Gitlab的安装
80 0
|
8月前
|
JSON 网络安全 数据安全/隐私保护
gitlab--安装和配置
gitlab--安装和配置