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 在持续交付的基础之上,把部署到生产环境的过程自动化。
持续集成流程:
- 开发者将新版本 push 到
Gitlab
。 Gitlab
随后触发jenkins master
节点进行一次 build。(或者通过web hook
定时检测)jenkins master
节点将这个 build 任务分配给若干个注册的 slave 结点中的一个,这个 slave 结 点根据一个事先设置好的脚本进行 build。这个脚本可以做的事情很多,比如编译,测试,生成测试报告等等。这些原本需要手动完成的任务都可以交给jenkins
来做。- 我们在 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的区别:
相同点: 二者都是基于web
的Git
仓库,在很大程度上 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更新代码
- 导出GitLab项目
- 安装插件(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 Plugin
和 Build Authorization Token Root
和 Build Token Trigger
增加 Build Pipeline 插件以流程图的形式展示各个 Job 的顺序
No pain, no gain!