Jenkins X–(2)如何幫助實現持續交付
- 2019 年 11 月 26 日
- 筆記

Jenkins X是基於Kubernetes的持續集成、持續部署平台,是基於Kubernetes的現代雲原生應用的CI/CD解決方案。Jenkins X內置了很多最佳實踐和開源工具,您可以不用安裝Jenkins就能使用Jenkins X,Jenkins流水線作為安裝的一部分。Jenkins X並不是要取代Jenkins,而是以更好的開源工具為基礎來構建它。Jenkins X提供了以下特性來幫助我們實現持續交付。
命令行
Jenkins X 帶來了一個方便使用的命令行工具 jx :
- 安裝 Jenkins X 到你已經存在的 Kubernetes 集群(jx install)
- 創建一個新的 kubernetes 集群 並把 Jenkins X 安裝進去 (jx create cluster)
- 導入項目 到 Jenkins X 中以及他們的持續部署流水線設置 (jx import)
- 創建新的 Spring Boot 應用 並導入 Jenkins X 中,以及他們的持續部署流水線設置(jx create spring)
流水線
不必深入了解 Jenkins 流水線的內部,Jenkins X 會默認給你的項目提供一些很好的流水線——基於DevOps 最佳實踐實現了所有的持續集成和持續部署
環境
環境指的是應用部署的地方。開發人員通常使用縮寫來描述環境,例如:「測試中(Testing)、Staging/UAT或者生產(Production)」。
在 Jenkins X 中每個團隊都有一套自己的環境。默認情況下,Jenkins X 會給每個團隊創建一個 Staging 和 生產 環境,但你可以通過命令 jx create environment創建一個新的環境。
我們使用 GitOps 來管理要部署到每個環境中的 Kubernetes 資源的配置和版本。因此,每個環境都有自己的 git 倉庫,應用在這個環境中運行需要的 Helm Charts、版本以及配置都在庫中。
在 Kubernetes 集群中一個環境對應一個命名空間。當 Pull Requests 被合併到環境所在的 git 庫後,該環境的流水線就會把 git 庫中的 Helm Charts 應用到環境命名空間中。
這意味著開發和運維都可以在同一個 git 庫中,管理應用和資源在某個環境中的所有配置和版本,並且對環境的所有改變都可以在 git 中獲取到。因此,這樣很容易看到是誰作出的改變,而且,更重要的是當發生問題後很容易回滾改變。
如下圖所示:一共有dev、staging、production三套環境,分別對應了jx、jx-staging、jx-production三個命名空間。

部署升級
部署升級是通過 GitOps 在環境關聯的 git 庫上發起一個 Pull Requests 來實現的,這樣所有的改變都通過 git 來審查、批准,因此所有的改變的都很容易回滾。
當環境所關聯的 git 庫上有新的變化合併到 master 後,環境的流水線就會觸發,helm 就會把任何改變應用到資源上。
Jenkins X 的持續部署流水線把改變了的版本自動做部署升級,這是需要把配置中的」部署升級策略「設置為」自動「。默認情況下,」Staging「環境使用自動部署升級,而」生產「環境使用」手動「部署升級。
要手動把某個版本的應用部署升級到一個環境中的話,你可以使用jx promote命令。
jx promote命令詳解:

部署升級的過程:

預發環境
Jenkins X 允許你給 Pull Requests 設置一個預發環境,這樣就可以在變更後合併到 master 之前得到更多的回饋。這使你的變更在被合併以及發布之前更快得到回饋,並允許你避免在你的發版流水線中有人為的批准,加速變更在合併後的部署。
當預發環境啟動並運行後,Jenkins X 將會在你的 Pull Requests 中添加一個帶鏈接的評論,這樣你們團隊的成員就可以點擊來嘗試它!

回饋
正如在上面看到的,當你使用預發環境時,Jenkins X 會在你的 Pull Requests 上自動添加評論。
如果你在提交日誌中引用了 issues(例如:通過文本fixes #123),那麼,Jenkins X 流水線將會生成發版記錄,如下圖所示。

同樣地,在升級到Staging或者Production環境時,這些版本上也會在已修復的問題上自動添加對應環境可用的評論。例如:

應用
一些最好的軟體工具已經被打包為 helm charts,部分預先集成在了 Jenkins X 中,例如:Nexus、ChartMuseum、Monocular、Prometheus、Grafana等等。
插件
部分應用是內置的;例如:Nexus、ChartMuseum、Monocular。其他的則是作為「插件」提供的。
要安裝插件的話,使用命令jx create addon。例如:
jx create addon grafana
參考:Jenkins X官網