CI/CD自动集成-发布-部署

目录

  • CI/CD自动集成-发布-部署
  • 持续集成流程:
  • CICD流程
  • GitLab
  • GitLab安装
  • GitLab汉化
  • GitLab卸载
  • GitLab使用
  • GitLab和GitHub的区别:
  • Git使用
  • git常用命令
  • Jenkins
  • Jenkins汉化
  • 配置Jenkins使用gitlib更新代码
  • 实现 gitlib 触发 Jenkins 自动部署
  • 持续集成:简称CI。持续集成(continuous integration)是指开发者在代码开发过程中,可以频繁将代码部署集成到主干,并进行自动化测试。持续集成的优点:快速发现错误,容易定位到错误。防止分支大幅度偏离主干。
  • 持续交付:简称CD。是指在持续集成的基础之上,将代码部署到预生产环境。持续交付可以看作是持续集成的下一步,无论如何更新,软件是随时随地可交付的。
  • 持续部署:CD 在持续交付的基础之上,把部署到生产环境的过程自动化。

持续集成流程:

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

CICD流程

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

GitLab

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

GitLab 中文网:https://www.gitlab.com/installation/#centos-7

清华大学镜像站: 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

GitLab安装

# 服务器节点内存需要大于4G
# 安装依赖
yum install -y policycoreutils-python

# 上传rpm包
rpm -ivh gitlab-ce-10.2.3-ce.0.el7.x86_64.rpm

# 配置gitlab域名
vim /etc/gitlab/gitlab.rb
external_url 'http://192.168.1.63:9999'

# 初始化gitlab,会重置为最原始的配置
gitlab-ctl reconfigure

# 查看状态
gitlab-ctl status

# 浏览器访问验证
http://192.168.1.63/users/sign_in

# 关闭 gitlab: 
gitlab-ctl stop 

# 启动 gitlab: 
gitlab-ctl start 

# 重启 gitlab: 
gitlab-ctl restart

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

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

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

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

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

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

GitLab汉化

# 方式1
# 汉化gitlib
tar zxvf gitlab-patch-zh.tat.gz
yum install -y git patch
git   diff   v10.2.3   v10.2.3-zh   > ../10.2.3-zh.diff
chmod -R 777 gitlab
patch -d /opt/gitlab/embedded/service/gitlab-rails -p1 < ../10.2.3-zh.diff

# 方式2:
# 下载汉化包并解压
gitlab-12-3-stable-zh.zip

# 备份原文件
cp -rp /opt/gitlab/embedded/service/gitlab-rails{,.bak_$(date +%F)}

# 将汉化包覆盖过去(\也需要敲)
\cp -rf ./* /opt/gitlab/embedded/service/gitlab-rails

# 重启gitlab,注意顺序,
sudo gitlab-ctl start 
sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart

GitLab卸载

# 卸载gitlab
gitlab-ctl stop
rpm -e gitlab-ce
ps aux | grep gitlab
#杀掉第一个进程(就是带有好多.............的进程)
kill -9 18777
find / -name gitlab | xargs rm -rf

GitLab使用

设置gitlab用户root可以通过ssh公钥直接下载代码

将代码发布到web服务器

可以通过执行命令或脚本的方式迚行代码发布,我使用 root 用户在各个 web 服务器上发布代码。大 家也可以建立一些普通用户如果 www 或 apache 来发布。如果使用普通用户发布代码,要保持所有服务 器上的用户 id 一致,这样没有权限的问题

使用git克隆代码,复制左侧链接.


git clone http://192.168.1.63:9999/root/harry.git

GitLab和GitHub的区别:

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

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

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

Git使用

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

# 安装git
yum install -y git

安装完成后,需要先配置自己的git环境。配置工作只需一次,以后升级时还会 沿用现在的配置。

第一个要配置的是你个人的用户名称和电子邮件地址。这两条配置很重要,每次 Git 提交时都会引用 这两条信息,说明是谁提交了更新,所以会随更新内容一起被永久纳入历史记录。

git常用命令

git config --global user.name “name“ #设置全局用户名
git config --global user.email   mail 	#设置全局邮箱
git config --global   --list 	#列出用户全局设置
git   add index.html 	#添加文件到暂存区
git commit -m “描述内容“ 	#提交文件到工作区
git status 	#查看工作区的状态
git push 	#提交代码到 git 服务器上
git pull 	#获取代码到本地
git log 	#查看操作日志
vim   .gitignore 	#定义忽略文件
git reset --hard   HEAD^   #git 版本回滚, HEAD 为当前版本,加一个^为上一个,^^为上上一 个版本
git reflog  # #获取每次提交的 ID,可以使用--hard 根据提交的 ID 迚行版本回退
git reset --hard 5ae4b06 	#回退到指定 id 的版本
git branch 	#查看当前所处的分支
git checkout --   file 	#从服务器更新某个那文件覆盖本地的文件

工作区和暂存区及分支概述:

1、工作区就是编辑文件的目录区域,需要将工作区的修改好的文件 add 到暂存区才能提交到 git 服 务器,在工作区有多个文件的时候可以将一个戒多个文件添加至暂存区,再提交到 git 服务器即可。

2、在服务器创建分支

# 例:把修改过的 index.html 文件更新主版本中
[root@harry63 test]# cd harry-web/
[root@harry63 harry-web]# echo "bbs.harry.cn" >> index.html
[root@harry63 harry-web]#   git add index.html 
[root@harry63 harry-web]# git commit -m "add bbs.harry.cn" 
[root@harry63 harry-web]# git push -u origin 	master   #上传到 master 主干下 origin [ˈɒrɪdʒɪn] 起源,根
[root@harry63 harry-web]# rm -rf index.html 	#初除一些代码 [root@harry63 harry-web]# git reset --hard   HEAD   #回滚到最新版本 [root@harry63 harry-web]# ls

查看 git 当前的版本: 
[root@harry63 ~]# git --version 
git version 1.8.3.1

[root@harry63 harry-web]# git reflog 	#获取每次提交的 ID
9c1e21a HEAD@{0}: commit: aaa cd9d1d5 HEAD@{1}: commit: add bbs
b2866fd HEAD@{2}: clone: from http://192.168.1.63/harry/harry-web.git


# 工作区和暂存区及分支概述
# 1、工作区就是编辑文件的目录区域,需要将工作区的修改好的文件 add 到暂存区才能提交到 git 服 务器,在工作区有多个文件的时候可以将一个或多个文件添加至暂存区,再提交到 git 服务器即可。
# 2、在服务器创建分支
[root@harry63 harry-web]#   git branch bbs 	#创建一个分支 [root@harry63 harry-web]#   git checkout bbs   #切换到分支 bbs [root@harry63 harry-web]#   git branch 	#查看当前所处的分支
[root@harry63 harry-web]#   vim a.txt 	#随意在里面写一些内容
[root@harry63 harry-web]#   git add a.txt
[root@harry63 harry-web]#   git commit -m "add a.txt“   #提交到暂存区中
[root@harry63 harry-web]#   git push -u origin   bbs   #上传到分支 bbs 分支上

Jenkins

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

官网地址:https://jenkins.io/

rpm包下载地址:http://pkg.jenkins.io/redhat-stable/

中文帮助:https://jenkins.io/zh/doc/book/installing/

插件下载地址:http://mirror.xmission.com/jenkins/updates/update-center.json

部署Jenkins:推荐方式2

方式1:

# 安装jenkins
rpm -ivh jenkins-2.93-1.1.noarch.rpm

# 修改配置文件,配置端口、用户及jdk(jdk如果没有则需要安装)
vim  /etc/sysconfig/jenkins
JENKINS_PORT=" 198 "
JENKINS_USER="root"
JENKINS_JAVA_CMD="/opt/cosmo/com/public/jdk_lin/1.8.0_171"

# 修改配置文件
vim  /etc/sysconfig/jenkins
JENKINS_USER="root"

# 启动
/etc/init.d/jenkins start

# 开机自启动
chkconfig jenkins on

# 查看管理员登录密码
cat /var/lib/jenkins/secrets/initialAdminPassword

方式2:

# 下载jenkins的war包
https://www.jenkins.io/download/

# 上传war包至服务器,并启动
java -jar jenkins.war --httpPort=8888

# 后台启动
nohup java -jar jenkins.war --httpPort=8888 > /dev/null 2>&1 &

# 浏览器访问验证
http://192.168.1.63:8888

# 查看管理员登录密码
cat /var/lib/jenkins/secrets/initialAdminPassword

Jenkins插件下载:http://updates.jenkins-ci.org/download/plugins/

安装插件方式选择:
方法一(推荐):如果服务器可以上网,那边选择在线安装最好不过了,安装流程为: 系统管理(ConfigureSystem)----插件管理(Manage Jenkins)---选择需要的插件直接安装即可

方法二:如果服务器不能上网,那么就只能离线安装,首先去http://updates.jenkins-ci.org/download/plugins/ 下载需要的 plugin,选择匹配的版本号,下载到本 地,然后打开:系统管理()---插件管理—高级---找到”上传插件”(浏览,找到扩展名为.hpi 的插件,上传之 后默认直接就安装了。重启 jenkins,安装的插件就可以使用了。


Jenkins汉化

安装这两个汉化插件


重启jenkins

配置Jenkins使用gitlib更新代码

  1. 导出GitLab项目
  2. 安装插件(Jenkins需要插件来支撑)
Credentials Plugin(默认已经安装)    #签名证书管理插件
Gitlab Plugin   #安装后从 gitlab 获取代码
Git Plugin   和 Git Client Plugin 	#用于 jenkins 在 gitlab 中拉取源码
GitLab Hook #gitlab 触发 jenkins 构建项目 #hook   [hʊk] 	钩子 ; plugin   ['plʌgɪn] 插件
gitlab Authentication 	# gitlab 和 jenkins 认证相关的插件
SSH Plugin 	#进程执行 shell 脚本
Publish Over SSH   #用于通过 ssh 部署应用

实现 gitlib 触发 Jenkins 自动部署

在公司的测试环境当中,当开发人员向 gitlab 仓库提交代码后,gitlab 自动通知 jenkins 进行构建项目、代码质量测试然后部署至测试环境,这里先暂时部署到测试环境。对于生产环境,后期使用手动部署代码。

安装 Gitlab Hook Plugin 插件:
系统管理-管理插件-可选插件,安装这两个插件:Gitlab Hook PluginBuild Authorization Token RootBuild Token Trigger

增加 Build Pipeline 插件以流程图的形式展示各个 Job 的顺序

No pain, no gain!