代码上线之git

1.运维发展过程

2.ci-cd -co

2.1:软件的生命周期

      立项 ---->开发---->运维---->消亡

2.2:ci/cd 🌟🌟🌟🌟🌟

      ●  ci cd
      ● 持续集成
      ●  持续交付
      ●  持续部署
2.3  DevOps 🌟v 🌟🌟🌟🌟
     ● DevOps : 理念让开发人员可以持续集成,运维人员可以持续交付和持续部署.让整个开发过程自动部署,上线...
             ○  DevOps是一套快速、频繁、可靠的软件交付实践.
             ○ Development 开发
     ● Operation 运维
     ● DevOPS目标是解决 开发书写代码,集成,交付,部署进度,审核缓慢.
     ● DevOPS实现
            ○  开发: git/gitlab/github/gitee(代码平台) sonarqube (运维) appscan(安全检查)
            ○ 运维: jenkins maven ....插件 ...
●   对运维的理解/DevOps的理解:
       ○ 理念让开发人员可以持续集成,运维人员可以持续交付和持续部署.让整个开发过程自动部署,上线...
       ○  DevOps是一套快速、频繁、可靠的软件交付实践.
       ○  CI 持续集成 git svn/gitlab/gitee/github/
       ○  CD 持续交付 sonarqube(质量检查 ) appscan (安全检查)
       ○  CD 持续部署 jenkins docker k8s 
●   DevSecOps
       ○  DEV 开发
       ○  SEC 安全 appscan (安全检查代码应用) nessus(系统和服务漏洞)
       ○ Ops 运维
2.4 代码部署
●  代码发布/部署--->开发书写的程序代码---->部署测试/生产环境 web服务器(站点目录中
  

2.5  代码发布方式

发布方式 效率 干扰 安全性
手动发布 干扰因素很多 不安全
自动发布 干扰因素很少 安全

 1)手动

       ●  手动发布有如下几种方式

               ○ 方案一:  拿到代码,开发通过QQ,微信发送代码压缩包,rz上传,解压部署

               ○  方案二: 代码上传到web服务器上边

                         ■  scp/rsync 方式上线代码

                         ■  xftp/ftp 方式上线代码

      ●  方案三:登录代码托管平台  手动执行 git pull .

      ●   手动上线方案缺点

              ○  1.全程运维参与,占用大量时间。

              ○   2.如果节点多,上线速度慢。

              ○   3.人为失误多,目录管理混乱。。

              ○   4.回滚不及时,或者难以回退。
2)自动
前置概念: 持续集成,持续交付,持续部署
    ●      持续集成git gitlab/gitee/github/.... ci
    ●      持续交付:cd sonarqube jenkins代码质量检查
    ●      持续部署:cd jenkins maven ....
常用发布策略: 目标尽量不影响用户使用的前提下,完成测试并完成发布
    ●     一刀切,整体停止访问进行测试与更新. (网站维护中,更新所有web并测试)
    ●     蓝绿发布: web服务器分为2各部分先更新1, 然后测试,然后接入负载均衡,再更新另外一组.
    ●   金丝雀发布(灰度发布) 滚动发布 (分组, 调整权重)
3.持续集成
 
1.什么是集成?
 在说持续集成前,我们先了解下什么是 “集成”。在实际的软件开发中,常常会有如下两种场景:
      1.现在有一个电商平台需要开发,由于平台需要开发的某块较多,此时就需要不同的开发人员开发不同的某块,最后将所有人开发好的代码集成到一个系统中。集成完毕后需要对其进行部署上线。
      2.随着时间的推移,该系统无论是bug修复、还是新功能开发,后续都需要对系统进行不断的更新迭代。了解了 “集成” 的概念之后,“持续集成” 的概念就好理解了。
2.什么是持续集成?
持续集成指的是,频繁地(一天多次)将代码集成到主干。 (PS: 重复如上集成的工作)
3.使用持续集成带来的好处?
  1)快速发现错误。(每完成一点更新,就集成到主干,可以快速发现错误,定位错误也比较容易。)
  2)节省人力成本。
  3)加快软件开发进度。
  4)实时交付
4.持续集成的目的?
  让产品可以快速迭代,同时还能保持高质量。
  它的核心措施是,代码集成到主干之前,先进行自动化测试。只要有一个测试用例失败,就不能集成,当然持续集成并不能完全的消除Bug,而
  是让它们非常容易发现和改正。
5.什么情况下需要使用持续集成?
  如果项目开发的规模比较小,软件集成不是问题。
  但是如果项目很大,需要不断添加新功能,或不断的升级产品、则需要进行反复集成,这个时候就需要用到持续集成来简化我们的工作。
  #3.什么是持续交付
    持续交付指的是在持续集成的环境基础之上,将代码部署到预生产环境。
    持续交付:代码开发->单元测试->合并代码-->测试-->手动-->部署到生产
  #4.什么是持续部署
    持续部署是持续交付的下一步,指代码在任何时刻都是可部署的,最后将部署到生产环境的过程自动化。
    持续部署和持续交付的区别就是最终部署到生产环境是自动化的
       持续部署:代码开发->单元测试->合并代码-->测试-->自动-->部署到生产
6.持续集成实施流程
5.1 第一步、提交代码
      开发者向代码仓库提交代码。所有后面的步骤都始于本地代码的一次提交( commit ) 。
5.2 第二步、测试(第一轮)
       代码仓库对commit操作配置了钩子( hook ),只要提交代码或者合并进主干,就会跑自动化测试。
测试有分
      为如下几种:PS:第一轮跑单元测试
              单元测试∶针对函数或模块的测试
              集成测试∶针对整体产品的某个功能的测试,又称功能测试端对端测试∶从用户界面直达数据库的全链路测试
5.3 第三步、构建
      编译也称为构建,指的是将源码转换为可以运行的实际代码,比如安装依赖,配置各种资源(样式表、JS脚本、图片)等等。
5.4 第四步、测试(第二轮)
       构建完成,就要进行第二轮全面测试,单元测试和集成测试都会跑,有条件的话,也要做端对端测试。所有测试以自动化为主,少数无法自动化
的测试用例,就要人工跑。
       PS∶需要强调的是,新版本的每一个更新点都必须测试到。如果测试的覆盖率不高,进入后面的部署阶段后,很可能会出现严重的问题。
5.5 第五步、部署
       通过了第二轮测试,当前代码就是一个可以直接部署的版本oldboy。将这个版本的所有文件打包存档,发到生产服务器。生产服务器将打包文
件,解包成本地的一个目录,再将运行路径的“符号链接”`指向这个目录,然后重新启动应用。这方面的部署工具有Shell、Ansible、
SaltStack。
5.6 第六步、回滚
       一旦当前版本发生问题,就要回滚到上一个版本的构建结果。最简单的做法就是修改一下符号链接,指向上一个版本的目录。然后重新启动应用
即可。
6. Git 极速入门
6.1 什么是git
      ●  分布式版本控制系统
      ●  分布式: svn vs git
      ●  版本控制: lidao-论文-v1.docx lidao-论文-v2.docx lidao-论文-v3-最终版.docx lidao-论文-v9.最终不能修改版本.docx ...
      ●  软件
 
Git
SVN 
共同点
存放代码,版本控制 存放代码,版本控制
工作模式 分布式 中心化(权限集中)
使用
入门较难,熟练后容易使用,目前使用率高 入门比较简单,服务端linux,客户端windows 
分支
创建和维护分支方便 创建和维护分支繁琐 
 
6.2 应用场景
1) Win
https://git-scm.com/download/
2) Linux(CentOS/Fedora/Rocky Linux/RHEL)
 #C7  
 yum install -y git
 #c8 
 dnf install -y git
3) MacOS
#需要提前安装brew
brew install   git
4) Ubuntu/Debian
apt install   -y   git
7.1单枪匹马游山玩水-开发阶段 🌟🌟🌟
 1 #创建项目目录(代码目录) #成为git仓库
 2 #配置用户
 3 git config 
 4 git config --global user.name 'oldboy'
 5 git config --global user.email '918391635@qq.com'
 6 git config --global color.ui true
 7 git config --global --list
 8 [root@devops-gitlab ~]# cat .gitconfig
 9 [user]
10  name = oldboy
11  email = youjiu_linux@qq.com
12 [color]
13  ui = true
14 #创建代码目录
15 mkdir -p /app/src/
16 cd /app/src/
17 mkdir lidao-G
18 cd lidao-G/
19 # 对目录进行初始化
20 [root@devops-gitlab /app/src/lidao-G]# git init 
21 Initialized empty Git repository in /app/src/lidao-G/.git/
22 [root@devops-gitlab /app/src/lidao-G]# ll .git/
23 total 12
24 drwxr-xr-x 2 root root   6 Feb 10 11:08 branches
25 -rw-r--r-- 1 root root  92 Feb 10 11:08 config
26 -rw-r--r-- 1 root root  73 Feb 10 11:08 description
27 -rw-r--r-- 1 root root  23 Feb 10 11:08 HEAD
28 drwxr-xr-x 2 root root 242 Feb 10 11:08 hooks
29 drwxr-xr-x 2 root root  21 Feb 10 11:08 info
30 drwxr-xr-x 4 root root  30 Feb 10 11:08 objects
31 drwxr-xr-x 4 root root  31 Feb 10 11:08 refs
32 #书写代码 #添加文件
33 [root@devops-gitlab /app/src/lidao-G]# touch oldboy-lidao-live.green 
34 #查看状态
35 [root@devops-gitlab /app/src/lidao-G]# git status 
36 # On branch master
37 #
38 # Initial commit
39 #
40 # Untracked files:
41 #   (use "git add <file>..." to include in what will be committed)
42 #
43 # oldboy-lidao-live.green
44 nothing added to commit but untracked files present (use "git add" to track)
45 #进行添加 到缓冲区
46 git add oldboy-lidao-live.green
47 git status
48 #进行提交 到本地仓库
49 [root@devops-gitlab /app/src/lidao-G]# git commit -m '直播功能90%'
50 [master (root-commit) 075e05b] 直播功能90%
51 1 file changed, 0 insertions(+), 0 deletions(-)
52  create mode 100644 oldboy-lidao-live.green
53 [root@devops-gitlab /app/src/lidao-G]# 
54 [root@devops-gitlab /app/src/lidao-G]# 
55 [root@devops-gitlab /app/src/lidao-G]# 
56 [root@devops-gitlab /app/src/lidao-G]# git status 
57 # On branch master
58 nothing to commit, working directory clean
59 #进行回滚
60 [root@devops-gitlab /app/src/lidao-G]# \rm -f oldboy-lidao-live.green 
61 [root@devops-gitlab /app/src/lidao-G]# 
62 [root@devops-gitlab /app/src/lidao-G]# ll
63 total 0
64 [root@devops-gitlab /app/src/lidao-G]# 
65 [root@devops-gitlab /app/src/lidao-G]# git reset --hard 075e
66 HEAD is now at 075e05b 直播功能90%
67 [root@devops-gitlab /app/src/lidao-G]# ll
68 total 0
69 -rw-r--r-- 1 root root 0 Feb 10 11:47 oldboy-lidao-live.green
70 [root@devops-gitlab /app/src/lidao-G]# git log 
71 commit 075e05b7e4616813a3d9b740701cb1cc060c3df6
72 Author: oldboy <youjiu_linux@qq.com>
73 Date:   Thu Feb 10 11:21:39 2022 +0800
74   直播功能90%

总结:

名字 含义
git init
初始化本地仓库目录 
git config --global 邮箱,用户名,颜色
git add  提交数据到缓冲区
git commit
把暂存区的数据提交到本地仓库 git commit -m "标记/说明
git status 
显示工作空间的状态 
git reset 
回滚 
git reset --soft cid(版本号) 
把指定的版本数据内容下载到暂存区 
git reset HEAD 
暂存区--->工作空间(被修改的状态) 
git checkout 
文件下载到工作空间并可以使用 git checkout . 或 git checkout 文件 
 reset --mix 版本号 
 
git reset --hard 版本号 
把本地仓库指定版本信息数据下载到工作目录中 
 
7.2 git区域 与 状态 🌟 🌟
 
7.2 git分支 branch ⭐⭐⭐⭐
1) 分支?branch
      分支即是平行空间,假设你在为某个手机系统研发拍照功能,代码已经完成了80%,但如果将这不完整的代码直接
提交到git仓库中,又有可能影响到其他人的工作,此时我们便可以在该软件的项目之上创建一个名叫”拍照功
能”的分支,
      这种分支只会属于你自己,而其他人看不到,等代码编写完成后再与原来的项目主分支合并下即可,这
样即能保证代码不丢失,又不影响其他人的工作。
master 主分支
      应用名称分支每个分支对应独立功能
2) 详解 

3) 案例
 1 #查看分支 
 2 git branch 
 3 #创建分支 
 4 git branch shopping 
 5 #切换分支 git checkout shopping 
 6 
 7 #修改代码 增加购物功能
 8 
 9  [root@devops-gitlab /app/src/lidao-G]# git branch 
10 * master
11 [root@devops-gitlab /app/src/lidao-G]# git branch shopping 
12 [root@devops-gitlab /app/src/lidao-G]# git branch 
13 * master
14  shopping
15 [root@devops-gitlab /app/src/lidao-G]# git checkout shopping 
16 Switched to branch 'shopping'
17 [root@devops-gitlab /app/src/lidao-G]# git branch 
18  master
19 * shopping
20 [root@devops-gitlab /app/src/lidao-G]# ll
21 total 4
22 -rw-r--r-- 1 root root 17 Feb 10 12:28 oldboy-lidao-live.green
23 [root@devops-gitlab /app/src/lidao-G]# vim oldboy-lidao-live.green 
24 [root@devops-gitlab /app/src/lidao-G]# git status 
25 # On branch shopping
26 # Changes not staged for commit:
27 #   (use "git add <file>..." to update what will be committed)
28 #   (use "git checkout -- <file>..." to discard changes in working directory)
29 #
30 # modified:   oldboy-lidao-live.green
31 #
32 no changes added to commit (use "git add" and/or "git commit -a")
33 [root@devops-gitlab /app/src/lidao-G]# git add .
34 [root@devops-gitlab /app/src/lidao-G]# git commit -m '购物功能90%'
35 [shopping d4211a5] 购物功能90%
36 1 file changed, 1 insertion(+)
37 [root@devops-gitlab /app/src/lidao-G]# 
38 [root@devops-gitlab /app/src/lidao-G]# 
39 [root@devops-gitlab /app/src/lidao-G]# 
40 [root@devops-gitlab /app/src/lidao-G]# cat oldboy-lidao-live.green 
41 [root@devops-gitlab /app/src/lidao-G]# cat oldboy-lidao-live.green 
42 功能开发100%
43 购物功能 90%
44 [root@devops-gitlab /app/src/lidao-G]# git branch 
45  master
46 * shopping
47 [root@devops-gitlab /app/src/lidao-G]# git checkout master 
48 Switched to branch 'master'
49 [root@devops-gitlab /app/src/lidao-G]# cat oldboy-lidao-live.green 
50 功能开发100%
51 [root@devops-gitlab /app/src/lidao-G]# 
52 #合并分支
53 git merge  #把指定的分支合并到当前的分支中
54 [root@devops-gitlab /app/src/lidao-G]# git branch 
55  master
56 * shopping
57 [root@devops-gitlab /app/src/lidao-G]# git checkout master 
58 Switched to branch 'master'
59 [root@devops-gitlab /app/src/lidao-G]# git branch 
60 * master
61  shopping
62 [root@devops-gitlab /app/src/lidao-G]# git merge shopping   -m "直播功能 100% + 购物功能 100%"
63 Updating 60b94db..aadc6b3
64 Fast-forward (no commit created; -m option ignored)
65  oldboy-lidao-live.green | 1 + 1 file changed, 1 insertion(+)
66 [root@devops-gitlab /app/src/lidao-G]# 
67 [root@devops-gitlab /app/src/lidao-G]# 
68 [root@devops-gitlab /app/src/lidao-G]# 
69 [root@devops-gitlab /app/src/lidao-G]# ll
70 total 4
71 -rw-r--r-- 1 root root 35 Feb 10 12:40 oldboy-lidao-live.green
72 [root@devops-gitlab /app/src/lidao-G]# cat oldboy-lidao-live.green 
73 功能开发100%
74 购物功能 100%
75 [root@devops-gitlab /app/src/lidao-G]#
 
●  临时分支 比如fixbug/hotfix 分支 
 
 1 [root@devops-gitlab /app/src/lidao-G]# git branch fixbug 
 2 [root@devops-gitlab /app/src/lidao-G]# git branch 
 3  fixbug
 4 * master
 5  shopping
 6 [root@devops-gitlab /app/src/lidao-G]# git checkout fixbug 
 7 Switched to branch 'fixbug'
 8 [root@devops-gitlab /app/src/lidao-G]# ll
 9 total 4
10 -rw-r--r-- 1 root root 35 Feb 10 12:40 oldboy-lidao-live.green
11 [root@devops-gitlab /app/src/lidao-G]# vim oldboy-lidao-live.green 
12 [root@devops-gitlab /app/src/lidao-G]# vim oldboy-lidao-live.green 
13 [No write since last change]
14 No manual entry for 购物功能
15 shell returned 16
16 Press ENTER or type command to continue
17 [root@devops-gitlab /app/src/lidao-G]# 
18 [root@devops-gitlab /app/src/lidao-G]# 
19 [root@devops-gitlab /app/src/lidao-G]# 
20 [root@devops-gitlab /app/src/lidao-G]# 
21 [root@devops-gitlab /app/src/lidao-G]# 
22 [root@devops-gitlab /app/src/lidao-G]# cat oldboy-lidao-live.green 
23 功能开发100%
24 购物功能 100%
25 无限充值bug已修复.
26 [root@devops-gitlab /app/src/lidao-G]# git add . 
27 [root@devops-gitlab /app/src/lidao-G]# git commit -m "无限充值bug修复"
28 [fixbug a9d331d] 无限充值bug修复
29 1 file changed, 1 insertion(+)
30 [root@devops-gitlab /app/src/lidao-G]# git checkout master 
31 Switched to branch 'master'
32 [root@devops-gitlab /app/src/lidao-G]# git branch 
33  fixbug
34 * master
35  shopping
36 [root@devops-gitlab /app/src/lidao-G]# git merge fixbug -m '无限充值bug修复 与 主分支合并'
37 Updating aadc6b3..a9d331d
38 Fast-forward (no commit created; -m option ignored)
39  oldboy-lidao-live.green | 1 + 1 file changed, 1 insertion(+)
40 [root@devops-gitlab /app/src/lidao-G]# 
41 [root@devops-gitlab /app/src/lidao-G]# git branch 
42  fixbug
43 * master
44  shopping
45 [root@devops-gitlab /app/src/lidao-G]# git branch -d fixbug 
46 Deleted branch fixbug (was a9d331d).
47 [root@devops-gitlab /app/src/lidao-G]# git branch 
48 * master
49    shopping
4) git 分支命令总结 
 
git 分支相关命令  

git branch
查看分支
git branch name 创建分支
git branch -d name 删除分支
git checkout 分支名字 切换分支
git merge 分支名字 合并(吸收)分支(把指定的分支合并到当前分支中)
git checkout -b name 创建分支并切换到这个分支 

7.3 入住CBD 
1) 创建 仓库
2) 连接远程仓库 
 
1 #
2 git config --global user.name "悠久之翼"
3 git config --global user.email "918391635@qq.com"
4 #添加远程仓库
5 git remote add origin git@gitee.com:lidao996/lidaoavi.git
6 #上传本地仓库的内容 到远程仓库
7 git push -u origin master

3) 密钥认证 访问远程代码仓库
 ● 创建密钥对
 ● 公钥配置到 远程代码仓库
 ● 添加 git协议的 远程仓库
 ● 上传
 9.git远程仓库:
 
 1.配置与远程仓库的认证
 ssh(git)√√√√√: 需要将服务器的公钥推送到指定用户下;
 https:       需要有用户名称,密码,每次都需要输入;
 2.添加远程仓库:
 git remote add origin [https://|git]
 
 3.将本地的仓库内容,推送到远程仓库:   
 git add .
 git commit -m "Messages"
 git push origin branch [ master | .... ]
 git pull origin branch
 4.如果有新人加入
 git clone [https://|git]
 git push origin branch
 git pull origin branch

  

7.4 补充 
 
1 tag
  ●  给commit id 设置别名 方便我们快速查看与使用
 
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
https://blog.csdn.net/lilongsy/article/details/83094977
#1. Alpha 预览版 测试版
#2. Beta 公开测试版
#3. RC(Release Candidate) 最终测试版本
#4. Release 正式发布版本   GA (General Avaiable) 
Final
最终版,也是正式发布版的一种表示方法。比如Hibernate。
Stable
稳定版,来自预览版本释出使用与改善而修正完成
2 gitignore
 
   ●  代码根目录中隐藏文件,里面内容会被排除,不上传到远程仓库.
   ●  上传代码的时候,代码中可能包含临时文件cache .swp 排除
   ●  在代码根目录中创建文件.gitignore 写上要排除的内容
   ●  忽略上传到本地仓库的内容 
gitignore忽略文件!!!!
   pyc
   cache/*
   config 
  $ cat .gitignore
  #*.jpg
  *.tmp
  cache/*
应用场景-
  1. 程序运行时产生的垃圾文件(临时文件)
  2. 程序运行时产生的缓存文件(临时文件)
  3. 程序本地开发使用的图片文件
  4. 程序连接数据一类的配置文件(什么时候用,什么时候配置)
7.5 总结 
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

 

posted @ 2022-02-10 18:42  秉烛夜游~游山玩水  阅读(105)  评论(0)    收藏  举报