新聞中心
了解自動化,使用 Git 存儲庫以及參數(shù)化 Jenkins 管道。

本文涵蓋了三個關(guān)鍵主題:自動化 CI/CD 配置、使用 Git 存儲庫處理常見的 CI/CD 工件、參數(shù)化 Jenkins 管道。
術(shù)語
首先,我們定義一些術(shù)語。CI/CD 是允許團(tuán)隊快速自動化測試、打包、部署其應(yīng)用程序的實(shí)踐。它通常通過利用名為 Jenkins 的服務(wù)器來實(shí)現(xiàn),該服務(wù)器充當(dāng) CI/CD 協(xié)調(diào)器。Jenkins 偵聽特定輸入(通常是代碼簽入后的 Git 掛鉤),并在觸發(fā)時啟動一個管道。
管道pipeline 由開發(fā)和/或運(yùn)營團(tuán)隊編寫的代碼組成,這些代碼指導(dǎo) Jenkins 在 CI/CD 過程中采取哪些操作。這個流水線通常類似于“構(gòu)建我的代碼,然后測試我的代碼,如果這些測試通過,則把我的應(yīng)用程序部署到下一個最高環(huán)境(通常是開發(fā)、測試或生產(chǎn)環(huán)境)”。組織通常具有更復(fù)雜的管道,并入了諸如工件存儲庫和代碼分析器之類的工具,這里提供了一個高級示例。
現(xiàn)在我們了解了關(guān)鍵術(shù)語,讓我們深入研究一些最佳實(shí)踐。
1、自動化是關(guān)鍵
要在 PaaS 上運(yùn)行 CI/CD,需要在集群上配置適當(dāng)?shù)幕A(chǔ)設(shè)施。在這個例子中,我將使用 OpenShift。
“Hello, World” 的實(shí)現(xiàn)很容易實(shí)現(xiàn)。簡單地運(yùn)行 oc new-app jenkins-,然后,你就有了一個已經(jīng)就緒的運(yùn)行中的 Jenkins 服務(wù)器了。然而,在企業(yè)中的使用要復(fù)雜得多。除了 Jenkins 服務(wù)器之外,管理員通常還需要部署代碼分析工具(如 SonarQube)和工件庫(如 Nexus)。然后,它們必須創(chuàng)建管道來執(zhí)行 CI/CD 和 Jenkins 從服務(wù)器,以減少主服務(wù)器的負(fù)載。這些實(shí)體中的大多數(shù)都由 OpenShift 資源支持,需要創(chuàng)建這些資源來部署所需的 CI/CD 基礎(chǔ)設(shè)施。
最后,部署 CI/CD 組件所需要的手動步驟可能是需要重復(fù)進(jìn)行的,而且你可能不想成為執(zhí)行那些重復(fù)步驟的人。為了確保結(jié)果能夠像以前一樣快速、無錯誤和準(zhǔn)確地產(chǎn)生,應(yīng)該在創(chuàng)建基礎(chǔ)設(shè)施的方式中結(jié)合自動化方法。這可以是一個 Ansible 劇本、一個 Bash 腳本,或者任何您希望自動化 CI/CD 基礎(chǔ)設(shè)施部署的其它方式。我已經(jīng)使用 Ansible 和 OpenShift-Applier 角色來自動化我的實(shí)現(xiàn)。您可能會發(fā)現(xiàn)這些工具很有價值,或者您可能會發(fā)現(xiàn)其他一些對您和組織更有效的工具。無論哪種方式,您都將發(fā)現(xiàn)自動化顯著地減少了重新創(chuàng)建 CI/CD 組件所需的工作量。
配置 Jenkins 主服務(wù)器
除了一般的“自動化”之外,我想單獨(dú)介紹一下 Jenkins 主服務(wù)器,并討論管理員如何利用 OpenShift 來自動化配置 Jenkins。來自 Red Hat Container Catalog 的 Jenkins 鏡像已經(jīng)安裝了 OpenShift-Sync plugin。在 該視頻 中,我們將討論如何使用這個插件來創(chuàng)建 Jenkins 管道和從設(shè)備。
要創(chuàng)建 Jenkins 管道,請創(chuàng)建一個類似于下面的 OpenShift BuildConfig:
apiVersion: v1
kind: BuildConfig
...
spec:
source:
git:
ref: master
uri:
...
strategy:
jenkinsPipelineStrategy:
jenkinsfilePath: Jenkinsfile
type: JenkinsPipeline
OpenShift-Sync 插件將注意到已經(jīng)創(chuàng)建了帶有 jenkinsPipelineStrategy 策略的 BuildConfig,并將其轉(zhuǎn)換為 Jenkins 管道,從 Git 源指定的 Jenkinsfile 中提取。也可以使用內(nèi)聯(lián) Jenkinsfile,而不是從 Git 存儲庫中提取。有關(guān)更多信息,請參閱文檔。
要創(chuàng)建 Jenkins 從站,請創(chuàng)建一個 OpenShift ImageStream,它從以下定義開始:
apiVersion: v1
kind: ImageStream
metadata:
annotations:
slave-label: jenkins-slave
labels:
role: jenkins-slave
...
注意在這個 ImageStream 中定義的元數(shù)據(jù)。OpenShift-Sync 插件將把帶有標(biāo)簽 role: jenkins-slave 的任何 ImageStream 轉(zhuǎn)換為 Jenkins 從站。Jenkins 從站將以 slave-label 注釋中的值命名。
ImageStreams 對于簡單的 Jenkins 從屬配置工作得很好,但是一些團(tuán)隊會發(fā)現(xiàn)有必要配置一些細(xì)節(jié)詳情,比如資源限制、準(zhǔn)備就緒和活動性探測,以及實(shí)例上限。這就是 ConfigMap 發(fā)揮作用的地方:
apiVersion: v1
kind: ConfigMap
metadata:
labels:
role: jenkins-slave
...
data:
template1: |-
注意,仍然需要角色:jenkins-slave 標(biāo)簽來將 ConfigMap 轉(zhuǎn)換為 Jenkins 從站。Kubernetes pod 模板由一長段 XML 組成,它將根據(jù)組織的喜好配置每個細(xì)節(jié)。要查看此 XML,以及有關(guān)將 ImageStreams 和 ConfigMaps 轉(zhuǎn)換為 Jenkins 從站的更多信息,請參閱文檔。
請注意上面所示的三個示例,其中沒有一個操作需要管理員對 Jenkins 控制臺進(jìn)行手動更改。通過使用 OpenShift 資源,可以簡單的自動化方式配置 Jenkins。
2、分享就是關(guān)愛
第二個最佳實(shí)踐是維護(hù)一個公共 CI/CD 工件的 Git 存儲庫。主要思想是防止團(tuán)隊重新發(fā)明輪子。假設(shè)您的團(tuán)隊需要執(zhí)行到 OpenShift 環(huán)境的藍(lán)/綠部署,作為管道 CD 階段的一部分。負(fù)責(zé)編寫管道的團(tuán)隊成員可能不是 OpenShift 專家,也不可能具有從頭開始編寫此功能的能力。幸運(yùn)的是,有人已經(jīng)編寫了一個將此功能合并到一個公共 CI/CD 存儲庫中的函數(shù),因此您的團(tuán)隊可以使用該函數(shù)而不是花時間編寫一個函數(shù)。
為了更進(jìn)一步,您的組織可能決定維護(hù)整個管道。您可能會發(fā)現(xiàn)團(tuán)隊正在編寫具有相似功能的管道。對于那些團(tuán)隊來說,使用來自公共存儲庫的參數(shù)化管道要比從頭開始編寫自己的管道更有效。
3、少即是多
正如我在前一節(jié)中提到的,第三個也是最后一個最佳實(shí)踐是參數(shù)化您的 CI/CD 管道。參數(shù)化將防止過多的管道,使您的 CI/CD 系統(tǒng)更容易維護(hù)。假設(shè)我有多個區(qū)域可以部署應(yīng)用程序。如果沒有參數(shù)化,我需要為每個區(qū)域設(shè)置單獨(dú)的管道。
要參數(shù)化一個作為 OpenShift 構(gòu)建配置編寫的管道,請將 env 節(jié)添加到配置:
...
spec:
...
strategy:
jenkinsPipelineStrategy:
env:
- name: REGION
value: US-West
jenkinsfilePath: Jenkinsfile
type: JenkinsPipeline
使用此配置,我可以傳遞 REGION 參數(shù)給管道以將我的應(yīng)用程序部署到指定區(qū)域。
這有一個視頻提供了一個更實(shí)質(zhì)性的情況,其中參數(shù)化是必須的。一些組織決定把他們的 CI/CD 管道分割成單獨(dú)的 CI 和 CD 管道,通常是因為在部署之前有一些審批過程。假設(shè)我有四個鏡像和三個不同的環(huán)境要部署。如果沒有參數(shù)化,我需要 12 個 CD 管道來允許所有部署可能性。這會很快失去控制。為了使 CD 流水線的維護(hù)更容易,組織會發(fā)現(xiàn)將鏡像和環(huán)境參數(shù)化以便允許一個流水線執(zhí)行多個流水線的工作會更好。
總結(jié)
企業(yè)級的 CI/CD 往往比許多組織預(yù)期的更加復(fù)雜。幸運(yùn)的是,對于 Jenkins,有很多方法可以無縫地提供設(shè)置的自動化。維護(hù)一個公共 CI/CD 工件的 Git 存儲庫也會減輕工作量,因為團(tuán)隊可以從維護(hù)的依賴項中提取而不是從頭開始編寫自己的依賴項。最后,CI/CD 管道的參數(shù)化將減少必須維護(hù)的管道的數(shù)量。
如果您找到了其他不可或缺的做法,請在評論中分享。
新聞名稱:持續(xù)集成與部署的3個最佳實(shí)踐
當(dāng)前網(wǎng)址:http://m.fisionsoft.com.cn/article/cocodes.html


咨詢
建站咨詢
