CICD01 Git, GitLab部署,数据备份和恢复 ubuntu使用

版本管理系统 Git 和 GitLab

1 DevOps 简介

1.3 持续集成、持续交付和持续部署 CICD

CICD: 持续集成, 持续交付, 持续部署

1.6 常见的软件部署模式

生产中 蓝绿部署 和 金丝雀用的比较多

1.6.1 蓝绿部署 Blue-green Deployments

一个和生产环境一样的预发布环境, 和生产环境切换来升级。涉及到数据库,就不太好切换

1.6.2 金丝雀(灰度)发布 Canary Deployment

先让一部分用户先升级 (像支付宝有地区识别,可以让一些城市先试点。也可以根据用户级别来区分)

1.6.3 滚动发布(更新)

滚动发布即逐步升级服务中的节点

滚动发布是指每次只升级一个或多个服务实例,升级完成后加入生产环境,不断执行这个过程,直到集群中的全部旧版本升级新版本。

1.6.4 A/B测试 A/B Testing

适合有实力的公司,大厂

2个团队做两个软件,同时放到市场上竞争,好的那个留下来

 

2 版本控制系统 Git

2.3 Git 安装

2.3.1 Linux 安装 git

#官网
https://git-scm.com/download/linux

如果要安装最新版,添加仓库
#范例: Ubuntu 安装最新版
[root@ubuntu1804 ~]#add-apt-repository ppa:git-core/ppa
[root@ubuntu1804 ~]#apt update
[root@ubuntu1804 ~]#apt -y install git

范例

#当前文件夹初始化
]#git init    

#配置git使用用户 (global:同一个系统用户,所有项目都用这个用户) #推荐用global
[root@git ~]#git config --global user.name "qls"
#local:设置的名字只针对这个项目有效
[root@git ~]#git config --local user.name "qls"

#查看当前git用户
]#git config --global -l

#为了避免重名,设置邮箱
[root@git ~]# git config --global user.email 123@qq.com

#添加所有文件到暂存区
]#git add .    

#查看状态
]#git status

#提交
]#git commit -m 'first file'

#查看状态
]#git status

#老文件可以同时添加到暂存区和提交(新文件只能先add后commit)
]#git commit -am 'line2'

2.4.2.3 设置忽略文件

2.4.2.4 将文件加入暂存区再取消添加

#查看暂存区文件
[root@gitlab testproject]#git ls-files
f1.txt

#从暂存区删除
#方法1
[root@gitlab testproject]#git rm --cached f1.txt
#方法2
[root@gitlab testproject]#git restore --staged f1.txt

2.4.2.6 利用暂存区恢复误删除的工作区文件

#从暂存区复制文件到工作目录
[root@gitlab testproject]#git checkout test.txt

2.4.2.7 同时删除工作区和暂存区 (了解)

#同时删除工作区和暂存区文件
[root@gitlab testproject]#git rm -f f2.txt

2.4.2.9 多次提交后回滚至指定提交的版本

2.4.2.9.1 git reset

--soft  #工作目录和暂存区都不会被改变,只是本地仓库中的文件回滚到指定的版本,仅移动HEAD和master指针的指向,不会重置暂存区或工作区
--mixed #默认选项。回滚暂存区和本地仓库,但工作目录不受影响
--hard  #本地仓库,暂存区和工作目录都回滚到指定的提交,该选项非常危险

2.4.2.9.2 git revert

虽然也是回退,但是在log记录中作为下一个版本,合并不会冲突。上面的git reset合并会有分支冲突

git revert 用法

git revert HEAD           #撤销前一次commit,会交互式打开文本编辑器提示输入提交信息
git revert HEAD --no-edit #非交互式撤销前一次提交
git revert HEAD^ #撤销前前一次commit
git revert <commitid> #撤销指定的版本,撤销也会作为一次提交进行保存。

reset和revert区别

git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit。
git reset是把HEAD向后移动了一下,而git revert是HEAD继续前进,只是新的commit的内容跟要
revert的内容正好相反,能够抵消要被revert的内容。

2.4.2.10 创建分支和合并分支

#查看所有分支情况
[root@ubuntu2204 myai]#git log --pretty --oneline --graph --all

2.5 公有云仓库

2.5.2 使用 gitee

注: 网上拉取项目时,实际上所有分支都有了,git branch --all 可以看到。git pull 能拉取所有分支

注: github访问困难,码云上可以导入github仓库(等于于码云去github拉代码),然后从码云上拉代码

 

3 私有软件仓库 GitLab

3.1 GitLab 介绍

Gitlab 是一个由很多应用组成复杂的系统 
由于Gitlab 组件众多,各个组件的分别管理配置过于复杂,所以官方提供了 Omnibus GitLab 项目实现方便 的管理  
管理各组件使用统一命令为gitlab-ctl,例如gitlab-ctl reconfigure或gitlab-ctl restart等能统—执行各组件的重新配置及重启操作 

3.2 GitLab 安装

内存最低 4g

3.2.1 安装方法

Linux 安装包:官方的 deb/rpm 安装包(也被称作 Omnibus GitLab)包含极狐GitLab 和依赖的组件,包括PostgreSQL、Redis 和 Sidekiq    #推荐
Source:源码安装,在GitLab没有提供适用的安装包的平台上(例如各类BSD系统)只能采用这种
安装方式 #不推荐,里面的组件需要一个个安装
Docker:Docker 容器化的极狐GitLab 软件包 #不推荐,有性能损耗

3.2.4 GitLab 安装

#文档,包含安装方式
https://docs.gitlab.com/ce/install/
#官方gitlab 包下载链接
https://packages.gitlab.com/gitlab
#yum源清华大学下载地址:
https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/
#Ubuntu 的deb源
https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/ubuntu/pool/

范例:Ubuntu 国内镜像下载并安装 GitLab

[root@gitlab ~]#wget https://mirrors.tuna.tsinghua.edu.cn/gitlabce/ubuntu/pool/bionic/main/g/gitlab-ce/gitlab-ce_16.9.1-ce.0_amd64.deb
[root@gitlab ~]#dpkg -i gitlab-ce_16.9.1-ce.0_amd64.deb

#设置外部访问的url地址(写ip也可以)
[root@gitlab ~]#vim /etc/gitlab/gitlab.rb
external_url 'http://gitlab.wang.org'
#里面有些组件用不到,如Prometheus可以配置里关掉 prometheus['enable'] = false

#本机域名做好也加上,有时候需要通过本机域名来访问自己
[root@gitlab ~]#vim /etc/hosts
10.0.0.151 gitlab.wang.org

#当前配置生效,里面各个服务生成对应配置文件,并启动
[root@gitlab ~]#gitlab-ctl reconfigure

#验证 GitLab 启动完成
[root@gitlab ~]#gitlab-ctl status

#浏览器登录,并修改密码(用户图标下edit profile) 1U4JwKBJPvAkXv7Eln7KCIw7hd/Z4PFpfQ3EuqiFRv8=
http://10.0.0.151/
#用户名root, 密码在 /etc/gitlab/initial_root_password (也可以在配置里修改初始化密码)

#关闭注册功能
#登录上方提示检查注册限制,点击deactivate,消掉Sign-up enabled上的勾(Sign-in是登录,别搞错)
#点击save changes

#修改语言
#用户图标下preferences,下拉语言调成中文,保存修改

3.4 GitLab 用户和组管理

#创建用户
#点击左上角狐狸图标,添加人员

#点击左上角狐狸图标,创建群组
#可见度级别选私有,只有项目组的人才能看

#创建项目
#点击左上角狐狸图标,创建项目

3.6 GitLab 的数据备份和恢复 (重点)

备份

#备份配置文件命令
gitlab-ctl backup-etc --backup-path <DIRECTORY>
#如果不指定--backup-path <DIRECTORY>,则默认备份至/etc/gitlab/config_backup/
#本质上就是打包/etc/gitlab下的文件,相当于 tar cf /root/gitlab-conf.tar /etc/gitlab
#范例:备份配置文件命令
[root@ubuntu1804 ~]#gitlab-ctl backup-etc
#生成 gitlab_config_1730630600_2024_11_03.tar

#手动备份数据(尽量在没人用时做,别人没上传代码,定时任务半夜2点之类)
#GitLab 12.2之后版本
gitlab-backup create
#GitLab 12.1之前版本
gitlab-rake gitlab:backup:create
#查看 /etc/gitlab/gitlab.rb 默认备份路径
#gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"

#生成 1730631102_2024_11_03_16.9.1_gitlab_backup.tar

3.6.5 执行恢复

所有的还原都应该是停止在还原。例如mysql,否则还原数据和使用会有干扰

#查看状态
gitlab-ctl status

#恢复前先停止两个服务(停完,gitlab拒绝用户访问)
[root@ubuntu1804 ~]#gitlab-ctl stop puma
[root@ubuntu1804 ~]#gitlab-ctl stop sidekiq

#恢复时指定备份文件的时间部分,不需要指定文件的全名
#gitlab-backup restore BACKUP=备份文件名的时间部分_Gitlab版本
[root@ubuntu1804 ~]#gitlab-backup restore BACKUP=1730631102_2024_11_03_16.9.1
Do you want to continue (yes/no)? yes

#应用下配置
[root@ubuntu1804 ~]#gitlab-ctl reconfigure
#启动服务
[root@ubuntu1804 ~]#gitlab-ctl restart

3.8 GitLab 迁移和升级

迁移流程
1.在原GitLab主机上备份配置文件和数据
2.在目标主机上安装相同的版本的GitLab软件
3.还原配置和数据
4.本质上就是备份和恢复的过程
升级流程
1.如果新主机,需要先安装原版本,并还原配置和数据 #这样不影响原来机器使用,安全
2.不能直接跳过中间的版本直接升级,选择最近的大版本进行升级
比如:12.1想升级到13.0,先升级到12.X最高版,再升级到13.0.
3.下载新版本的安装包,直接安装包
4.安装包时可能会提示出错,原因是版本升级后有些配置项会过时,根据提示修改配置即可
5.重新配置: gitlab-ctl reconfigure
6.重启服务: gitlab-ctl restart

3.9 实现 Https

注意:建议使用权威CA颁发的证书,自签名的证书需要加入信任,否则会导致后续git clone等操作失败

#一般在内网使用,不用https,这里用自签证书做范例
#创建证书
[root@gitlab ~]#mkdir -p /etc/gitlab/ssl && cd /etc/gitlab/ssl
[root@gitlab ssl]#openssl genrsa -out gitlab.wang.org.key 2048
#网页为gitlab.wang.org,这个不能写错
[root@gitlab ssl]#openssl req -days 3650 -x509 \
-sha256 -nodes -newkey rsa:2048 -subj
"/C=CN/ST=beijing/L=beijing/O=wang/CN=gitlab.wang.org" -keyout gitlab.wang.org.key -out gitlab.wang.org.crt

#修改配置文件的如下内容
[root@gitlab ~]# vim /etc/gitlab/gitlab.rb
external_url "https://gitlab.wang.org" #此项必须修改为https,必选项
nginx['enable'] = true  #可选
nginx['client_max_body_size'] = '1000m' #可选(最大上传文件大小)
nginx['redirect_http_to_https'] = true
nginx['redirect_http_to_https_port'] = 80 #可选,所有请求80的都跳转到443,默认值,可不修改,保持注释状态
nginx['ssl_certificate'] ="/etc/gitlab/ssl/gitlab.wang.org.crt"   #必选项
nginx['ssl_certificate_key'] ="/etc/gitlab/ssl/gitlab.wang.org.key"   #必选项

#重新初始化
[root@gitlab ~]# gitlab-ctl reconfigure
[root@gitlab ~]# gitlab-ctl restart
[root@gitlab ~]# gitlab-ctl status

#还登录原来的URL,会自动跳转到 https

#注:如果使用互联网颁发的CA证书,那么git clone https下载没问题,如用自签名的证书,会报错本地没有该证书
#自签名解决方法,把自签证书内容拷贝到自己的ca证书内,再git clone就不会报错了
[root@gitlab ~]#cat /etc/gitlab/ssl/gitlab.wang.org.crt 
[root@gitlab ~]#vim /etc/ssl/certs/ca-certificates.crt    #拷贝在最下面(这里是ubuntu路径)

3.10 找回 GitLab 忘记的密码

#官方说明
https://docs.gitlab.com/ee/security/reset_user_password.html#reset-the-root-passwor

#范例: 
#打开控制台
[root@gitlab ~]#gitlab-rails console -e production
#此步可能比较慢,需要等一段时间

#输入下面指令
#方法1(如果用户名没改,查root)
irb(main):001:0> user = User.find_by_username 'root'
#方法2(直接查root账户)
irb(main):001:0> user = User.where(id: 1).first
=> #<User id:1 @root>    #说明用户名还叫root

#更改密码并确认密码  wang@123
irb(main):002:0> user.password="wang@123"
=> "wang@123"
irb(main):003:0> user.password_confirmation="wang@123"
=> "wang@123"
#保存
irb(main):004:0> user.save
=> true

#退出控制台
irb(main):005:0> quit

#验证用新密码登录,注意:要使用external_url对应的URL登录才可以

 

 

posted @ 2024-11-13 21:00  战斗小人  阅读(7)  评论(0编辑  收藏  举报