day62-github与gitlab的使用
學(xué)習(xí)目標(biāo)
-
能夠使用GitHub創(chuàng)建遠(yuǎn)程倉庫并使用
-
能夠安裝部署GitLab服務(wù)器
-
能夠使用GitLab創(chuàng)建倉庫并使用
-
掌握CI/CD的概念
-
掌握藍(lán)綠部署, 滾動(dòng)更新,灰度發(fā)布的概念
GitHub是目前最火的開源項(xiàng)目代碼托管平臺(tái)。它是基于web的Git倉庫,提供公有倉庫和私有倉庫,但私有倉庫是需要付費(fèi)的。
GitLab可以創(chuàng)建免費(fèi)的私有倉庫。
GitLab是利用 Ruby開發(fā)的一個(gè)開源的版本管理系統(tǒng),實(shí)現(xiàn)一個(gè)自托管的Git項(xiàng)目倉庫,可通過Web界面進(jìn)行訪問公開的或者私人項(xiàng)目。它擁有與Github類似的功能,能夠?yàn)g覽源代碼,管理缺陷和注釋??梢怨芾韴F(tuán)隊(duì)對倉庫的訪問,它非常易于瀏覽提交過的版本并提供一個(gè)文件歷史庫。團(tuán)隊(duì)成員可以利用內(nèi)置的簡單聊天程序(Wall)進(jìn)行交流。它還提供一個(gè)代碼片段收集功能可以輕松實(shí)現(xiàn)代碼復(fù)用,便于日后有需要的時(shí)候進(jìn)行查找。
github
注冊github賬號(hào)
github官網(wǎng)地址: https://www.github.com
登錄注冊賬號(hào)時(shí)填寫的郵箱,找到github發(fā)的郵件,打開并點(diǎn)擊里面的Verify email address
創(chuàng)建項(xiàng)目
我們就創(chuàng)建好了第一個(gè)項(xiàng)目。
使用github遠(yuǎn)程倉庫
第1步: 在gibhub上獲取克隆地址
第2步: 克隆項(xiàng)目到本地linux,默認(rèn)克隆到當(dāng)前目錄
[root@vm1 ~]# git clone https://github.com/linux-daniel/daniel_project.git Cloning into 'daniel_project'... remote: Enumerating objects: 3, done. remote: Counting objects: 100% (3/3), done. remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 Unpacking objects: 100% (3/3), done.[root@vm1 ~]# ls daniel_project/ README.md[root@vm1 ~]# cat daniel_project/README.md # daniel_project 教學(xué)測試項(xiàng)目第3步: 提交代碼文件
在克隆下來的倉庫里準(zhǔn)備一個(gè)代碼文件 [root@vm1 ~]# cd daniel_project/ [root@vm1 daniel_project]# vim hello.py print("hello world")[root@vm1 daniel_project]# git add hello.py [root@vm1 daniel_project]# git commit -m "提交hello.py" [master b59e1d6] 提交hello.py1 file changed, 1 insertion(+)create mode 100644 hello.py第4步: 使用git push推送到github
[root@vm1 daniel_project]# git push -u origin master warning: push.default is unset; its implicit value is changing in Git 2.0 from 'matching' to 'simple'. To squelch this message and maintain the current behavior after the default changes, use:git config --global push.default matchingTo squelch this message and adopt the new behavior now, use:git config --global push.default simpleSee 'git help config' and search for 'push.default' for further information. (the 'simple' mode was introduced in Git 1.7.11. Use the similar mode 'current' instead of 'simple' if you sometimes use older versions of Git)Username for 'https://github.com': linux-daniel 這里輸入你的github賬號(hào)名 Password for 'https://linux-daniel@github.com': 再輸入你的github密碼 Counting objects: 4, done. Delta compression using up to 8 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 302 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) To https://github.com/linux-daniel/daniel_project.git2ff4805..b59e1d6 master -> master第5步: 回到github驗(yàn)證
補(bǔ)充:
使用下面的命令可以實(shí)現(xiàn)https的密碼緩存(下次不用再輸密碼了)
# git config --global credential.helper store免密push
免密push其實(shí)就是利用了ssh免密登錄的原理:
第1步: 開發(fā)者電腦產(chǎn)生ssh空密碼密鑰對
[root@vm1 daniel_project]# ssh-keygen -t rsa -f /root/.ssh/id_rsa -C "root@daniel.cluster.com" -N ""第2步: 把公鑰文件的內(nèi)容復(fù)制到剪貼板
[root@vm1 daniel_project]# cat /root/.ssh/id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCz2rKSMbJwvdRN5VnsaRA0ydDDtm0ruTQY0ZVsynuj15RcFuKjrlYAEF3rU2AowL7n68xWabf3lC9l6WZjLa6cibfjW1wNnroPE2kzZADSoxcAAYxKVg/wkG2j5lPC4jJRPiSLg/yCyDA7go567ShvUCH8goMXMyMzKx1eIaU2nZoLnh7ulBv4URs5jPSE9kwhQ9MnUIzihQRvz9tqURYKIzmthSkm0CyXAlT6qufTdaNp/KmoH2Idj+rXufEsLF5qHD0lKaSM4bKZvqWNhd4a6XrF9DpoeSpeI63P3ZZkVTbmTSFgbBM8+KgxvGyUxfvjimo8Ed8TY5TGA6qC+g7F root@daniel.cluster.com第3步: github上添加開發(fā)者的公鑰
第4步: 獲取ssh克隆方式地址
第5步: 開發(fā)者再git clone項(xiàng)目到本地
[root@vm1 ~]# rm daniel_project/ -rf [root@vm1 ~]# git clone git@github.com:linux-daniel/daniel_project.git Cloning into 'daniel_project'... The authenticity of host 'github.com (13.229.188.59)' can't be established. RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8. RSA key fingerprint is MD5:16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'github.com,13.229.188.59' (RSA) to the list of known hosts. remote: Enumerating objects: 6, done. remote: Counting objects: 100% (6/6), done. remote: Compressing objects: 100% (3/3), done. remote: Total 6 (delta 0), reused 3 (delta 0), pack-reused 0 Receiving objects: 100% (6/6), done.第6步: 再準(zhǔn)備一個(gè)新的代碼文件, 添加并提交
[root@vm1 ~]# cd daniel_project/我這里準(zhǔn)備一個(gè)haha.py文件 [root@vm1 daniel_project]# cat haha.py print("haha")[root@vm1 daniel_project]# git add haha.py [root@vm1 daniel_project]# git commit -m "提交haha.py" [master 2186bae] 提交haha.py1 file changed, 1 insertion(+)create mode 100644 haha.py第7步: 這次再使用git push就會(huì)發(fā)現(xiàn)不需要輸入賬號(hào)密碼了
[root@vm1 daniel_project]# git push第8步: github上驗(yàn)證
小結(jié): github有兩種連接方式:
Clone with HTTPS
Clone with SSH(通過ssh免密密鑰對實(shí)現(xiàn)免密push)
github分支(拓展)
第1步: 在github上創(chuàng)建一個(gè)新的dev分支
第2步: 開發(fā)者電腦的dev分支上開發(fā),并上傳到github的dev分支 (這里可以再次git clone,也可以直接在本地對應(yīng)的創(chuàng)建dev分支,還可以git pull進(jìn)行同步更新)
[root@vm1 daniel_project]# git pull [root@vm1 daniel_project]# git branch dev [root@vm1 daniel_project]# git checkout dev Switched to branch 'dev' [root@vm1 daniel_project]# echo "新功能" > new.py [root@vm1 daniel_project]# git add new.py [root@vm1 daniel_project]# git commit -m "增加了發(fā)紅包功能" [dev 2d38f8e] 增加了發(fā)紅包功能1 file changed, 1 insertion(+)create mode 100644 new.py [root@vm1 daniel_project]# git push -u origin dev Counting objects: 4, done. Delta compression using up to 8 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 295 bytes | 0 bytes/s, done. Total 3 (delta 1), reused 0 (delta 0) remote: Resolving deltas: 100% (1/1), completed with 1 local object. To git@github.com:linux-daniel/daniel_project.git2186bae..2d38f8e dev -> dev Branch dev set up to track remote branch dev from origin.第3步: 在github上創(chuàng)建pull request將dev分支的新代碼merge到master分支
第4步: 驗(yàn)證最終效果
多人協(xié)作(拓展)
如果有多個(gè)開發(fā)者開發(fā)項(xiàng)目的話,如何代碼合并呢? 下面我們來演示這樣的過程
fork me on github
clone與fork的區(qū)別:
clone: 任何人都可以下載作者的整個(gè)項(xiàng)目,但非作者不能push到作者的項(xiàng)目里(因?yàn)闆]有作者的賬號(hào)密碼)
fork:
- 張三fork了作者的項(xiàng)目,相當(dāng)于可以下載作者的一個(gè)項(xiàng)目副本。
- 張三開發(fā)完后再上傳到張三自己的賬號(hào)里
- 張三請求合并到作者的賬號(hào)項(xiàng)目里
- 作者可以同意或拒絕這個(gè)請求
第1步: 再申請一個(gè)github賬號(hào)模擬第二位開發(fā)者(我這里新申請的賬號(hào)為linux-daniel2),登錄后查找linux-daniel第一位開發(fā)者的項(xiàng)目
第2步: 第二位開發(fā)者Fork第一們開發(fā)者的項(xiàng)目,就會(huì)在自己的賬號(hào)里得到項(xiàng)目代碼的副本
第3步: 第二位開發(fā)者使用自己的電腦(這里我使用vm5來模擬)進(jìn)行開發(fā),然后上傳
[root@vm5 ~]# git clone https://github.com/linux-daniel2/daniel_project.git Cloning into 'daniel_project'... remote: Enumerating objects: 13, done. remote: Counting objects: 100% (13/13), done. remote: Compressing objects: 100% (7/7), done. remote: Total 13 (delta 1), reused 9 (delta 1), pack-reused 0 Unpacking objects: 100% (13/13), done.[root@vm5 ~]# cd daniel_project/[root@vm5 daniel_project]# git branch dev [root@vm5 daniel_project]# git checkout dev Switched to branch 'dev'[root@vm5 daniel_project]# echo "分享功能" > new2.py [root@vm5 daniel_project]# git add new2.py[root@vm5 daniel_project]# git commit -m "增加了分享功能"[root@vm5 daniel_project]# git push -u origin dev Username for 'https://github.com': linux-daniel2 Password for 'https://linux-daniel2@github.com': Counting objects: 4, done. Delta compression using up to 8 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 313 bytes | 0 bytes/s, done. Total 3 (delta 1), reused 0 (delta 0) remote: Resolving deltas: 100% (1/1), completed with 1 local object. To https://github.com/linux-daniel2/daniel_project.git2d38f8e..1c95bf2 dev -> dev Branch dev set up to track remote branch dev from origin.第4步: 第二位開發(fā)者確認(rèn)開發(fā)的代碼上傳到自己的github倉庫成功
第5步: 第二位開發(fā)者創(chuàng)建pull request將代碼請求合并到第一位開發(fā)者的原項(xiàng)目里去
第6步: 回到第一位開發(fā)者的賬號(hào),對第二位開發(fā)者的請求進(jìn)行合并確認(rèn)
第7步: 因?yàn)槭呛喜⒌皆?xiàng)目的dev分支,如果沒問題的話,還需要合并到master分支。(請小伙伴們自行完成)
最終結(jié)果圖如下:
步驟小結(jié):
開發(fā)者1為項(xiàng)目擁有者, 開發(fā)者2幫開發(fā)者1開發(fā)新功能
開發(fā)者2 Fork 開發(fā)者1的項(xiàng)目(相當(dāng)于copy一個(gè)副本)
開發(fā)者2使用git clone這個(gè)項(xiàng)目副本到自己的開發(fā)電腦
開發(fā)者2開發(fā)新功能,并push到項(xiàng)目副本
開發(fā)者2使用pull request將開發(fā)好的新功能請求合并到開發(fā)者1的項(xiàng)目倉庫
開發(fā)者1確認(rèn)
gitlab
gitlab下載
gitlab安裝與配置
準(zhǔn)備一臺(tái)新虛擬機(jī)來安裝(內(nèi)存可適當(dāng)調(diào)大點(diǎn),比如1.5G)
安裝
[root@vm2 ~]# rpm -ivh gitlab-ce-11.8.2-ce.0.el7.x86_64.rpm配置
[root@vm2 ~]# vim /etc/gitlab/gitlab.rb 13 external_url 'http://10.1.1.12' 修改成gitlab服務(wù)器的IP地址,對外服務(wù)初始化
[root@vm2 ~]# gitlab-ctl reconfigure 時(shí)間較久,需要3分鐘左右時(shí)間,會(huì)自動(dòng)幫助配置各個(gè)組件,并啟動(dòng)查看狀態(tài)
[root@vm2 ~]# gitlab-ctl status run: alertmanager: (pid 10563) 36s; run: log: (pid 10234) 64s run: gitaly: (pid 10343) 39s; run: log: (pid 9380) 163s run: gitlab-monitor: (pid 10417) 38s; run: log: (pid 10082) 80s run: gitlab-workhorse: (pid 10364) 39s; run: log: (pid 9835) 104s run: logrotate: (pid 9916) 93s; run: log: (pid 9952) 90s run: nginx: (pid 9876) 99s; run: log: (pid 9908) 96s run: node-exporter: (pid 10399) 38s; run: log: (pid 10003) 84s run: postgres-exporter: (pid 10585) 35s; run: log: (pid 10267) 60s run: postgresql: (pid 9499) 158s; run: log: (pid 9562) 157s run: prometheus: (pid 10452) 37s; run: log: (pid 10161) 70s run: redis: (pid 9275) 170s; run: log: (pid 9296) 169s run: redis-exporter: (pid 10426) 38s; run: log: (pid 10127) 74s run: sidekiq: (pid 9787) 111s; run: log: (pid 9808) 110s run: unicorn: (pid 9731) 117s; run: log: (pid 9781) 114sgitlab登錄
設(shè)置密碼(密碼需要最少8位)
gitlab設(shè)置
配置郵箱服務(wù)的用途:
-
賬號(hào)注冊時(shí),郵件驗(yàn)證
-
有合并請求時(shí),郵件通知
-
修改密碼時(shí),通過郵件修改
開發(fā)者設(shè)置ssh密鑰
第1步: 在開發(fā)者電腦上產(chǎn)生空密碼密鑰
(注意: 可以直接使用上面實(shí)驗(yàn)的github開發(fā)者的密鑰,也可以模擬新的開發(fā)者重新產(chǎn)生,再做一遍。這里我們再做一次)
[root@vm1 ~]# ssh-keygen -t rsa -f /root/.ssh/id_rsa -C "dev1@itcast.cn" -N ""第2步: 查看并復(fù)制公鑰
[root@vm1 ~]# cat /root/.ssh/id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAJW+LIFdcC0DI6oM6eOf6+EPks2ODyPaR/cAWKeFcfnSvuU84ZFYtziQyJYf1RdXwxo6vH+XyBNwOGrTLB1m33RvAgUznVhBH3KA9l1OimYSqEdQJ+4g+LVDkrgj/vIRc1dv7wDglyYGOOFfRftRK/QEHK911MOyJCK1nH0rr7eE7sP33aD6I6DoIfaSC0UUDPfwHDg/bQUDsF/ez4tEPOTSeJ2jVyytArHOAjtflL1+ZvP25F4osdSXju6IG8i7HHiZ0sz1WuQEYH8KzrY/zf8DBFrnOB4vl2UTNwP/NjT06TY78gKMJqcpf1maZR3YIeYlA03ccSOWSZuqq50eP dev1@itcast.cn第3步: 在gitlab界面添加公鑰
gitlab創(chuàng)建倉庫
第1步: 在gitlab上創(chuàng)建項(xiàng)目(其實(shí)也就是存放代碼的倉庫)
第2步: 自定義項(xiàng)目名稱,描述等
第3步: 驗(yàn)證創(chuàng)建好的項(xiàng)目
克隆遠(yuǎn)程倉庫到本地
第1步: 查看gitlab上的幫助
第2步: 在開發(fā)者電腦上設(shè)置身份標(biāo)識(shí)
[root@vm1 ~]# git config --global user.name "daniel" [root@vm1 ~]# git config --global user.email "daniel@itcast.cn" [root@vm1 ~]# git clone git@10.1.1.12:root/mywebsite.git第3步: 在開發(fā)者電腦上使用git命令clone,并上傳項(xiàng)目
[root@vm1 ~]# cd mywebsite/[root@vm1 mywebsite]# echo "test web" > README.md [root@vm1 mywebsite]# git add . [root@vm1 mywebsite]# git commit -m "add README.md"[root@vm1 mywebsite]# git push -u origin master第4步: 驗(yàn)證
小結(jié)
git 分布式版本控制工具
github和gitlab都屬于遠(yuǎn)程倉庫
git clone: 把遠(yuǎn)程倉庫的項(xiàng)目代碼下載到本地
git push: 把本地的項(xiàng)目代碼上傳到遠(yuǎn)程倉庫
git pull: 把遠(yuǎn)程倉庫的項(xiàng)目代碼更新到本地
遠(yuǎn)程倉庫兩種訪問方法:
- http
- ssh 使用空密碼密鑰做免密
持續(xù)集成(CI)
Continuous integration,簡稱CI
? 是一種軟件開發(fā)實(shí)踐,即團(tuán)隊(duì)開發(fā)成員經(jīng)常集成他們的工作,通常每個(gè)成員每天至少集成一次,也就意味著每天可能會(huì)發(fā)生多次集成。每次集成都通過自動(dòng)化的構(gòu)建(包括編譯,發(fā)布,自動(dòng)化測試)來驗(yàn)證,從而盡快地發(fā)現(xiàn)集成錯(cuò)誤。
目的
? 持續(xù)集成的目的不是減少build失敗的次數(shù),而是**盡早發(fā)現(xiàn)問題,在最短的時(shí)間內(nèi)解決問題**,減少風(fēng)險(xiǎn)和浪費(fèi)。從而讓產(chǎn)品開發(fā)流程更加敏捷,縮短產(chǎn)品開發(fā)周期,在產(chǎn)品上線后,讓用戶用得更加順暢。
? 在沒有應(yīng)用持續(xù)集成之前,傳統(tǒng)的開發(fā)模式是項(xiàng)目一開始就劃分模塊,每個(gè)開發(fā)人員分別負(fù)責(zé)一個(gè)模塊,等所有的代碼都開發(fā)完成之后再集成到一起提交給測試人員,隨著軟件技術(shù)團(tuán)隊(duì)的發(fā)展,軟件已經(jīng)不能簡單地通過劃分模塊的方式來開發(fā),需要項(xiàng)目內(nèi)部相互協(xié)作,劃分模塊這種傳統(tǒng)的模式的弊端也越來越明顯。由于很多bug在項(xiàng)目早期的設(shè)計(jì)、編碼階段就引入,到最后集成測試時(shí)才發(fā)現(xiàn)問題,開發(fā)人員需要花費(fèi)大量的時(shí)間來定位bug,加上軟件的復(fù)雜性,bug的定位就更難了,甚至出現(xiàn)不得不調(diào)整底層架構(gòu)的情況。這種情況的發(fā)生不僅僅對測試進(jìn)度造成影響,而且會(huì)拖長整個(gè)項(xiàng)目周期。
? 而持續(xù)集成可以有效解決軟件開發(fā)過程中的許多問題,在集成測試階段之前就幫助開發(fā)人員發(fā)現(xiàn)問題,從而可以有效的確保軟件質(zhì)量,減小項(xiàng)目的風(fēng)險(xiǎn),使軟件開發(fā)團(tuán)隊(duì)從容的面對各種變化。持續(xù)集成報(bào)告中可以體現(xiàn)目前項(xiàng)目進(jìn)度,哪部分需要已經(jīng)實(shí)現(xiàn),哪些代碼已經(jīng)通過自動(dòng)化測試,代碼質(zhì)量如何,讓開發(fā)團(tuán)隊(duì)和項(xiàng)目組了解項(xiàng)目的真實(shí)狀況。
?
持續(xù)交付(CD)
Continuous Delivery,簡稱CD
? 持續(xù)交付是指軟件開發(fā)過程,從原始需求到最終產(chǎn)品開發(fā)過程中,較短周期內(nèi)以需求的小顆粒度(小批量)頻繁提交的過程。主要指集成后的代碼在類生產(chǎn)環(huán)境(測試環(huán)境,預(yù)發(fā)布環(huán)境等)中測試并及時(shí)反饋的過程.
目的
##持續(xù)部署
Continuous Deployment,簡稱CD
? 基于持續(xù)交付的基礎(chǔ)上,把功能穩(wěn)定,符合產(chǎn)品需求的版本有方法地部署至生產(chǎn)環(huán)境中??梢钥醋魇浅掷m(xù)交付的最后一環(huán)。
持續(xù)發(fā)布
Continuous Release,簡稱CR
? 發(fā)布是周期性或不定期地對項(xiàng)目在部署后,進(jìn)行整體軟件版本的更新,例如,更新新功能或展示頁面框架等。
目的
持續(xù)測試
Continuous Testing,簡稱CT
? 持續(xù)測試是貫穿著整個(gè)軟件開發(fā)過程,驗(yàn)證程序員提交代碼,檢驗(yàn)合規(guī)性及降低bug,減少最終錯(cuò)誤,實(shí)現(xiàn)敏捷及精益開發(fā)。
目的
代碼更新方法
藍(lán)綠部署
海豚的秘密
大家都知道海豚是一種可愛的海洋動(dòng)物。但又有多少人知道,海豚可以永遠(yuǎn)不睡覺。
是什么樣的能力,使得海豚可以永遠(yuǎn)保持清醒呢?
依靠的是海豚大腦特殊的運(yùn)作方式。
像人一樣,海豚的大腦也分為左腦和右腦兩個(gè)部分。
在海豚活躍的狀態(tài)下,左腦和右腦都是清醒的:
當(dāng)然,海豚也是血肉之軀,也是需要休息的。在海豚休息的狀態(tài)下,其中一半大腦會(huì)進(jìn)入睡眠,另一半大腦仍然保持清醒,以面對各種外界情況。
每隔兩個(gè)小時(shí),這種一半睡眠一半清醒的狀態(tài)會(huì)進(jìn)行交替,比如這一刻左腦睡眠右腦清醒,下一刻左腦清醒右腦睡眠。
這就是海豚永遠(yuǎn)不會(huì)真正睡覺的秘密。
藍(lán)綠部署,英文名Blue Green Deployment,是一種可以保證系統(tǒng)在不間斷提供服務(wù)的情況下上線代碼的部署方式。
如何保證系統(tǒng)不間斷提供服務(wù)呢?
藍(lán)綠部署的模型中包含兩個(gè)集群,就好比海豚的左腦和右腦。
在正常情況下(沒有上線操作),集群A和集群B的代碼版本是一致的,并且同時(shí)對外提供服務(wù)。
在有項(xiàng)目代碼上線的時(shí)候,我們首先把一個(gè)集群(比如集群A)從負(fù)載列表中摘除,進(jìn)行新版本的部署。集群B仍然繼續(xù)提供服務(wù)。
當(dāng)集群A升級完畢,我們把負(fù)載均衡重新指向集群A,再把集群B從負(fù)載列表中摘除,進(jìn)行新版本的部署。集群A重新提供服務(wù)。
最后,當(dāng)集群B也升級完成,我們把集群B也恢復(fù)到負(fù)載列表當(dāng)中。這個(gè)時(shí)候,兩個(gè)集群的版本都已經(jīng)升級,并且對外的服務(wù)幾乎沒有間斷過。
滾動(dòng)更新
滾動(dòng)更新,英文Rolling update,同樣是一種可以保證系統(tǒng)在不間斷提供服務(wù)的情況下上線代碼的部署方式。
和藍(lán)綠部署不同的是,滾動(dòng)部署對外提供服務(wù)的版本并不是非此即彼,而是在更細(xì)的粒度下平滑完成版本的升級。
如何做到細(xì)粒度平滑升級版本呢?
滾動(dòng)部署只需要一個(gè)集群,集群下的不同節(jié)點(diǎn)可以獨(dú)立進(jìn)行版本升級。比如在一個(gè)16節(jié)點(diǎn)的集群中,我們選擇每次升級4個(gè)節(jié)點(diǎn):
以此類推,最終所有的節(jié)點(diǎn)都升級了版本。
藍(lán)綠部署與滾動(dòng)更新對比
灰度發(fā)布(A/B測試、金絲雀部署)
灰度發(fā)布是指在黑與白之間,能夠平滑過渡的一種發(fā)布方式。
AB test就是一種灰度發(fā)布方式,讓一部分用戶繼續(xù)用A,一部分用戶開始用B,如果用戶對B沒有什么反對意見,那么逐步擴(kuò)大范圍,把所有用戶都遷移到B上面來。
灰度發(fā)布可以保證整體系統(tǒng)的穩(wěn)定,在初始灰度的時(shí)候就可以發(fā)現(xiàn)、調(diào)整問題,以保證其影響度,而我們平常所說的金絲雀部署也就是灰度發(fā)布的一種方式。
灰度發(fā)布/金絲雀部署步驟:
準(zhǔn)備好部署各個(gè)階段的工件,包括:構(gòu)建工件,測試腳本,配置文件和部署清單文件。
從負(fù)載均衡列表中移除掉“金絲雀”服務(wù)器。
升級“金絲雀”應(yīng)用(排掉原有流量并進(jìn)行部署)。
對應(yīng)用進(jìn)行自動(dòng)化測試。
將“金絲雀”服務(wù)器重新添加到負(fù)載均衡列表中(連通性和健康檢查)。
如果“金絲雀”在線使用測試成功,升級剩余的其他服務(wù)器。(否則就回滾)
除此之外灰度發(fā)布還可以設(shè)置路由權(quán)重,動(dòng)態(tài)調(diào)整不同的權(quán)重來進(jìn)行新老版本的驗(yàn)證。
17世紀(jì),英國礦井工人發(fā)現(xiàn),金絲雀對瓦斯這種氣體十分敏感??諝庵心呐掠袠O其微量的瓦斯,金絲雀也會(huì)停止歌唱;而當(dāng)瓦斯含量超過一定限度時(shí),雖然魯鈍的人類毫無察覺,金絲雀卻早已毒發(fā)身亡。當(dāng)時(shí)在采礦設(shè)備相對簡陋的條件下,工人們每次下井都會(huì)帶上一只金絲雀作為“瓦斯檢測指標(biāo)”,以便在危險(xiǎn)狀況下緊急撤離。
總結(jié)
以上是生活随笔為你收集整理的day62-github与gitlab的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JavaWeb项目实践
- 下一篇: 算法:经典题五 题目五 信封套娃层数问题