持续集成CICD
-
- 1.持续集成 ( 集成、交付、部署)
- 2.git、gitlab、jenkins、sonarqube
- 1.软件开发生命周期(简易版 --> 引入 环境 - 工具 --流程 )
- 2.什么是环境、代码部署指的是什么
- 开发环境:
- 测试环境:一般来说是由测试人员部署。然后在该环境进行代码的测试。
- 预发布环境: 保证上线前的代码质量。( 域名不一样。连接生产环境数据库。)
- 生产环境:线上对外 环境,用户直接 访问的环境。由运维 来维护。
- 3.环境与环境之间的代码是 如何部署的?
- 代码部署:将我们开发的代码放到对应的web站点目录。/code
- 手动:慢、干扰因素多、不安全。 scp、xftp、git pull svn pull
- 自动:快、干扰因素少、安全。
- 3.持续集成、持续交付、持续部署
- 持续集成:频繁的一天多次,将代码集成到主干分支。(重复集成 的工作。)
- 持续交付
- 交付个qa团队测试,一次算交付,每天频繁多次,持续交付。
- 持续部署
- 开发-->代码-->构建-测试后-返回结果为给开发-->测试-->部署的操作。
- 4.代码发布的流程与对应的实施的工具。
-
5.第一个工具,git
- 1.什么是git
- git是一个分布式的版本控制软件。
- 分布式
- 版本控制
- 软件。
git基本使用:
- git是一个分布式的版本控制软件。
一个人开始干:
- 1.什么是git
mkdir douyin
cd douyin/
git init #将目录初始化为一个git的仓库
#配置一个我是谁,我的邮箱是什么?
git config --global user.email "army@qq.com"
git config --global user.name "army"
git config color.ui true
git status
git add .
git status
#提交文件至本地仓库:
git commit -m "v1.0短视频开发完成"
#查看提交的记录( 提交的描述,以及COMMITID,这个COMMITID是唯一的。)
git log```
在开发一个新功能( 视频审核 )
git add . #让git将该文件 管理起来
git commit -m "描述信息"#将文件提交到本地仓库中
git log #查看当前仓库所有的提交记录 ```
- XXX功能
[root@gitlab douyin]# vim yuefan.html
[root@gitlab douyin]# git add .
[root@gitlab douyin]# git commit -m "功能上线"
git log 查看历史提交记录 git reset --hard COMMITID (你想回退到哪个指定的版本)
```
[root@gitlab douyin]# git reflog #查看所有历史提交的commitID
[root@gitlab douyin]# git reset --hard b3d3523
```
- git命令总结,多个区域的概念
git init #将一个目录初始化为一个版本库
git add #将目录下的所有文件都加入到git的版本管理
git commit #将所有被git管理的文件,都提交到本地仓库进行版本管理
git log #查看git的提交记录(谁、什么时间、提交了什么、commitid是啥、提交的描述是什么)
git reflog #查看git所有的提交记录 (每一次的提交都能查看到)
git reset --hard #回退到指定的版本,后面跟上commitid 这个id可以通过log查看,也可以reflog ```
- ![image-20190801214513960](http://cdn.xuliangwei.com/image-20190801214513960.png)
- git分支:
- 功能出现了bug、还希望在开发一个商城系统:怎么办?
![](https://img2020.cnblogs.com/blog/1275194/202011/1275194-20201119165225227-794005490.png)
# git分支的操作与使用:
git branch dev #创建dev分支
git checkout dev #切换到dev分支
#开发商城:
vim shopping.html
git add .
git commit -m "商城完成百分之20%-c4"
#现在约功能出现了bug,请回到master分支,基于master的c3创建bug分支
git checkout master
git branch bug
git checkout bug
#开始bug修复
vim yuefan.html
git add .
git commit -m "bug修复完毕..c5"
#bug修复完成后,我们需要回到master分支,然后合并bug分支的内容:
git checkout master
git merge bug -m "合并bug分支--c6"
#继续回到dev分支开发商城系统
git checkout dev
git add .
git commit -m "商城完成百分之100%--c7"
#继续在dev分支合并master的代码。确保修复的bug与我的商城系统兼容
git merge master -m "商城100%-bug修复--c8"
#最后回到master分支。然后将dev开发的功能合回master 没有问题就可部署了
git checkout master
git merge dev -m "合并dev开发的商城功能。"
#当确保master分支是最新的内容,可以干掉其他的分支;
git branch -d dev
git branch -d bug```
三里屯买栋楼房:
1.我们需要有一个远程仓库 ( 码云 开源,个人可以免费使用。)
2.我们要将本地的仓库与远程建立连接
git remote add origin git@gitee.com:oldboy_oldxu/dy.git #请填写自己的地址 ( 基于ssh方式 )
cat ~/.ssh/id_rsa.pub #将服务器的公钥放入gitee服务器中
git push -u origin master #git push主要是用来将本地版本已管理的文件推送到远程仓库中
#如何推送其他分
git branch dev
git checkout dev
touch dev.html
git add .
git commit -m "添加dev的html"
git push origin dev #这个push这里不再是master而是你当前的分支名称。
#公司新来了一个小王,他需要查看公司的代码,怎么办? ( 还可能需要修改。然后提交:)
#1.小王需要先克隆项目: ( 仅在第一次需要,需要注意,私有的项目需要小王将公钥放入中心服务器 )
git clone git@gitee.com:*****/dy.git
#2.修改代码。推送代码中心服务器
user.name=******
user.email=*******@qq.com
git add .
git commit -m ""
git push origin master
#3.我自己,需要拉取中心服务器的最新代码:
git checkout master
git pull origin master #拉取中心的最新代码
#4.我修改代码,提交到中心服务器,小王拉取代码。
touch linux_army.html
git add .
git commit -m " 描述"
git push origin master
#5.小王就需要执行git pull 才可以看到我推送到远程服务器的最新版本代码
git pull origin master
3.将本地的代码提交到远程仓库( 首先要能提交到本地仓库-->才可以提交到远程仓库,否则不行?)
- git tag标签: 为某个指定的CommitID打上标签:
git tag -a v1.1 -m "最新的代码" #为最新的代码打上标签
git tag #查看当前本地的标签
git push origin --tags #推送本地的所有标签
#指定对应的commitID打上标签
git tag -a v1.0 ea03880 -m "当初上线商城功能的版本"
git tag -l
git push origin --tags
gitignore忽略
程序产生的垃圾
程序产生缓存
图片
数据配置
git牵扯到的多个区域总结:
git的命令总结:
git config --global user.email
git config --global user.name
git add
git status
git commit -m ""
git log
git reflog
git reset --hard CommitID
git branch Name
git checkout BranchName
git branch -d Name
git merge BranchName (master想和并dev,请先到master分支,然后使用git merge将dev分支和合并到master)
git clone URL Http的地址,如果项目是开源的,则不需要输入密码即可克隆
git remote add origin URL | SSH #origin就是一个别名
git remote remove origin
git push origin master
git pull origin master
git tag -a v1.0 -m ""
git tag -a v1.1 commitid -m ""
git tag -l
git tag -d v1.1
6.git仓库-->gitlab代码托管平台
码云:别人的服务器,自己公司的代码是否可以托管到别人的服务器上?
自建代码托管平台:
gitlab 重级别 (功能全、权限管理、分支保护、) 代码托管平台。
社区版 不花钱。 私有项目随便创建,想怎么来就怎么来。
企业版
gogs 轻量级(简陋,能完成代码的提交。)
安装gitlab
#gitlab安装本身很复杂,但是官方提供了rpm安装包,安装即可使用。封装好了。
[root@gitlab ~]# yum localinstall gitlab/gitlab-ce-12.0.3-ce.0.el7.x86_64.rpm -y
[root@gitlab ~]# cd /etc/gitlab/
[root@gitlab gitlab]# ls
gitlab.rb
[root@gitlab gitlab]# cp gitlab.rb gitlab.rb_bak
## GitLab URL
external_url 'http://gitlab.oldboy.com'
### Email Settings
gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = '123@qq.com'
gitlab_rails['gitlab_email_display_name'] = 'Oldboy-Gitlab'
### GitLab email server settings
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "123@qq.com"
gitlab_rails['smtp_password'] = "授权码"
gitlab_rails['smtp_domain'] = "qq.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
#关闭一些没有用的组件
1385:prometheus['enable'] = false
1386:prometheus['monitor_kubernetes'] = false
1452:alertmanager['enable'] = false
1474:node_exporter['enable'] = false
1493:redis_exporter['enable'] = false
1511:postgres_exporter['enable'] = false
1540:gitlab_monitor['enable'] = false
1553:prometheus_monitoring['enable'] = false
1560:grafana['enable'] = false
1550:prometheus_monitoring['enable'] = false
#初始化操作:
[root@gitlab gitlab]# gitlab-ctl reconfigure
#访问gitlab
#设置超级管理员密码: oldxu.com
#默认超级管理员root
```
gitlab汉化:
[root@gitlab ~]# ll gitlab/
总用量 1479048
-rw-r--r-- 1 root root 76557595 8月 9 08:50 gitlab-12-0-stable-zh.tar.gz
-rw-r--r-- 1 root root 640227518 8月 9 08:50 gitlab-ce-12.0.3-ce.0.el7.x86_64.rpm
-rw-r--r-- 1 root root 797754871 8月 9 08:51 gitlab-ce-12.10.9-ce.0.el7.x86_64.rpm
[root@gitlab ~]# cd gitlab/
[root@gitlab gitlab]# tar xf gitlab-12-0-stable-zh.tar.gz
[root@gitlab gitlab]# cat gitlab-12-0-stable-zh/VERSION
12.0.3
[root@gitlab gitlab]# gitlab-ctl stop
[root@gitlab gitlab]# \cp -r gitlab-12-0-stable-zh/* /opt/gitlab/embedded/service/gitlab-rails/
[root@gitlab gitlab]# gitlab-ctl reconfigure
[root@gitlab gitlab]# gitlab-ctl start
```
用户、组、权限之间的关系
1.创建组
2.基于组创建项目
3.创建用户
4.将用户加入到组中,然后分配对应的权限。
5.分别使用账户登陆gitlab,查看是否能看到对应的项目。
------验证完毕:
`echo "10.0.0.110 gitlab.oldboy.com" >> /etc/hosts`
oldxu是主程序人员 ( Linux 服务器 gitlab 10.0.0.110)
oldli是开发人员 ( Linux服务器 web01 10.0.0.7 )
由于master分支是授保护的,所以很有可能oldli是无法将代码提交到master分支的,那怎么办呢?
方法一:
1.oldli创建一个dev分支,开发自己的项目
2.oldli将dev分支提交到远程仓库
3.oldli使用自己的账户登陆gitlab,然后申请合并请求:(申请dev与master合并)
4.管理员登陆gitlab,同意合并,则才能完成合并的操作。 如果拒绝,那么合并失败。
方法二:(不推荐。)
关闭分支保护就行了。 项目-->设置-->仓库-->保护分支
选择主程序员和开发者都可以提交。
方法三:(也不推荐,不然要分支保护干啥呢?)
超级管理员登陆gitlab,将对应的用户的权限提升为 主程序员。
如何将http拉取项目的方式调整为ssh免密
1.打开电脑,无论是linux还是windows,先生成公钥
2.将公钥粘贴到你gitlab对应的账户下。 点击右上角设置---ssh秘钥,添加即可。
gitlab备份、恢复、升级
备份:自带备份命令:
# gitlab-rake gitlab:backup:create #备份的命令
#没有说备份到哪儿?
#备份保留多久?
#vim /etc/gitlab.rb
gitlab_rails['backup_path'] = "/var/opt/gitlab/backups" #备份的路径
gitlab_rails['backup_keep_time'] = 604800 #备份保留7天
#修改了备份的路径,记得要执行 gitlab-ctl reconfigure
[root@gitlab ~]# ll /var/opt/gitlab/backups
总用量 152
-rw------- 1 git git 153600 8月 9 16:50 1596963023_2020_08_09_12.0.3_gitlab_backup.tar
#如何实现每天自动备份呢?
# contab即可。
```
恢复:
#1.停止数据写入服务:
# gitlab-ctl stop unicorn
# gitlab-ctl stop sidekiq
#2.通过gitlab-rake命令进行恢复
# gitlab-rake gitlab:backup:restore BACKUP=1596963023_2020_08_09_12.0.3
Restore task is done.
#3.重启gitlab,检查是否恢复完毕。
```
迁移的步骤:
1.备份旧gitlab
2.在新机器安装相同环境的gitlab
3.在新机器恢复旧gitlab的备份
4.验证数据的完整性
5.将域名解析到新的gitlab服务器地址
6.保留旧gitlab服务器一段时间,确认没问题,销毁。( 7-15天 )
升级的步骤:
1.gitlab的升级和其他的升级不一样。不支持跨域版本升级。只能小版本迭代。
gitlab-11版本-->gitlab-12版本,无法升级。
1.先升级到gitlab-11的最新版本--然后才能升级到gitlab-12版本,否则升级报错,然后提升不要跨域大版本升级。请先升级到某某版本。
1.先想办法升级到:gitlab-ce-11.9.9-ce.0.el7.x86_64.rpm
2.然后才能 升级到 gitlab-ce-12版本
想完成迁移并且升级:
1.先实现迁移:
2.然后进行小版本的升级迭代
3.最后在升级到你需要的那个版本。 记得备份一次。
![](https://img2020.cnblogs.com/blog/1275194/202011/1275194-20201119165428596-374799993.png)
![](https://img2020.cnblogs.com/blog/1275194/202011/1275194-20201119165439751-1117085015.png)