第x章 軟件開發(fā)生命周期
1.開發(fā)流程
項(xiàng)目立項(xiàng)-->需求調(diào)研-->需求拆解-->交給不同的開發(fā)進(jìn)行開發(fā)-->測(cè)試環(huán)境測(cè)試-->部署生產(chǎn)環(huán)境。
2.環(huán)境解釋
開發(fā)環(huán)境:一般開發(fā)環(huán)境是指開發(fā)人員自己的電腦環(huán)境,不同語(yǔ)言不通的環(huán)境,比如python,go,php,java等。
測(cè)試環(huán)境:開發(fā)好的代碼先要在測(cè)試環(huán)境跑通,測(cè)試環(huán)境的軟件版本和生產(chǎn)環(huán)境一致,但是數(shù)據(jù)一般為測(cè)試數(shù)據(jù),作用主要是測(cè)試開發(fā)好的代碼各個(gè)組件之間是否能跑通。
預(yù)發(fā)布環(huán)境:比測(cè)試環(huán)境更貼近生產(chǎn)環(huán)境,數(shù)據(jù)更接近真實(shí)環(huán)境,與生產(chǎn)環(huán)境的域名不同,主要用于質(zhì)量檢測(cè)。
生產(chǎn)環(huán)境:真正面向用戶的線上環(huán)境,一般只有運(yùn)維有權(quán)限進(jìn)行代碼的部署和維護(hù),其他人員一般沒有權(quán)限。
3.手動(dòng)部署的問題
1.上傳方式不方便,scp rsync rz ftp等
2.手動(dòng)部署效率低下,占用大量時(shí)間
3.如果服務(wù)器多,上線速度慢
4.手動(dòng)部署容易誤操作,不能保證準(zhǔn)確率
5.出問題不好回滾,手忙腳亂
4.自動(dòng)部署的優(yōu)勢(shì)
4.1 持續(xù)集成
1.開發(fā)的代碼持續(xù)的集成到代碼倉(cāng)庫(kù)里就是持續(xù)集成,不用等所有人都開發(fā)完畢在合并,可以多個(gè)開發(fā)人員同時(shí)工作。
2.開發(fā)將代碼提交到代碼倉(cāng)庫(kù),由ci服務(wù)器自動(dòng)將代碼拉下來進(jìn)行編譯,測(cè)試,然后將結(jié)果返回給開發(fā)人員。
3.持續(xù)集成的目的是可以頻繁的將開發(fā)的功能進(jìn)行合并,提高工作效率。
4.2 持續(xù)交付
1.持續(xù)交付就是將編譯開發(fā)好的代碼持續(xù)的交付到測(cè)試環(huán)境進(jìn)行測(cè)試。
2.在預(yù)發(fā)布環(huán)境我們可以對(duì)代碼進(jìn)行質(zhì)量掃描和漏洞掃描,并且將測(cè)試結(jié)果返回給測(cè)試人員。
3.如果測(cè)試的代碼有問題,測(cè)試人員就通知開發(fā)人員進(jìn)行修復(fù),如果沒有問題則進(jìn)入下一個(gè)部署環(huán)節(jié)。
4.3 持續(xù)部署
1.代碼測(cè)試沒有問題之后就可以進(jìn)入預(yù)發(fā)布環(huán)境進(jìn)行進(jìn)一步測(cè)試,如果預(yù)發(fā)布環(huán)境也沒有問題可以通過jenkins服務(wù)器持續(xù)的部署到生產(chǎn)服務(wù)器
2.如果新部署的服務(wù)發(fā)現(xiàn)有問題,通過jenkins服務(wù)器可以快速的回滾到正常的代碼。
第1章 準(zhǔn)備環(huán)境
主機(jī)名 IP 服務(wù) 內(nèi)存
gitlab 10.0.0.200 Gitlab 2G
jenkins 10.0.0.201 Jenkins 1G
nexus 10.0.0.202 Nexus 2G
sonar 10.0.0.203 SonarQube 2G
web 10.0.0.7 Nginx 1G
第2章 git基本配置
0.git介紹
1.安裝命令
yum install git -y
2.查看配置
[root@gitlab ~]# git config
用法:git config [選項(xiàng)]
配置文件位置
--global 使用全局配置文件
--system 使用系統(tǒng)級(jí)配置文件
--local 使用版本庫(kù)級(jí)配置文件
-f, --file <文件> 使用指定的配置文件
3.配置使用git的用戶
git config --global user.name "zhangya"
4.配置使用git的郵箱
git config --global user.email "526195417@qq.com"
5.設(shè)置語(yǔ)法高亮
git config --global color.ui true
6.查看配置
[root@gitlab ~]# git config --list
user.name=zhangya
user.email=526195417@qq.com
color.ui=true
[root@gitlab ~]# cat .gitconfig
[user]
name = zhangya
email = 526195417@qq.com
[color]
ui = true
第3章 git初始化
1.創(chuàng)建工作目錄
mkdir /git_data
2.初始化
cd /git_data
git init
3.查看狀態(tài)
git status
4.隱藏文件介紹
[root@gitlab /git_data]# ls .git|xargs -n 1
branches #分支目錄
config #定義項(xiàng)目的特有配置
description #描述
HEAD #當(dāng)前分支
hooks #git鉤子文件
info #包含一個(gè)全局排除文件
objects #存放所有數(shù)據(jù),包含info和pack兩個(gè)子文件夾
refs #存放指向數(shù)據(jù)(分支)的提交對(duì)象的指針
index #保存暫存區(qū)信息,在執(zhí)行g(shù)it init的時(shí)候,這個(gè)文件還沒有
第4章 基本命令
1.在工作目錄創(chuàng)建測(cè)試文件
[root@gitlab /git_data]# touch a b c
[root@gitlab /git_data]# git status
# 位于分支 master
#
# 初始提交
#
# 未跟蹤的文件:
# (使用 "git add <file>..." 以包含要提交的內(nèi)容)
#
# a
# b
# c
提交為空,但是存在尚未跟蹤的文件(使用 "git add" 建立跟蹤)
2.提交文件到暫存區(qū)
提交a文件到暫存區(qū)
[root@gitlab /git_data]# git add a
[root@gitlab /git_data]# git status
# 位于分支 master
#
# 初始提交
#
# 要提交的變更:
# (使用 "git rm --cached <file>..." 撤出暫存區(qū))
#
# 新文件: a
#
# 未跟蹤的文件:
# (使用 "git add <file>..." 以包含要提交的內(nèi)容)
#
# b
# c
查看隱藏目錄
[root@gitlab /git_data]# ll .git/
總用量 20
drwxr-xr-x 2 root root 6 5月 11 12:32 branches
-rw-r--r-- 1 root root 92 5月 11 12:32 config
-rw-r--r-- 1 root root 73 5月 11 12:32 description
-rw-r--r-- 1 root root 23 5月 11 12:32 HEAD
drwxr-xr-x 2 root root 4096 5月 11 12:32 hooks
-rw-r--r-- 1 root root 96 5月 11 13:01 index # git add a 把文件提交到了暫存區(qū)
drwxr-xr-x 2 root root 20 5月 11 12:32 info
drwxr-xr-x 5 root root 37 5月 11 13:01 objects
drwxr-xr-x 4 root root 29 5月 11 12:32 refs
提交所有文件
[root@gitlab /git_data]# git add .
[root@gitlab /git_data]# git status
# 位于分支 master
#
# 初始提交
#
# 要提交的變更:
# (使用 "git rm --cached <file>..." 撤出暫存區(qū))
#
# 新文件: a
# 新文件: b
# 新文件: c
3.撤回提交到暫存區(qū)的文件
[root@gitlab /git_data]# git rm --cached c
rm 'c'
[root@gitlab /git_data]# git status
# 位于分支 master
#
# 初始提交
#
# 要提交的變更:
# (使用 "git rm --cached <file>..." 撤出暫存區(qū))
#
# 新文件: a
# 新文件: b
#
# 未跟蹤的文件:
# (使用 "git add <file>..." 以包含要提交的內(nèi)容)
#
# c
[root@git
4.刪除提交到暫存區(qū)的文件
方法1: 先從暫存區(qū)撤回到工作區(qū),然后直接刪除文件
[root@gitlab /git_data]# rm -f c
[root@gitlab /git_data]# git status
# 位于分支 master
#
# 初始提交
#
# 要提交的變更:
# (使用 "git rm --cached <file>..." 撤出暫存區(qū))
#
# 新文件: a
# 新文件: b
方法2:直接同時(shí)刪除工作目錄和暫存區(qū)的文件
[root@gitlab /git_data]# ll
總用量 0
-rw-r--r-- 1 root root 0 5月 11 13:00 a
-rw-r--r-- 1 root root 0 5月 11 13:00 b
[root@gitlab /git_data]# git rm -f b
rm 'b'
[root@gitlab /git_data]# git status
# 位于分支 master
#
# 初始提交
#
# 要提交的變更:
# (使用 "git rm --cached <file>..." 撤出暫存區(qū))
#
# 新文件: a
#
[root@gitlab /git_data]# ll
總用量 0
-rw-r--r-- 1 root root 0 5月 11 13:00 a
5.提交當(dāng)前暫存區(qū)的所有文件到本地倉(cāng)庫(kù)
[root@gitlab /git_data]# git commit -m "commit a"
[master(根提交) 1153f56] commit a
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 a
[root@gitlab /git_data]# git status
# 位于分支 master
無(wú)文件要提交,干凈的工作區(qū)
6.重命名已提交到本地倉(cāng)庫(kù)的文件
方法1:手動(dòng)修改
[root@gitlab /git_data]# mv a a.txt
[root@gitlab /git_data]# git status
# 位于分支 master
# 尚未暫存以備提交的變更:
# (使用 "git add/rm <file>..." 更新要提交的內(nèi)容)
# (使用 "git checkout -- <file>..." 丟棄工作區(qū)的改動(dòng))
#
# 刪除: a
#
# 未跟蹤的文件:
# (使用 "git add <file>..." 以包含要提交的內(nèi)容)
#
# a.txt
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
[root@gitlab /git_data]# git rm --cached a
rm 'a'
[root@gitlab /git_data]# git status
# 位于分支 master
# 要提交的變更:
# (使用 "git reset HEAD <file>..." 撤出暫存區(qū))
#
# 刪除: a
#
# 未跟蹤的文件:
# (使用 "git add <file>..." 以包含要提交的內(nèi)容)
#
# a.txt
[root@gitlab /git_data]# git add a.txt
[root@gitlab /git_data]# git status
# 位于分支 master
# 要提交的變更:
# (使用 "git reset HEAD <file>..." 撤出暫存區(qū))
#
# 重命名: a -> a.txt
[root@gitlab /git_data]# git commit -m "commit a.txt"
[master 42ede9c] commit a.txt
1 file changed, 0 insertions(+), 0 deletions(-)
rename a => a.txt (100%)
[root@gitlab /git_data]# git status
# 位于分支 master
無(wú)文件要提交,干凈的工作區(qū)
[root@gitlab /git_data]# ll
總用量 0
-rw-r--r-- 1 root root 0 5月 11 13:00 a.txt
方法2:git修改
[root@gitlab /git_data]# git mv a.txt a
[root@gitlab /git_data]# git status
# 位于分支 master
# 要提交的變更:
# (使用 "git reset HEAD <file>..." 撤出暫存區(qū))
#
# 重命名: a.txt -> a
[root@gitlab /git_data]# git commit -m "rename a.txt a"
[master 5c3ddba] rename a.txt a
1 file changed, 0 insertions(+), 0 deletions(-)
rename a.txt => a (100%)
[root@gitlab /git_data]# git status
# 位于分支 master
無(wú)文件要提交,干凈的工作區(qū)
7.對(duì)比工作目錄的文件和暫存區(qū)文件的差異
[root@gitlab /git_data]# echo aaaa > a
[root@gitlab /git_data]# git diff
diff --git a/a b/a
index e69de29..5d308e1 100644
--- a/a
+++ b/a
@@ -0,0 +1 @@
+aaaa
8.對(duì)比暫存區(qū)和本地倉(cāng)庫(kù)的文件內(nèi)容的差異
提交a到本地暫存區(qū),用git diff查看是相同的
[root@gitlab /git_data]# git add a
[root@gitlab /git_data]# git diff
對(duì)比暫存區(qū)和本地倉(cāng)庫(kù)文件的不同
[root@gitlab /git_data]# git diff --cached a
diff --git a/a b/a
index e69de29..5d308e1 100644
--- a/a
+++ b/a
@@ -0,0 +1 @@
+aaaa
將暫存區(qū)文件提交到本地倉(cāng)庫(kù)后再對(duì)比
[root@gitlab /git_data]# git commit -m "modified a"
[master 8203c87] modified a
1 file changed, 1 insertion(+)
[root@gitlab /git_data]# git diff --cached a
9.查看歷史的提交記錄
查看詳細(xì)信息
[root@gitlab /git_data]# git log
commit 8203c878bc30c3bd23ee977e5980232fa660ddae
Author: zhangya <526195417@qq.com>
Date: Mon May 11 13:38:22 2020 +0800
modified a
commit 5c3ddba7bc8de6b8575e77513ee9805021ffc5ef
Author: zhangya <526195417@qq.com>
Date: Mon May 11 13:26:10 2020 +0800
rename a.txt a
commit 42ede9cc10865b67e4b1e8ad58a601eadf45cd61
Author: zhangya <526195417@qq.com>
Date: Mon May 11 13:24:35 2020 +0800
commit a.txt
commit 1153f564c45678cc9d4c265a1b55f5ba7b610ac9
Author: zhangya <526195417@qq.com>
Date: Mon May 11 13:16:13 2020 +0800
commit a
查看簡(jiǎn)單的信息一行現(xiàn)實(shí)
[root@gitlab /git_data]# git log --oneline
8203c87 modified a
5c3ddba rename a.txt a
42ede9c commit a.txt
1153f56 commit a
顯示當(dāng)前的指針指向
[root@gitlab /git_data]# git log --oneline --decorate
8203c87 (HEAD, master) modified a
5c3ddba rename a.txt a
42ede9c commit a.txt
1153f56 commit a
顯示具體內(nèi)容的變化
[root@gitlab /git_data]# git log -p
只顯示最新的內(nèi)容
[root@gitlab /git_data]# git log -1
commit 8203c878bc30c3bd23ee977e5980232fa660ddae
Author: zhangya <526195417@qq.com>
Date: Mon May 11 13:38:22 2020 +0800
modified a
10.回滾到指定版本
提交新內(nèi)容bbb到文件a
[root@gitlab /git_data]# echo bbb >> a
[root@gitlab /git_data]# git add a
[root@gitlab /git_data]# git commit -m "add bbb"
[master b11e0b2] add bbb
1 file changed, 1 insertion(+)
提交新內(nèi)容ccc到文件a
[root@gitlab /git_data]# echo ccc >> a
[root@gitlab /git_data]# git commit -am "add ccc"
[master 4df18d4] add ccc
1 file changed, 1 insertion(+)
查看版本號(hào)
[root@gitlab /git_data]# git log --oneline
4df18d4 add ccc
b11e0b2 add bbb
8203c87 modified a
5c3ddba rename a.txt a
42ede9c commit a.txt
1153f56 commit a
回滾到指定版本 modified a
[root@gitlab /git_data]# git reset --hard 8203c87
HEAD 現(xiàn)在位于 8203c87 modified a
[root@gitlab /git_data]# cat a
aaaa
此時(shí)發(fā)現(xiàn)回滾錯(cuò)了,應(yīng)該回退到bbb
此時(shí)查看歷史會(huì)發(fā)現(xiàn)并沒有bbb,因?yàn)榛氐搅诉^去,那時(shí)候提交bbb還沒發(fā)生,所有看不到記錄
[root@gitlab /git_data]# git log --oneline
8203c87 modified a
5c3ddba rename a.txt a
42ede9c commit a.txt
1153f56 commit a
我們可以使用reflog來查看總的歷史記錄
[root@gitlab /git_data]# git reflog
8203c87 HEAD@{0}: reset: moving to 8203c87
4df18d4 HEAD@{1}: commit: add ccc
b11e0b2 HEAD@{2}: commit: add bbb
8203c87 HEAD@{3}: commit: modified a
5c3ddba HEAD@{4}: commit: rename a.txt a
42ede9c HEAD@{5}: commit: commit a.txt
1153f56 HEAD@{6}: commit (initial): commit a
然后再指定回退到bbb版本
[root@gitlab /git_data]# git reset --hard b11e0b2
HEAD 現(xiàn)在位于 b11e0b2 add bbb
[root@gitlab /git_data]# cat a
aaaa
bbb
第5章 分支
1.查看當(dāng)前屬于什么分支
[root@gitlab /git_data]# git branch
* master
2.創(chuàng)建分支
創(chuàng)建新分支
[root@gitlab /git_data]# git branch testing
創(chuàng)建新分支并切換到指定分支
[root@gitlab /git_data]# git checkout -b testing
切換到一個(gè)新分支 'testing'
[root@gitlab /git_data]# git branch
master
* testing
4.查看分支指向
[root@gitlab /git_data]# git log --oneline --decorate
b11e0b2 (HEAD, testing, master) add bbb
8203c87 modified a
5c3ddba rename a.txt a
42ede9c commit a.txt
1153f56 commit a
5.切換到指定分支
切換到testing分支
[root@gitlab /git_data]# git checkout testing
切換到分支 'testing'
[root@gitlab /git_data]# git branch
master
* testing
在當(dāng)前分支創(chuàng)建文件并提交到本地倉(cāng)庫(kù)
[root@gitlab /git_data]# touch test
[root@gitlab /git_data]# git add .
[root@gitlab /git_data]# git commit -m "commit test"
[testing d50853d] commit test
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 test
[root@gitlab /git_data]# ll
總用量 4
-rw-r--r-- 1 root root 9 5月 11 15:51 a
-rw-r--r-- 1 root root 0 5月 11 16:02 test
切換到master分支查看文件
[root@gitlab /git_data]# git checkout master
切換到分支 'master'
[root@gitlab /git_data]# git branch
* master
testing
[root@gitlab /git_data]# ll
總用量 4
-rw-r--r-- 1 root root 9 5月 11 15:51 a
在master分支下創(chuàng)建文件
[root@gitlab /git_data]# touch master
[root@gitlab /git_data]# git add .
[root@gitlab /git_data]# git commit -m "commit master"
[master 6f9e2f0] commit master
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 master
[root@gitlab /git_data]# ll
總用量 4
-rw-r--r-- 1 root root 9 5月 11 15:51 a
-rw-r--r-- 1 root root 0 5月 11 16:10 master
6.合并分支
將test和master分支合并
[root@gitlab /git_data]# git branch
* master
testing
[root@gitlab /git_data]# git merge testing
Merge made by the 'recursive' strategy.
test | 0
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 test
查看提交日志
[root@gitlab /git_data]# git log --oneline --decorate
6f38df1 (HEAD, master) Merge branch 'testing'
6f9e2f0 commit master
d50853d (testing) commit test
b11e0b2 add bbb
8203c87 modified a
5c3ddba rename a.txt a
42ede9c commit a.txt
1153f56 commit a
查看文件
[root@gitlab /git_data]# ll
總用量 4
-rw-r--r-- 1 root root 9 5月 11 15:51 a
-rw-r--r-- 1 root root 0 5月 11 16:10 master
-rw-r--r-- 1 root root 0 5月 11 16:11 test
7.沖突合并
在master分支下編輯a文件并提交
[root@gitlab /git_data]# echo "master" >> a
[root@gitlab /git_data]# git commit -am "modified a master"
[master 38fd841] modified a master
1 file changed, 1 insertion(+)
[root@gitlab /git_data]# cat a
aaaa
bbb
master
切換到test分支下編輯文件并提交
[root@gitlab /git_data]# git checkout testing
切換到分支 'testing'
[root@gitlab /git_data]# echo "testing" >> a
[root@gitlab /git_data]# git commit -am "modified a on testing branch"
[testing 71c50c8] modified a on testing branch
1 file changed, 1 insertion(+)
[root@gitlab /git_data]# cat a
aaaa
bbb
testing
切換到master分支并合并test分支,此時(shí)兩個(gè)分支的文件內(nèi)容是有沖突的
[root@gitlab /git_data]# git checkout master
切換到分支 'master'
[root@gitlab /git_data]# git merge testing
自動(dòng)合并 a
沖突(內(nèi)容):合并沖突于 a
自動(dòng)合并失敗,修正沖突然后提交修正的結(jié)果。
此時(shí)沖突內(nèi)容會(huì)自動(dòng)寫到文件里
[root@gitlab /git_data]# cat a
aaaa
bbb
<<<<<<< HEAD
master
=======
testing
>>>>>>> testing
要想解決沖突,我們需要手動(dòng)修改文件,保留最終的文件,然后重新提交
[root@gitlab /git_data]# vim a
[root@gitlab /git_data]# cat a
aaaa
bbb
master
[root@gitlab /git_data]# git commit -am "merge testing to master"
[master 921d88e] merge testing to master
查看提交日志
[root@gitlab /git_data]# git log --oneline --decorate
921d88e (HEAD, master) merge testing to master
71c50c8 (testing) modified a on testing branch
38fd841 modified a master
6f38df1 Merge branch 'testing'
6f9e2f0 commit master
d50853d commit test
b11e0b2 add bbb
8203c87 modified a
5c3ddba rename a.txt a
42ede9c commit a.txt
1153f56 commit a
8.刪除指定分支
[root@gitlab /git_data]# git branch -d testing
已刪除分支 testing(曾為 71c50c8)。
[root@gitlab /git_data]# git branch
* master
第6章 git標(biāo)簽使用
1.給當(dāng)前版本創(chuàng)建標(biāo)簽
[root@gitlab /git_data]# git tag v1.0 -m "aaa bbb master testing version v1.0"
2.給指定版本打標(biāo)簽
[root@gitlab /git_data]# git log --oneline
921d88e merge testing to master
71c50c8 modified a on testing branch
38fd841 modified a master
6f38df1 Merge branch 'testing'
6f9e2f0 commit master
d50853d commit test
b11e0b2 add bbb
8203c87 modified a
5c3ddba rename a.txt a
42ede9c commit a.txt
1153f56 commit a
[root@gitlab /git_data]# git tag -a v2.0 b11e0b2 -m "add bbb version v2.0"
3.查看標(biāo)簽
[root@gitlab /git_data]# git tag
v1.0
v2.0
4.回滾到指定標(biāo)簽
首先查看當(dāng)前版本文件
[root@gitlab /git_data]# ll
總用量 4
-rw-r--r-- 1 root root 16 5月 11 16:36 a
-rw-r--r-- 1 root root 0 5月 11 16:33 master
-rw-r--r-- 1 root root 0 5月 11 16:11 test
回滾到指定版本
[root@gitlab /git_data]# git reset --hard v2.0
HEAD 現(xiàn)在位于 b11e0b2 add bbb
再次查看文件
[root@gitlab /git_data]# ll
總用量 4
-rw-r--r-- 1 root root 9 5月 11 16:52 a
第7章 總結(jié)
1.命令總結(jié)
git init #初始化一個(gè)目錄為git版本庫(kù)
git add . #將沒有被管理的文件,加入git管理,添加到暫存區(qū)
git commit -m "描述" #將暫存區(qū)的文件提交到版本庫(kù)中,進(jìn)行版本的管理
git log #查看提交的歷史記錄
git reflog #查看git提交的所有歷史記錄
git status #查看當(dāng)前的文件管理狀態(tài)(已提交|未提交)
git reset --hard commitID #回退到指定的提交版本記錄