Devops 是什麼
DevOps即Development和Operations的組合詞,是一組過程、方法與系統的統稱,用於促進開發應用程序或軟件工程、技術運營和質量保障QA部門之間的溝通、協作與整合。
DevOps是一種重視“軟件開發人員(Dev)”和“IT運維技術人員(Ops)”之間溝通合作的文化,它促進開發和運營團隊之間的協作,以自動化和可重複的方式更快地將代碼部署到生產中。
DevOps有助於提高組織提供應用程序和服務的速度。它使組織能夠更好地爲客戶服務,並在市場中更有競爭力。
簡而言之,DevOps可以定義爲開發和IT運營的一致性,以及更好的溝通和協作。
如圖
爲什麼需要DevOps
在DevOps之前:
● 開發和運營團隊完全孤立。
● 測試和部署是在設計構建之後完成的獨立活動。因此,他們比實際構建週期消耗更多時間。
● 在不使用DevOps的情況下,團隊成員將大量時間花在測試,部署和設計上,而不是構建項目。
● 手動代碼部署會導致生產中出現人爲錯誤
● 開發和運營團隊有各自的時間表,不同步導致進一步的延誤。
在DevOps 模式下,開發團隊和運營團隊都不再是“孤立”的團隊。有時,這兩個團隊會合爲一個團隊,他們的工程師會在應用程序的整個生命週期(從開發測試到部署再到運營)內相互協作,開發出一系列不限於單一職能的技能。
devops的目的
-
DevOps 突出重視軟件開發人員和運維人員的溝通合作,通過自動化流程來使得軟件構建、測試、發佈更加快捷、頻繁和可靠。
-
DevOps 希望做到的是軟件產品交付過程中
IT 工具鏈的打通
,使得各個團隊減少時間損耗,更加高效的協同工作。
CI 、CD 是什麼?
-
持續集成(Continuous Integration)
:持續集成是指軟件個人研發的部分向軟件整體部分交付,頻繁進行集成以便更快、更早的發現其中的錯誤。持續集成源自於極限編程(XP),是 XP 最初的 12 種實踐之一。持續集成需要具備
: -
- ①
全面的自動化測試
:這是實踐持續集成 && 持續部署的基礎,與此同時,選擇合適的自動化測試工具也極爲重要。
- ①
-
- ②
靈活的基礎設施
:容器、虛擬機
的存在讓開發人員和 QA 人員不必再大費周折。
- ②
-
- ③
版本工具工具
:如 Git、SVN 等。
- ③
-
- ④
自動化的構建和軟件發佈流程工具
:如 Jenkins 等。
- ④
-
- ⑤
反饋機制
:構建、測試失敗的時候,可以快速的反饋到相關負責人,以便儘快的解決問題,使得產品能更早的達到穩定的版本。
- ⑤
-
持續交付(Continuous Delivery)
:持續交付在持續集成的基礎上,將集成後的代碼部署到更貼近真實運行環境
的『類生成環境
』中。持續交付優先於整個產品生命週期的軟件部署,建立在高水平自動化持續集成之上。持續交付的優點和持續集成非常類似: -
- ①
快速發佈
:能夠應對業務需求,更快的實現軟件價值。
- ①
-
- ②
編碼、測試、上線、交付
的頻繁迭代週期縮短,同時獲得迅速反饋。
- ②
-
- ③
高質量的軟件發佈標準
:整個交付過程標準化、可重複、可靠。
- ③
-
- ④
整個交付過程進度可視化
:方便團隊人員瞭解項目成熟度。
- ④
-
- ⑤
更先進的團隊協作方式
:從需求分析、產品的用戶體驗到交互設計、開發、測試、運維等角色的密切協作,相比於傳統的瀑布式軟件團隊,更少浪費。
- ⑤
-
持續部署(Continuous Deployment)
:持續部署是指當交付的代碼通過評審之後,自動部署到生產環境中。持續部署是持續交付的最高階段。這意味着,所有通過了一系列的自動化測試的改動都將自動部署到生產環境。
開發人員提交代碼,持續集成服務器獲取代碼,執行單元測試,根據測試結果決定是否部署到預演環境,如果成功部署到預演環境,進行整體驗收測試,如果測試通過,自動部署到生產環境。整個過程自動化高效運轉。
推薦常用的CI/CD工具
Jenkins
專業的CI/CD工具,可擴展自動化服務器、安裝配置簡單、豐富的插件庫、分佈式架構設計、支持所有的平臺、可視化的管理頁面。
GitLab
端到端DevOps工具,常用功能:代碼審查、問題跟蹤、動態訂閱、易於擴展、項目wiki、多角色項目管理、項目代碼在線編譯預覽、CI/CD工具集成。
提交合並代碼集成 :通過git push 進行操作或者在GitLab Web頁面操作。
發佈應用到服務器 : 獲取製品庫中的應用,然後用salt、ansible發佈部署到服務器。
完全自動化: 提交代碼-> 構建部署 -> 發佈
gitlab雖然強大但是過於龐大,並且gitlab一般是用於git私有存儲庫來使用,所以這裏還是使用Jenkins
Jenkins
Docker 安裝 Jenkins
# 端口是 8080
docker run \
-u root \
--name=jenkins \
-d \
-p 8080:8080 \
-p 50000:50000 \
-v jenkins-data:/var/jenkins_home \
-v /etc/localtime:/etc/localtime:ro \
-v /var/run/docker.sock:/var/run/docker.sock \
--restart=always \
jenkinsci/blueocean
初始化Jenkins
等待安裝完成即可,安裝完畢之後通過 瀏覽器訪問如我的
http://192.168.176.100:8080
這個密碼,在日誌可以找到
docker logs jenkins
已經找到了密碼,輸入密碼即可進去
安裝插件
創建管理員用戶
配置實例,一般會自己獲取,沒有獲取就自己填寫
完成重啓
刷新頁面,用剛剛創建的管理員用戶登錄
這下就進去了
安裝插件
-
Docker、Docker Pipeline:安裝 Docker Pipeline 會自動安裝 Docker 插件,Docker Pipeline 插件允許我們自定義 agent 使用 Docker 環境。
-
Git Parameter:解析 git 參數,允許我們選擇分支進行構建。
-
Active Choices:可以做到參數的級聯選擇。
-
Generic Webhook Trigger:通用的 webhook 觸發器,構建更強大的 webhook 功能。
-
Role-based Authorization Strategy:RBAC 權限控制。
-
List Git Branches Parameter:列出分支參數。
-
Build With Parameters:基於自定義參數構建。
-
Jersey 2 API、Gitee:Gitee 插件。
docker系列
git系列
後面就不一一演示了,上面幾個插件都要安裝
安裝完成後勾選重啓,重啓完成即可
準備git 項目並配置Jenkis 關聯 Gitee
以 gitee 爲例,因爲 github 實現是太慢了,自己隨便建一個項目
這裏我也是隨便建了一個
https://gitee.com/makalochen/devop-test
Jenkis 關聯 Gitee
申請gitee私人令牌
Jenkins 配置 Gitee API 令牌
Jenkins 配置關聯 Gitee
下劃找到gitee配置
最後別忘了保存