搞過 運維開發得童鞋知道,總會聽到 CICD,devops,Jenkins這些東東。那這些 東西到底是什麼鬼呢。
此文主要介紹 Jenkins,CICD 和 DevOps簡單的瞭解下。
什麼是 CICD?
CI(Continuous integration,中文意思是持續集成)是一種軟件開發時間。
持續集成強調開發人員提交了新代碼之後,立刻進行構建、(單元)測試。根據測試結果,我們可以確定新代碼和原有代碼能否正確地集成在一起。借用網絡圖片對CI加以理解。
- CD(Continuous Delivery, 中文意思持續交付)是在持續集成的基礎上,將集成後的代碼部署到更貼近真實運行環境(類生產環境)中。
比如,我們完成單元測試後,可以把代碼部署到連接數據庫的Staging環境中更多的測試。如果代碼沒有問題,可以繼續手動部署到生產環境。下圖反應的是CI/CD 的大概工作模式。
- CD(Continuous Deployment,中文持續部署)
對於一個成熟的CI/CD管道(Pipeline)來說,最後的階段是持續部署。作爲持續交付——自動將生產就緒型構建版本發佈到代碼存儲庫——的延伸,持續部署可以自動將應用發佈到生產環境。
持續部署意味着所有的變更都會被自動部署到生產環境中。持續交付意味着所有的變更都可以被部署到生產環境中,但是出於業務考慮,可以選擇不部署。如果要實施持續部署,必須先實施持續交付。
持續交付並不是指軟件每一個改動都要儘快部署到產品環境中,它指的是任何的代碼修改都可以在任何時候實施部署。
持續交付表示的是一種能力,而持續部署表示的則一種方式。持續部署是持續交付的最高階段
什麼是DevOps?
-
DevOps是“開發”和“運維”的縮寫。
-
DevOps是一組最佳實踐強調(IT研發、運維、測試)在應用和服務生命週期中的協作和溝通
-
強調整個組織的合作以及交付和基礎設施變更自動化,從而實現持續集成、持續部署和持續交付
DevOps持續交付環
-
我們把開發交付劃分爲:
計劃 --> 編碼 --> 構建 --> 測試 --> 版本 --> 部署 --> 運維 --> 監控
的一個閉環。 -
DevOps的目標是通過建立並不斷完善持續交付的流水線。
DevOps四大模塊
全鏈路自動化運維體系
- 監控工具
Zabbix、openfalcon、nagios、Prometheus
- 自動化運維管理工具
saltstack/ansible/puppet
- 平臺開發
CMDB、監控系統、工單系統、ELK日誌分析監控、DevOps CI/CD自動化交付平臺
- 常用工具
Jenkins/Git/Maven、Nginx/apache、Git、Lvs/keepalive、Hadoop、Docker、kafka、Kubernetes
- 運維基礎
Shell、linux、awk
什麼是 Jenkins
Jenkins是一個開源的、提供友好操作界面的持續集成(CI)工具,主要用於持續、自動的構建/測試軟件項目、監控外部任務的運行(這個比較抽象,暫且寫上,不做解釋)。Jenkins用Java語言編寫,可在Tomcat等流行的servlet容器中運行,也可獨立運行。通常與版本管理工具(SCM)、構建工具結合使用。常用的版本控制工具有SVN、GIT,構建工具有Maven、Ant、Gradle。
值得注意的點:
-
Jenkins是基於Java開發的一種持續集成工具,可用於自動化各種任務,如構建,測試和部署軟件。
-
Jenkins可以通過本機系統包Docker安裝,甚至可以通過安裝Java Runtime Environment的任何機器獨立運行。
-
作爲CI/CD的調度中心
,Jenkins具有十八般武藝,目前已有1700多個插件,功能強大到似乎有點過分了
大家可以瞭解到 Jenkins在整個 CICD的 devops 中起到的是一個 調度中心 的作用,因爲 Jenkins的插件特別的多,所以 他在持續交付中也起到了主導的作用,是一個必不可少的 工具。
Jenkins常用插件
插件的作用就是用來連接,其他的 工具(容器 監控工具 腳本 等)。就好比,python 連接mysql 還有 pymysql呢
- Git Parameter
- 這是一個參數構建擴展,可以在構建的時候選擇git的某一個分支來構建服務。
- Docker
-
利用Docker容器動態創建Jenkins Slave。如果有了Kubernetes/Openshift集羣,就不需要這個插件了。直接使用下面的Kubernetes插件。
-
jenkins非root啓動的話,爲了運行docker需要執行sudo chmod 777 /var/run/docker.sock
- Kubernetes
- 這個插件可以將Jenkins Slave Node動態配置爲Kubernetes集羣上的pod。
- GitLab
- 配置Gitlab的相關認證,同時也支持GitLab的Webhook觸發。
- GitLab Hook
-
支持GitLab更好的觸發。
-
Gogs WebHook
-
支持Gogs代碼倉庫的觸發。
- Maven
- 這個插件爲Maven 2 / 3項目提供了高級集成功能。
- Pyenv Pipeline
-
方便對python進行項目級別的環境隔離。
-
jenkins機器上需要安裝python、pip、virtualenv
- Python
- 這個插件支持在Jenkins的構建過程中執行Python腳本。
- SonarQube Scanner
- 支持SonarQube的代碼掃描。
- Ansible
- 在構建任務中可以執行Ansible任務。
- Publish Over SSH
-
通過SSH拷貝文件到目標機器,同時可以在目標機器上執行腳本
-
事先要在設置中添加目標機器的訪問方式。
- Job Generator
定義一個參數化的模板,通過這個模板快速的在 Jenkins 上創建出任務。
- Multijob
把多個Job組織起來。
- Parameterized Trigger
這是一個擴展型的插件,使各個job連接的時候可以傳遞一些job相關的信息。