CICD01 Git, GitLab部署,数据备份和恢复 ubuntu使用
1 DevOps 简介
1.3 持续集成、持续交付和持续部署 CICD
CICD: 持续集成, 持续交付, 持续部署
1.6 常见的软件部署模式
生产中 蓝绿部署 和 金丝雀用的比较多
1.6.1 蓝绿部署 Blue-green Deployments
一个和生产环境一样的预发布环境, 和生产环境切换来升级。涉及到数据库,就不太好切换
1.6.2 金丝雀(灰度)发布 Canary Deployment
先让一部分用户先升级 (像支付宝有地区识别,可以让一些城市先试点。也可以根据用户级别来区分)
1.6.3 滚动发布(更新)
滚动发布即逐步升级服务中的节点
滚动发布是指每次只升级一个或多个服务实例,升级完成后加入生产环境,不断执行这个过程,直到集群中的全部旧版本升级新版本。
适合有实力的公司,大厂
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.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.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 使用 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等能统—执行各组件的重新配置及重启操作
内存最低 4g
3.2.1 安装方法
Linux 安装包:官方的 deb/rpm 安装包(也被称作 Omnibus GitLab)包含极狐GitLab 和依赖的组件,包括PostgreSQL、Redis 和 Sidekiq #推荐 Source:源码安装,在GitLab没有提供适用的安装包的平台上(例如各类BSD系统)只能采用这种 安装方式 #不推荐,里面的组件需要一个个安装 Docker:Docker 容器化的极狐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,下拉语言调成中文,保存修改
#创建用户 #点击左上角狐狸图标,添加人员 #点击左上角狐狸图标,创建群组 #可见度级别选私有,只有项目组的人才能看 #创建项目 #点击左上角狐狸图标,创建项目
备份
#备份配置文件命令 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
所有的还原都应该是停止在还原。例如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
迁移流程 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
注意:建议使用权威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路径)
#官方说明 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登录才可以