前言
本文為〈Set Up A CI/CD Pipeline With Kubernetes〉系列文章(deprecated)的學習筆記。
環境
- macOS
- Docker (with HyperKit)
目標
使用 Kubernetes 和 Jenkins 為範例應用程式建立 CI/CD 自動化部署流程。
環境設定
啟動 minikube。
1 | minikube start |
持續整合工具
進到 kubernetes-ci-cd 專案,用寫好的 YAML 文件建立一個 Jenkins 容器。
1 | docker build -t 127.0.0.1:30400/jenkins:latest -f applications/jenkins/Dockerfile applications/jenkins |
- 注意 Dockerfile 中的
jenkins/jenkins
映像檔版本不要低於 2.226。
再次將處理 proxy 的容器啟動。
1 | docker start socat-registry |
將 Jenkins 的 Docker image 推送到本地的映像檔儲存庫。
1 | docker push 127.0.0.1:30400/jenkins:latest |
開啟儲存庫的頁面,會看到 Jenkins 出現在列表上。
1 | minikube service registry-ui |
將用來處理 proxy 的容器停止。
1 | docker stop socat-registry |
再使用寫好的 YAML 文件,部署一個 Jenkins 應用程式。
1 | kubectl apply -f manifests/jenkins.yaml |
查看 Jenkins 的部署狀態。
1 | kubectl rollout status deployments/jenkins |
- 如果出現錯誤,到原專案查看 Pull Request 可能需要被修正的項目。
開啟 Jenkins 服務。
1 | minikube service jenkins |
印出 Jenkins 初始密碼。
1 | kubectl exec -it `kubectl get pods --selector=app=jenkins --output=jsonpath={.items..metadata.name}` cat /var/jenkins_home/secrets/initialAdminPassword |
將密碼輸入後,點選「Install suggested plugins」安裝相關套件。
建立一組使用者帳號,並點選「Save and Continue」,最後點選「Restart」(如果畫面沒有更新,則重新整理頁面)。
安裝套件
登入 Jenkins 後,先到 Plugin Manager 頁面安裝 Kubernetes Continuous Deploy 套件。
為了讓 Jenkins 能夠存取 Kubernetes 的 cluster,需要提供一組 kubeconfig 設定檔。點選「Credentials」,選擇「Jenkins」的「Global credentials」選項,然後點選「Add Credentials」。
新增以下內容:
- Kind: Kubernetes configuration (kubeconfig)
- ID: kenzan_kubeconfig
- Kubeconfig: From a file on the Jenkins master
- File: /var/jenkins_home/.kube/config
最後點選「Ok」。
建置流程
回到首頁後,進行以下操作:
- 點選「New Item」;
- 輸入名稱「Hello-Kenzan Pipeline」,並選擇「Pipeline」選項;
- 將「Pipeline」區塊的「Definition」設定為「Pipeline script from SCM」;
- 將「SCM」設定為「Git」;
- 將「Repository URL」設定為:https://github.com/<YOUR_REPOSITORY>/kubernetes-ci-cd
由於 Jenkinsfile
已經被寫好在專案的根目錄,因此點選「Save」。
執行部署
點選「Build Now」執行 pipeline。
如果失敗:
- 可能是 YAML 文件的問題,到原專案查看 Pull Request 可能需要被修正的項目。
- 可能是 executor 的問題,到 Manage Nodes 頁面,將 master 的「# of executors」設定為 1 或更多。
Jenkins 會從 GitHub 將程式碼拉取下來,並建立映像檔後進行部署。
最後,啟動 hello-kenzan 服務。
1 | minikube service hello-kenzan |