CI/CD之Jenkins+Gitlab(一)

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
可观测监控 Prometheus 版,每月50GB免费额度
简介: 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
目录
相关文章
|
2月前
|
运维 监控 jenkins
运维自动化实战:利用Jenkins构建高效CI/CD流程
【10月更文挑战第18天】运维自动化实战:利用Jenkins构建高效CI/CD流程
|
2月前
|
缓存 监控 数据可视化
利用GitLab CI/CD自动化您的软件开发流程
【10月更文挑战第10天】GitLab CI/CD 是 GitLab 内置的持续集成和持续部署工具,通过编写 .gitlab-ci.yml 文件,可以自动化构建、测试和部署应用程序的过程。本文介绍 GitLab CI/CD 的核心优势、实施步骤及在现代开发中的应用,帮助您提高开发效率和软件质量。
|
2月前
|
运维 监控 jenkins
运维自动化实践:利用Jenkins实现高效CI/CD流程
【10月更文挑战第18天】运维自动化实践:利用Jenkins实现高效CI/CD流程
|
2月前
|
JavaScript 测试技术 持续交付
使用 GitLab CI/CD 管道自动化部署 Web 应用
【10月更文挑战第2天】使用 GitLab CI/CD 管道自动化部署 Web 应用
63 0
|
2月前
|
jenkins Shell 持续交付
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(一)
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(一)
221 0
|
1月前
|
jenkins Devops Java
DevOps实践:Jenkins在持续集成与持续部署中的价值
【10月更文挑战第27天】在快速发展的软件开发领域,DevOps实践日益重要。Jenkins作为一款流行的开源自动化服务器,在持续集成(CI)和持续部署(CD)中扮演关键角色。本文通过案例分析,探讨Jenkins在Java项目中的应用,展示其自动化构建、测试和部署的能力,提高开发效率和软件质量。
57 2
|
4月前
|
jenkins 持续交付 开发者
自动化部署:使用Jenkins和Docker实现持续集成与交付
【8月更文挑战第31天】本文旨在为读者揭示如何通过Jenkins和Docker实现自动化部署,从而加速软件开发流程。我们将从基础概念讲起,逐步深入到实际操作,确保即使是初学者也能跟上步伐。文章将提供详细的步骤说明和代码示例,帮助读者理解并应用这些工具来优化他们的工作流程。
|
10天前
|
监控 jenkins Linux
从 Jenkins 持续集成出发:探究如何监控员工电脑屏幕
Jenkins 在企业信息化管理中用于自动化构建、测试和部署,提高开发效率。本文讨论了其重要性,并从技术角度探讨了屏幕监控的可能性,但明确反对非法监控,强调应合法合规地管理企业和尊重员工隐私。
49 12
|
1月前
|
运维 jenkins Java
Jenkins在持续集成与持续部署中的价值
Jenkins在持续集成与持续部署中的价值
|
1月前
|
jenkins Devops 测试技术
DevOps实践:Jenkins在持续集成与持续部署中的价值
【10月更文挑战第26天】随着DevOps理念的普及,Jenkins作为一款开源自动化服务器,在持续集成(CI)与持续部署(CD)中发挥重要作用。本文通过某中型互联网企业的实际案例,展示了Jenkins如何通过自动化构建、持续集成和持续部署,显著提升开发效率、代码质量和软件交付速度,帮助企业解决传统手工操作带来的低效和错误问题。
67 4