430 字
2 分鐘
Azure DevOps 部署到 GKE (7) — Deploy
前面講了六篇終於要進讓自動部署的環節了,我們的DevOps流程如下:
- 將Docker image打包好後,上傳到Google Artifact Registry
- 使用kubectl部署K8s
新增kubernetes.yml
我們接續上篇的Azure DevOps Repo繼續改,將原本只有打包image的功能,再加上部署到Kubernetes。
新增一個kubernetes.yml,這個yml使用ingress並由Google簽署SSL憑證,網站網域是nginx-ado.twcanhelp.me。其中image的tag會從devops中產生。
apiVersion: apps/v1kind: Deploymentmetadata: name: deployment-nginx-4spec: replicas: 1 selector: matchLabels: app: pod-nginx-4 template: metadata: labels: app: pod-nginx-4 spec: containers: - name: nginx image: $image:$tag ports: - containerPort: 80
---apiVersion: v1kind: Servicemetadata: name: service-nginx-4spec: type: ClusterIP ports: - port: 80 protocol: TCP targetPort: 80 selector: app: pod-nginx-4
---apiVersion: networking.gke.io/v1kind: ManagedCertificatemetadata: name: cert-nginx-4spec: domains: - nginx-ado.twcanhelp.me
---apiVersion: networking.k8s.io/v1kind: Ingressmetadata: name: ingress-nginx-4 annotations: networking.gke.io/managed-certificates: cert-nginx-4spec: rules: - host: nginx-ado.twcanhelp.me http: paths: - path: / pathType: Prefix backend: service: name: service-nginx-4 port: number: 80修改azure-pipelines.yml
再來修改azure-pipelines.yml,最後使用kubectl 進行部署。
trigger:- main
resources:- repo: self
variables: image: 'asia-east1-docker.pkg.dev/it-production-377006/nginx/b' tag: '$(Build.BuildNumber)'
stages:- stage: Build displayName: Build image jobs: - job: Build displayName: Build pool: vmImage: ubuntu-latest steps: - task: DownloadSecureFile@1 name: GCPsecret displayName: 'Download CA certificate' inputs: secureFile: 'a.json' - script: | gcloud auth login --cred-file $(GCPsecret.secureFilePath) gcloud auth configure-docker --quiet asia-east1-docker.pkg.dev displayName: Gcloud login & Get docker token - task: Docker@2 displayName: Build & Push image inputs: command: buildAndPush dockerfile: '$(Build.SourcesDirectory)/Dockerfile' repository: $(image) tags: | $(tag) - script: | echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key --keyring /usr/share/keyrings/cloud.google.gpg add - sudo apt-get update && sudo apt-get install -y google-cloud-sdk-gke-gcloud-auth-plugin gcloud container clusters get-credentials autopilot-cluster-1 --region asia-east1 --project it-production-377006 displayName: Install dependency packages # https://cloud.google.com/blog/products/containers-kubernetes/kubectl-auth-changes-in-gke - script: | export image=$(image) export tag=$(tag) envsubst < kubernetes.yml | kubectl apply -f - displayName: Deploy to K8s然後等他Pipelines跑完。

到GKE上就可以看到他部署完了,到Ingress找到Public IP,設定到DNS就完成了。

結語
我們透過Azure DevOps 使用kubectl就可以將我們k8s yml部署到GKE了。