一、 运维发展过程
(一) 软件的声明周期: 软件从0---1->0过程
(二) ci-cd-co基础
1. ci/cd🌟🌟🌟🌟🌟
- ci cd
- 持续集成: 开发的代码集成到代码仓库。
- 持续交付: 从代码仓库拉取代码部署到测试环境。
- 持续部署: 从代码仓库拉取代码部署到生产环境。
2. DevOps 🌟🌟🌟🌟🌟
- DevOps: 理念让开发人员可以持续集成,运维人员可以持续交付和持续 部署.让整个开发过程自动部署,上线...
-
- 开发写完的代码自动集成,自动交付与部署。本质是 自动化。
- DevOps是一套快速、频繁、可靠的软件交付实践.
- DevOps
-
- Development 开发
- Operations 运维
- DevOPS目标是解决 开发书写代码,集成,交付,部署进度,审核缓慢.
- DevOPS实现
-
- 开发(存放收集代码 CI): git/gitlab/github/gitee( 代码平台)
- 安全:sonarqube ....
- 运维(部署代码 CD): jenkins maven ....插件 ... sonarqube (运维)
- DevSecOps
-
- Dev开发
- Sec Secure 安全
- Ops运维
3. 什么是环境 🌟🌟🌟🌟
- 开发环境
- 测试环境
- 预发布环境/准生产环境/预生产环境
- 生产环境
- 谁部署,谁维护/负责
准生产环境/预生产环境 | 生产环 境 | |
相同点 | 存放代码,服务配置与生产环境一致 | 存放代 码,...... |
区别 | 服务器的配置可以低一些,数量少一些,甚至省钱 可以用内部测试环境兼职 | |
⚠ 关于 数据库 | 连接生产环境数据库(从库),nginx镜像流量(alb 镜像流量) |
二、 Git极速入门到放弃
- Git部分目标:
-
- 掌握git基本应用拉取代码。
- 拉取指定版本代码。
- 理解什么是 分支。
角色 | 主机名 | ip | 内存 |
gitlab代码仓 库 | qinluo-devops gitlab | 10.0.0.71/172.16.1.71 | 2G(至 少) 推 荐 2C4G |
jenkins | qinluo-devops jenkins | 10.0.0.72/172.16.1.72 | 1G(至 少) 推 荐 2C4G |
sonarqube代码检查 | qinluo-devops sonar | 10.0.0.73/172.16.1.73 | 1c1G |
nexus私服 | qinluo-devops nexus | 10.0.0.74/172.16.1.74 | 1c1G |
(一) 什么是git
- scm
- 分布式版本控制系统
- 分布式: svn vs git
- 版本控制
- 软件
Git | SVN | |
共同 点 | 存放代码, 版本控制 | 存放代码, 版本控制 |
工作 模式 | 分布式(git代码仓库挂了,本地的 代码仍旧可以使用) | 中心化(权限集中) |
使用 | 入门较难,熟练后容易使用,目前 使用率高 | 入门比较简单,服务端linux, 客户端windows |
分支 | 创建和维护分支方便 | 创建和维护分支繁琐 |
1. 1分钟部署git
其他系统安装传送门--》Git - Reference
一、 Win
https://git-scm.com/download/
二、 Linux(CentOS/Fedora/Rocky Linux/RHEL)
#C7
yum install -y git
#c8
dnf install -y git #或yum也可以
三、 MacOS
#需要提前安装brew
brew install git
四、 Ubuntu/Debian
apt install -y git
2. 项目测试
一、 单枪匹马勇闯天涯-开发阶段 🌟🌟🌟🌟🌟
- git极速上手指南
#1.创建项目目录(代码目录)
mkdir -p /app/src/bugc-live
cd /app/src/bugc-live
/src/bugc-live]# ll -a
#2.对代码目录进行初始化(书写代码的时候)成为git仓库
##配置用户
git config
git config --global user.name 'qinluo'
git config --global user.email '918391635@qq.com'
git config --global color.ui true #增加一些提示颜色
git config --global --list
##初始化代码目录
git init
ll .git/
#3.书写代码 添加文件
echo qinluo >index.html
#查看状态 仓库状态
git status
#进行提交
git add .
git status
#提交到本地仓库
git commit -m '项目开始 完成60%'
名字 | 含义 |
git init | 初始化本地仓库目录,每个独立的代码目录(新的) 就要运行下. .git目录 |
git config -- global | 邮箱,用户名,颜色 全局 系统中设置1次即可 |
git add | 提交数据到缓冲区(暂存区) git add . (所有文件) 或 git add 文件 |
git commit | 把暂存区的数据提交到本地仓库 git commit -m "标记/说明" |
git status | 显示工作空间的状态 |
git log | 查看提交记录 |
git reflog | 查看提交记录 |
git reset | 回滚 |
git reset --soft cid(版本号) | 把指定的版本数据内容下载到暂存区 |
git reset HEAD | 暂存区--->工作空间(被修改的状态) |
git checkout | 文件下载到工作空间并可以使用 git checkout . 或 git checkout 文件 |
git reset --mix 版 本号 | |
git reset --hard 版本号 | 把本地仓库指定版本信息数据下载到工作目录中 |
三、 git分支 branch ⭐ ⭐ ⭐ ⭐
(一) 分支?branch
- 分支即是平行空间 , 假设你在为某个手机系统研发拍照功能,代码已经完 成了80%,但如果将这不完整的代码直接 提交到git仓库中,又有可能影响到其他人的工作,此时我们便可以在该软 件的项目之上创建一个名叫”拍照功 能”的分支,
- 这种分支只会属于你自己,而其他人看不到,等代码编写完成后再与原来 的项目主分支合并下即可,这 样即能保证代码不丢失,又不影响其他人的工作。
- 默认的分支-master 主分支,这个分支的代码一般都是可用,可以部署到生 产环境的。
- 一般开发人员开发代码的时候创建dev分支,shopping分支。
其他分支中的代码开发与测试完成要与主分支代码进行合并. 应用名称分支每个分支对应独立功能。
(三) 案例
- 创shopping 分支 书写代码
默认主分支,完成直播功能,并提交
echo 完成 >>index.html
git add .
git commit -m "直播功能完成 100%"
[master fddb08b] 直播功能完成 100%
1 file changed, 1 insertion(+)
- 创建shopping分支 书写代码
#查看分支
git branch
* master
#创建分支
git branch shopping
git branch
* master
shopping
#切换分支
git checkout shopping
Switched to branch 'shopping'
查看 切换结果 git branch
master
* shopping
#查看远程仓库地址
git remote -v
#书写shopping代码·并提交
echo 'shopping 90%' >shopping.html
git add .
git commint -m 'shopping 90%'
echo 'shopping 100%' >shopping.html
git add .
git commint -m 'shopping 100%'
#把 shopping分支合并到master分支中。
切换到master 然后执行merge.
git checkout master
git merge shopping
(四) git 分支命令总结
git 分支相关命令 | 说明 |
git branch | 查看分支 |
git branch name | 创建分支 |
git branch -d name | 删除分支 del |
git checkout 分支名 字 | 切换分支 |
git merge 分支名字 | 合并(吸收)分支(把指定的分支合并到当前分支 中) |
git checkout -b name | 创建分支并切换到这个分支 |
(五) tag标签
#创建标签
COMMITID的一个别名,COMMITID不好记忆, 标签相对的好记忆.
git tag -a "标签名称" -m "描述"
基于当前最新的COMMITID
git tag -a "标签名称" -m "描述" commitID
指定版本打标签
#如何上传标签
git push origin --tags
git push origin "标签名称"
Master: V1.0 V2.0
Dev: b1.0 b2.0
git clone -b 标签、分支 https/git
3. 入住CBD
- 家---->公司--->代码
- 家---->代码
- 公共仓库:gitee.com/github.com
- 私有仓库:gitlab,gogs
1. 创建仓库 私有的
2. linux创建秘钥
3. 公钥 配置到 gitee设置--->公钥中
4. linux执行git remote add origin 你仓库地址(记得是git开头的)
5. git push origin --all #推送所有
6 .去仓库检查
一、如何生成公钥
--》登录gitee--》点击头像--》账号设置--》SSH公钥流程(这里不细写了)
- 获取通过ssh密钥认证方式推拉代码的地址(git地址)
git clone 加上git上的地址
二、 进入代码目录检查结果 git remote
#检查命令
git remote -v
#删除添加的远程仓库地址
git remote remove origin
- 创建文件并准备上传到远程仓库
git config --global user.name 'mapper'
git config --global user.email '2494543852@qq.com'
echo mapper > new.html
git add .
git commit -m 'v3.0'
git push -u origin master
三、 远程仓库小结
代码仓库访问方法 | 说明 |
https或http | 每次连接的时候需要输入账号的用户名和密码 |
ssh | 必备常用. 密钥认证 |
#访问仓库的主机上 创建密钥对。
ssh-keygen
#修改之前配置的远程仓库地址
git remote rename origin origin_https
git remote -v
git remote add origin git@gitee.com:qinluo/qinluo_live.git #这里改为自己项目地址
#创建新的文件上传到远程仓库测试
touch qinluo.txt
git add .
git commit -m 'new file'
git tag -m "new file" -a "v2.0"
git push -u origin master
git push -u origin --tags
四、 git远程仓库命令小结
git远程仓库:
1.配置与远程仓库的认证
ssh√√√√√: 需要将服务器的公钥推送到指定用户下;
https:(私有) 需要有用户名称,密码,每次都需要输入;
2.添加远程仓库:
添加add
git remote add origin [https://或者git(ssh)]
删除remove
git remote remove orgin 即可
改名
git remove rename origin bak
3.将本地的仓库内容,推送到远程仓库:
git add .
git commit -m "Messages"
git push -u origin branch (分支名字) [ master | .... ]
git pull origin branch(分支名字)
4.如果有新员工加入
指定仓库的代码都下载
git clone [https://|git]
git push origin 分支名字
git pull origin --tags
(二) 总结
- git clone
- git add 与 git commit
- git push
- git remote add origin
- git remote remove
- git tag 标签
- 分支
- ci,cd,devops,DevSecOps
- 代码上线流程
1.git基础命令:
git clone
git add
git commit
git push
git pull #下载代码并合并到当前分支中 git fetch
git merge
git log
git reflog
git status #working
git branch
git checkout
git merge
git reset --hard
git remote add origin
git tag
2.重点掌握 git 分支
3.重点掌握 git 提交 | 获取 | 克隆
4.重点掌握 git区域
5.重点掌握 ci/cd devops
6.重点掌握 开发环境 测试环境 预生产环境 生产环境
gitlab 私有仓库 | gitee花钱 jenkins
https://oschina.gitee.io/learn-git-branching/
三、Gitlab
(一) Gitlab 快速上手指南
1. 麒麟系统部署 gitlab 15.9
通过百度网盘分享的文件:代码上线-DevOps大礼包
链接:百度网盘 请输入提取码
提取码:1234
#安装依赖
yum install -y policycoreutils-python-utils.noarch
#安装gitlab rpm包
rpm -ivh --nodeps gitlab-ce-15.9.3-ce.0.el7.x86_64.rpm
- 修改/etc/gitlab/gitlab.rb
然后修改/etc/gitlab/gitlab.rb 文件
external_url 'http://gitlab.qinluolinux.cn'
gitlab_rails['smtp_enable'] = false
gitlab_rails['gitlab_email_enabled'] = false
gitlab_rails['manage_backup_path'] = true
gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"
gitlab_rails['backup_archive_permissions'] = 0644
gitlab_rails['store_initial_root_password'] = true
gitlab_rails['registry_enabled'] = false
registry['enable'] = false
puma['ssl_listen'] = nil
puma['ssl_port'] = nil
puma['ssl_certificate'] = nil
puma['ssl_certificate_key'] = nil
puma['ssl_client_certificate'] = nil
puma['ssl_cipher_filter'] = nil
puma['ssl_verify_mode'] = 'none'
puma['exporter_enabled'] = false
postgresql['enable'] = true
postgresql['ssl'] = 'off'
redis['enable'] = true
nginx['enable'] = true
nginx['client_max_body_size'] = '250m'
nginx['redirect_http_to_https'] = false
nginx['redirect_http_to_https_port'] = 80
prometheus['enable'] = false
alertmanager['enable'] = false
node_exporter['enable'] = false
redis_exporter['enable'] = false
postgres_exporter['enable'] = false
gitlab_exporter['enable'] = false
grafana['enable'] = false
letsencrypt['enable'] = false
- 执行Reconfigure 并检查结果
gitlab-ctl reconfigure #根据/etc/gitlab/gitlab.rb 生成各个组件的配置文件.
- 完成后然后等待
- 首次登录密码在以下位置
- 检查状态
gitlab-ctl status #查看各个组件的状态
gitlab-ctl stop/start/restart
(二) 如何配置上传代码库
- git 从入门到放弃的项目案例中有写,,一样的方法
1. 创建仓库
2. 配置公钥
3. 推送数据(记得hosts解析)
(三) gitlab备份与恢复 🌟🌟🌟🌟 🌟
gitlab_rails['manage_backup_path'] = true
#是否可以指定备份目录
gitlab_rails['backup_path'] = "/var/opt/gitlab/backups" #备份目录
gitlab_rails['backup_archive_permissions'] = 0600
#备份的压缩包权限
gitlab_rails['backup_keep_time'] = 604800
#备份保留多久 7天
#gitlab备份 需要手动执行
- etc/gitlab/gitlab.rb 文件以下内容修改即可
gitlab_rails['manage_backup_path'] = true
gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"
gitlab_rails['backup_archive_permissions'] = 0644
- 配置生效
#配置生效
gitlab-ctl reconfigure
gitlab-ctl restart
[root@devops01 /server/src-code/mapper_live]#ll /var/opt/gitlab/backups -d
drwx------ 2 git root 60 8月 2 18:03 /var/opt/gitlab/backups
1. 手动备份
#GitLab 版本>=12.2
gitlab-backup create
#GitLab 版本<=12.1:
gitlab-rake gitlab:backup:create
不在展示备份过程
#备份完成,检查有个tar文件
[root@devops01 /server/src-code/mapper_live]#ll /var/opt/gitlab/backups
总用量 480
-rw-r--r-- 1 git git 491520 8月 2 17:57 1722592656_2024_08_02_15.9.3_gitlab_backup.tar
- 对于gitlab.rb 和gitlab-secrets.json包含敏感信息,需要手动 备份.
- 参考: https://docs.gitlab.com/ce/raketasks/backup_restore.html
2. 自动备份
#每天备份1次
#!/bin/bash
#author :qinluo
#desc : backup gitlab all
#1.备份gitlab数据
gitlab-backup create
#2.备份gitlab配置和密码文件
tar zcf /backup/gitlab/gitlab-conf-$(date +%F).tar.gz /etc/gitlab/
#3. 传输到备份服务器
#写入定时任务
00 03 * * * sh /server/scripts/backup-gitlab.sh
&>/dev/null
3. 恢复
1. 停止写入类服务
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
#新版本GitLab 版本>=12.2:
gitlab-backup restore
BACKUP=11493107454_2018_04_25_15.9.3
#旧版本GitLab 版本<=12.1:
gitlab-rake gitlab:backup:restore BACKUP=备份文件名字
不包含右边内容_gitlab-backup.tar
#正式举例
gitlab-rake gitlab:backup:restore BACKUP=1656036972_2022_06_24_12.0.9
Do you want to continue (yes/no)? yes 输入yes
Do you want to continue (yes/no)? yes 输入yes
3. 重启 gitlab
gitlab-ctl restart
(四) 修改偏好以及添加秘钥 和修改密码
- 直接修改一下位置的密码即可
(五) 迁移与升级
#1. 新功能,非常吸引
#2. 修复bug,漏洞
#3. 公司制定,统一版本.为了标准化,自动化
- gitlab升级的要求。
需要遵循以下升级步骤以确保主版本升级成功:
1.升级至之前主要版本的最新次要版本。
2.升级到目标主要版本的第一个次要版本(X.0.Z)。
3.继续升级到较新的版本。
(六) Https
为了防止内网渗透,将gitlab服务的访问添加了ssl,具体步骤如下:
1.gitlab配置https(请先做个快照.)
#修改的内容
external_url 'https://gitlab.qinluo.top'
nginx[' enable' ] = true
nginx['client_max_body_size' ]= '250m '
nginx['redirect_http_to_https' ]= true
nginx[' redirect_http_to_https _port' ] = 443
nginx['ssl_certificate' ] = "path/ key.crt"
nginx['ssl_certificate_key'] = "path/ key.key"
nginx['ssl_ciphers' ] ="ECDHE-RSA-AES256-GCM
SHA384:ECDHE-RSA-AES128-GCM-SHA256"
nginx['ssl_prefer_server_ciphers']= "on"
nginx['ssl_protocols']= "TLSv1.2"
nginx['ssl_session_cache ' ] =
"builtin:1000shared:sSL: 10m"
nginx['ssl_session_timeout']= "5m"
核心:
nginx['ssl_certificate' ] =用于指定证书 .crt .pem
nginx['ssl_certificate_key'] = 用于指定私钥 .key
2.gitlab重新初始化
gitlab-ctl reconfigure
重建配置:
gitlab-ctl restart
(七) 邮件
1. 配置邮箱 (发件人) (选作)
- 注册的时候 Gitlab 服务器,给用户发送邮件,激活 或者找回密码
- 用提交合并请求的时候,负责人可以收到邮件通知
##配置发件人
51 ### Email Settings
52 gitlab_rails['gitlab_email_enabled'] = true
53 gitlab_rails['gitlab_email_from'] = 'qinluo@163.com'
54 gitlab_rails['gitlab_email_display_name'] = 'qinluo_gitlab_tongzhi'
##配置详细发件人信息
513 ### GitLab email server settings
514 ###! Docs: https://docs.gitlab.com/omnibus/settings/smtp.html
515 ###! **Use smtp instead of sendmail/postfix.**
517 gitlab_rails['smtp_enable'] = true
518 gitlab_rails['smtp_address'] = "smtp.163.com"
519 gitlab_rails['smtp_port'] = 465
520 gitlab_rails['smtp_user_name'] = "qinluo@163.com"
521 gitlab_rails['smtp_password'] = "????授权码"
522 gitlab_rails['smtp_domain'] = "163.com"
523 gitlab_rails['smtp_authentication'] = "login"
524 gitlab_rails['smtp_enable_starttls_auto'] = true
525 gitlab_rails['smtp_tls'] = true
gitlab-ctl reconfigure
gitlab-ctl restart
2. 验证Gitlab组件 (选作 配置了邮箱)
gitlab-rails console 回车
Notify.test_email('收件人','主题','内容').diliver_now
Notify.test_email('youjiu_linux@qq.com','Gitlab
test','测试').diliver_now
gitlab-rails c
Notify.test_email('收件人邮箱','Gitlab-test','测试').diliver_now
Notify.test_email('qinluo@qq.com','Gitlab-test','测试').diliver_now
(八) 优化
- 即只开启部分组件
## 优化暂时不用组件 (选作)
#关闭目前不使用的组件 默认都是true 修改为 false
#关闭prometheus
1385 prometheus['enable'] = false
1386 prometheus['monitor_kubernetes'] = false
#关闭alertmanger
1452 alertmanager['enable'] = false
#关闭exporter 如果需要prometheus监控 则可以打开。
1474 node_exporter['enable'] = false
1493 redis_exporter['enable'] = false
1511 postgres_exporter['enable'] = false
1540 gitlab_monitor['enable'] = false #gitlab_exporter
1553 prometheus_monitoring['enable'] = false
1560 grafana['enable'] = false