430 字
2 分鐘
Azure DevOps 部署到 GKE (7) — Deploy
2023-03-26
無標籤

前面講了六篇終於要進讓自動部署的環節了,我們的DevOps流程如下:

  1. 將Docker image打包好後,上傳到Google Artifact Registry
  2. 使用kubectl部署K8s

新增kubernetes.yml#

我們接續上篇的Azure DevOps Repo繼續改,將原本只有打包image的功能,再加上部署到Kubernetes。

新增一個kubernetes.yml,這個yml使用ingress並由Google簽署SSL憑證,網站網域是nginx-ado.twcanhelp.me。其中image的tag會從devops中產生。

apiVersion: apps/v1
kind: Deployment
metadata:
name: deployment-nginx-4
spec:
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: v1
kind: Service
metadata:
name: service-nginx-4
spec:
type: ClusterIP
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: pod-nginx-4
---
apiVersion: networking.gke.io/v1
kind: ManagedCertificate
metadata:
name: cert-nginx-4
spec:
domains:
- nginx-ado.twcanhelp.me
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-nginx-4
annotations:
networking.gke.io/managed-certificates: cert-nginx-4
spec:
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了。