本文介紹如何在阿里雲ACK Serverless叢集中部署Jenkins並通過簡單的應用樣本示範其構建和部署的過程。
前提條件
已建立ACK Serverless叢集。具體操作,請參見建立ACK Serverless叢集。
已通過kubectl串連Kubernetes叢集。具體操作,請參見通過kubectl串連Kubernetes叢集。
注意事項
Jenkins系統的維護由開發人員自行負責,此部分不提供企業級的支援人員。
步驟一:部署Jenkins
執行以下命令,配置Jenkins Helm Repo。
helm repo add jenkins https://charts.jenkins.io helm repo update
預期輸出:
Hang tight while we grab the latest from your chart repositories... ...Successfully got an update from the "jenkins" chart repository Update Complete. ⎈Happy Helming!⎈
說明由於以上倉庫屬于海外Helm倉庫,ACK Serverless叢集在中國內地配置該Helm Repo時會稍微慢些,請您耐心等待。
安裝Jenkins。
執行以下命令,建立命名空間
cicd
。kubectl create ns cicd
建立NAS共用儲存卷。
共用儲存卷用於儲存Jenkins home中的資料,否則Jenkins Master Pod重啟後,Jenkins的所有配置將會丟失。
當您選擇CSI外掛程式時,建立具體操作,請參見使用NAS靜態儲存卷。
當您選擇Flexvolume外掛程式時,建立具體操作,請參見使用NAS靜態儲存卷。
執行以下命令,將Jenkins部署至
cicd
命名空間中。helm -n cicd install jenkins jenkins/jenkins \ --set persistence.existingClaim=pvc-nas \ --set controller.serviceType="LoadBalancer" \ --set controller.adminPassword="admin"
persistence.existingClaim=pvc-nas:必選項,在
cicd
命名空間下建立的NAS儲存卷的PVC名稱為pvc-nas。controller.serviceType="LoadBalancer":可選項,預設為ClusterIP類型。
controller.adminPassword="admin":可選項,預設將產生隨機密碼。隨機密碼擷取方式請參見如何通過LoadBalancer訪問Jenkins服務以及擷取預設隨機密碼。
更多部署相關參數,請參見helm-charts。
執行以下命令,查看並等待Jenkins Pod運行正常。
kubectl -n cicd get po
預期輸出:
NAME READY STATUS RESTARTS AGE jenkins-0 2/2 Running 0 3m3s
瀏覽器訪問Jenkins服務,並輸入使用者名稱和密碼登入。
步驟二:建立流水線任務
以建立first-pipeline流水線任務為例,在構建流水線時,Jenkins會預設從當前ACK Serverless叢集中動態啟動一個Slave Pod並執行構建任務,構建任務執行完畢後會立即釋放該Slave Pod。更多Jenkins配置資訊,請參見Jenkins。
登入Jenkins,在左側導覽列單擊New Item。
在Enter an item name地區,輸入名稱first-pipeline,選擇Pipeline類型,然後單擊OK。
在頁面頂部單擊Pipeline頁簽,選擇Hello World模板,然後單擊Save。
在頁面左側導覽列中,單擊Build Now執行構建。
在頁面左側導覽列中,單擊Build History,然後單擊1#進入該流水線詳情頁面,然後單擊Console Output即可查看流水線構建結果。
如何通過LoadBalancer訪問Jenkins服務以及擷取預設隨機密碼
Jenkins的預設服務類型是ClusterIP類型,如需使用LoadBalancer暴露服務,請執行以下命令。
kubectl -n cicd patch svc jenkins -p '{"spec": {"type": "LoadBalancer"}}'
如果您在部署Jenkins時未指定登入密碼,請執行以下命令,擷取Jenkins預設隨機密碼。
kubectl -n cicd exec -it svc/jenkins -c jenkins -- /bin/cat /run/secrets/additional/chart-admin-password && echo