流水线详细介绍与代码管理工具Git

一、 持续集成简介 1.介绍 1、将代码上传到服务器,然后解压2、将代码上传到服务器中,然后通过软连接的方式部署无法实现批量部署,无法实现批量回滚,更无法实

一、 持续集成简介

1.介绍

1、将代码上传到服务器,然后解压2、将代码上传到服务器中,然后通过软连接的方式部署无法实现批量部署,无法实现批量回滚,更无法实现批量测试。cd /opt/
mkdir deploy
rz index.zip
unzip index.zip 
rm -rf index.zip 
yum install lrzsz -y
mv index.html /usr/share/nginx/html/
访问
10.0.0.8# 批量部署,批量测试源代码管理协同开发代码管理工具自动集成(java、golang)、自动部署、自动测试: DevOps代码:编译型语言:需要编译,后运行脚本型语言:直接运行工具:
实现自动集成、自动部署:Jenkins
代码管理:git ---> gitlab、github、gitee

2. 什么是软件开发生命周期?

软件开发生命周期又叫做SDLC(Software Development Life Cycle),它是集合了计划、开发、测试 和部署过程的集合。1. 需求分析
这是生命周期的第一阶段,根据项目需求,团队执行一个可行性计划的分析。项目需求可能是公司内部或者客户提出的。这阶段主要是对信息的收集,也有可能是对现有项目的改善和重新做一个新的项目。还要分析项目的预算多长,可以从哪方面受益及布局,这也是项目创建的目标。2. 设计
第二阶段就是设计阶段,系统架构和满意状态(就是要做成什么样子,有什么功能),和创建一个项目计划。计划可以使用图表,布局设计或者文者的方式呈现。3. 实现  ---> 写配置清单,构建容器,部署一个测试环境
第三阶段就是实现阶段,项目经理创建和分配工作给开者,开发者根据任务和在设计阶段定义的目标进行开发代码。依据项目的大小和复杂程度,可以需要数月或更长时间才能完成。4. 测试
测试人员进行代码测试 ,包括功能测试、代码测试、压力测试等。5. 进化
最后进阶段就是对产品不断的进化改进和维护阶段,根据用户的使用情况,可能需要对某功能进行修改,bug修复,功能增加等。

3.敏捷开发

敏捷开发(Agile Development) 的核心是迭代开发(Iterative Development) 与 增量开发 (Incremental Development)
3.1迭代开发
对于大型软件项目,传统的开发方式是采用一个大周期(比如一年)进行开发,整个过程就是一次"大 开发";迭代开发的方式则不一样,它将开发过程拆分成多个小周期,即一次"大开发"变成多次"小开 发",每次小开发都是同样的流程,所以看上去就好像重复在做同样的步骤。
3.2增量开发
软件的每个版本,都会新增一个用户可以感知的完整功能。也就是说,按照新增功能来划分迭代。
3.3敏捷开发如何迭代
虽然敏捷开发将软件开发分成多个迭代,但是也要求,每次迭代都是一个完整的软件开发周期,必须按照软件工程的方法论,进行正规的流程管理。

4.持续集成

持续集成( Continuous integration , 简称 CI )指的是,频繁地(一天多次)将代码集成到主干。 持续集成的目的,就是让产品可以快速迭代,同时还能保持高质量。它的核心措施是,代码集成到主干之前,必须通过自动化测试。只要有一个测试用例失败,就不能集成。通过持续集成,团队可以快速的从一个功能到另一个功能,简而言之,敏捷软件开发很大一部分都要归功于持续集成。在持续集成的过程当中主要包括以下步骤:提交、测试、构建(容器需要构建, 编译型语言编译)、部署及回滚。
4.1持续集成要素
1.一个自动构建过程,从检出代码、编译构建、运行测试、结果记录、测试统计等都是自动完成的,无需人工干预。 2. 一个代码存储库,即需要版本控制软件来保障代码的可维护性,同时作为构建过程的素材库,一般使用SVN或Git。3. 一个持续集成服务器, Jenkins 就是一个配置简单和使用方便的持续集成服务器。
4.2持续集成有什么优点?
1、降低风险,由于持续集成不断去构建,编译和测试,可以很早期发现问题,所以修复的代价就少2、对系统健康持续检查,减少发布风险带来的问题3、减少重复性工作4、持续部署,提供可部署单元包5、持续交付可供使用的版本6、增强团队信心

二、git —> 代码管理工具

代码管理工具:git

Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而是一个开放源码的版本控制软件。Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必有服务器端软件支持。

git架构图

在这里插入图片描述

1.安装Git

[root@web02 ~]# yum install git -y
[root@web02 ~]# git --version
git version 1.8.3.1

2.初始化代码仓库

[root@web02 ~]# mkdir /hhh
[root@web02 ~]# cd /hhh/
[root@web02 hhh]# git init
初始化空的 Git 版本库于 /hhh/.git/
[root@web02 hhh]# ll -a
总用量 0
drwxr-xr-x   3 root root  18 4月  14 16:44 .
dr-xr-xr-x. 20 root root 279 4月  14 16:44 ..
drwxr-xr-x   7 root root 119 4月  14 16:44 .git--如何验证初始化成功
[root@web02 hhh]# cd .git/
[root@web02 .git]# ll
-rw-r--r-- 1 root root  92 4月  14 16:44 config
[root@web02 .git]# cat config 
[core]repositoryformatversion = 0filemode = truebare = falselogallrefupdates = true--查看状态
[root@web02 hhh]# git status
# 位于分支 master
#
# 初始提交
#
# 未跟踪的文件:
#   (使用 "git add ..." 以包含要提交的内容)
#
#	index.html
提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)

3.将代码提交到Git暂存区

--添加
[root@web02 hhh]# git add index.html--查看
[root@web02 hhh]# git status
# 位于分支 master
#
# 初始提交
#
# 要提交的变更:
#   (使用 "git rm --cached ..." 撤出暂存区)
#
#	新文件:    index.html

4.把文件提交到git缓冲区

[root@web02 hhh]# git commit index.html .参ht数:-m : 添加注释--基本配置	
[root@web02 hhh]#   git config --global user.email "you@example.com"
[root@web02 hhh]#   git config --global user.name "Your Name"--编辑index.html后在查看
[root@web02 hhh]# vim index.html 
--查看
[root@web02 hhh]# git status 
# 位于分支 master
#
# 初始提交
#
# 要提交的变更:
#   (使用 "git rm --cached ..." 撤出暂存区)
#
#	新文件:    index.html
#
# 尚未暂存以备提交的变更:
#   (使用 "git add ..." 更新要提交的内容)
#   (使用 "git checkout -- ..." 丢弃工作区的改动)
#
#	修改:      index.html--查看修改的地方
[root@web02 hhh]# git diff index.html
diff --git a/index.html b/index.html
index 102e320..b89f9f0 100644
--- a/index.html
+++ b/index.html
@@ -1 +1,3 @@String
+String
+--查看提交历史
[root@web02 hhh]# git log

5.回滚

--新建
touch index.php
--输入内容
echo 111 > index.php
--提交到暂存区
git add index.php
--提交到缓存区
git commit -m 'init'
--修改index.php内容
<?php
phpinfo();
--再次提交到暂存区
git add index.php
--再次提交到缓冲区
git commit -m 'init'
--查看提交历史
git log--回滚
git reset --hard 180d937cda0a4caaa1683753a84af166399da1f5
cat index.php 
1111

6.远程仓库

https://gitee.com/

1)新建仓库

在这里插入图片描述

注意:这里新建的仓库是空的仓库

2)可以创建仓库的地方
github   
gitee   
gitlab
3)下载远程仓库
[root@web02 hhh]# git clone https://gitee.com/yuki-h/data.git--查看
[root@web02 data]# cat .git/config 
[core]repositoryformatversion = 0filemode = truebare = falselogallrefupdates = true
[remote "origin"]url = https://gitee.com/yuki-h/data.gitfetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]remote = originmerge = refs/heads/master--查看远程连接
git remote -v--删除远程连接
git remote rm origin
4)将文件提交到远程仓库
1. 设置用户名和邮箱
git config --global user.name "Yuki-h"
git config --global user.email "8975402+yuki-h@user.noreply.gitee.com"
--验证用户名和邮箱
[root@web02 data]# git config --get user.name 
Yuki-h
[root@web02 data]# git config --get user.email
8975402+yuki-h@user.noreply.gitee.com2. 将本地代码提交到远程仓库
[root@web02 data]# git push -u origin master
Username for 'https://gitee.com': Yuki-h
Password for 'https://Yuki-h@gitee.com': 
Counting objects: 3, done.
Writing objects: 100% (3/3), 211 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: Powered by GITEE.COM [GNK-5.0]
To https://gitee.com/yuki-h/data.git* [new branch]      master -> master
分支 master 设置为跟踪来自 origin 的远程分支 master。
5)使用ssh将代码提交到远程在这里插入图片描述
复制图上的连接地址,去修改
[root@web02 data]# vim .git/config url = git@gitee.com:yuki-h/data.git
6)免密登录
[root@web02 data]# ssh-keygen -t rsa--复制公钥到代码仓库
[root@web02 data]# cat /root/.ssh/id_rsa.pub --将代码提交到远程仓库
[root@web02 data]# git push -u origin master--在新的目录克隆
cd /opt/data/
git clone git@gitee.com:yuki-h/data.git--在index.html中添加新的内容
vim index.html 
111
111
111--提交到暂存区
git add index.html
--提交到缓冲区
git commit -m 'init'
--查看
git status
--将代码上传到远程仓库(涉及到分支的概念)
git push -u origin master
Counting objects: 5, done.
Writing objects: 100% (3/3), 273 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: Powered by GITEE.COM [GNK-5.0]
To git@gitee.com:yuki-h/data.gite32ef7a..dd5ed2e  master -> master
分支 master 设置为跟踪来自 origin 的远程分支 master。
7)拉取远程仓库代码
[root@web02 data]# git pull**注意:git pull 和git clone 之间有什么不同?
git pull    更新远程仓库代码
git clone   下载远程仓库代码
git push    将代码上传到远程仓库

7.分支

# git仓库  ---> 代表是房间
git分支相对于就是不同的房间
不同的分支之间是相对隔离的。
代码仓库:hhh--代码上传的经历过程
开发环境
测试环境
预发布环境
线上环境
1)查看本地分支
[root@web02 data]# git branch
* master
2)查看远程分支
[root@web02 data]# git branch -a
* masterremotes/origin/HEAD -> origin/masterremotes/origin/master
3)创建分支
[root@web02 data]# git checkout -b test
切换到一个新分支 'test'--查看分支
[root@web02 data]# git branch master
* test
4)将本地分支同步到远程分支
[root@web02 data]# git push -u origin test 
Total 0 (delta 0), reused 0 (delta 0)
remote: Powered by GITEE.COM [GNK-5.0]
remote: Create a pull request for 'test' on Gitee by visiting:
remote:     https://gitee.com/yuki-h/data/pull/new/yuki-h:test...yuki-h:master
To git@gitee.com:yuki-h/data.git* [new branch]      test -> test
分支 test 设置为跟踪来自 origin 的远程分支 test。

在这里插入图片描述

5)切换分支
[root@web02 data]# git checkout master 
切换到分支 'master'**注意:增加-b参数就是增加分支,不加-b参数就是切换分支
[root@alvin-test-os data]# git branch 
* mastertest
6)标签
标签:标签是一种特殊的分支,特点是只能够删除不能够修改1. 创建标签: 本地创建    远程仓库创建
git tag -a [tag名称] -m "解释"
=================================
git tag -a vip-hhh -m "第一个tag"
--查看标签
[root@web02 data]# git tag
vip-hhh2.  拉取指定标签内容
git clone -b [标签名称|分支名称 git@] [仓库地址]3.查看标签内容
git show vip-hhh
tag vip-hhh
Tagger: Yuki-h <8975402+yuki-h@user.noreply.gitee.com>
Date:   Wed Apr 14 20:37:37 2021 +0800第一个tagcommit dd5ed2ea91036766e7b152772e8a49e93f099f47
Author: Yuki-h <8975402+yuki-h@user.noreply.gitee.com>
Date:   Wed Apr 14 19:55:25 2021 +0800initdiff --git a/index.html b/index.html
index 8d47907..23de3f5 100644
--- a/index.html
+++ b/index.html
@@ -3,3 +3,6 @@333444555
+111
+111

三、创建本地仓库,关联上远程仓库,并实现脚本通过标签部署discuz

1.创建本地仓库

[root@web02 ~]# mkdir data
[root@web02 ~]# cd data/
[root@web02 data]# git init
初始化空的 Git 版本库于 /root/data/.git/

2.关联远程仓库

1)创建远程仓库

在这里插入图片描述

2)将本地仓库关联远程仓库
[root@web02 data]# git remote add origin https://gitee.com/yuki-h/discuz.git--查看
[root@web02 data]# cat .git/config 
[core]repositoryformatversion = 0filemode = truebare = falselogallrefupdates = true
[remote "origin"]url = https://gitee.com/yuki-h/discuz.gitfetch = +refs/heads/*:refs/remotes/origin/*

3.通过脚本标签部署discuz

1)上传代码到远程仓库
rz discuz.zip
[root@web02 data]# mkdir discuz
[root@web02 data]# mv discuz.zip /discuz
[root@web02 data]# mv upload/* /mnt/data
[root@web02 data]# git add .[root@web02 data]# git commit -m 'init'
1.准备代码
2.提交到Git暂存区
3.配置用户和邮箱
4.提交
5.推送(认证)
认证完以后还要继续提交git push -u origin master如果没有权限,就要绑定ssh权限[root@web02 data]# cat /root/.ssh/id_rsa.pub 
6.创建标签
7.编写部署脚本
cd data
git clone xxxxvim deploy.sh
#bin/bash
#定义一个不会重复的代码仓库的名称
REPOASIORY=discuz-`date +%F_%H:%M:%S`
REPOASIORY_URL="这里放的是仓库的地址"
REPOASIORY_TAG=$1
CURRENT_DIR=pwd
git clone -b ${REPOASIORY_TAG} ${REPOASIORY_URL} ${REPOASIORY}
# /usr/share/nginx/html
rm -rf /usr/share/nginx/html
ln -s ${CURRENT_DIR=pwd}/${REPOASIORY} /usr/share/nginx/htmlmv deploy.sh ..
部署的时候是有变量的,连接是一致的
创建一个pv 
mkdir -pv /usr/share/nginx/html
运行
./deploy.sh  vip-hhh