☁️ GitHub Actions 自動部署 Docker 映像到 Azure Web App、ECS、GKE 的實戰指南
📖 文章摘要(Meta Description)
學會如何將 GitHub Actions 建構好的 Docker 映像,自動部署到 Azure Web App、AWS ECS、Google Kubernetes Engine(GKE)。從權限設定到 YAML Workflow 實作,帶你一次搞懂雲端部署流程!
🚀 為什麼用 GitHub Actions 搭配雲平台部署?
CI/CD 不應只停留在「建構映像」,還應該延伸到「部署到生產環境」。透過 GitHub Actions,我們可以:
-
✅ 持續部署(Continuous Deployment)
-
✅ 自動推送映像到雲平台
-
✅ 減少人為操作錯誤
-
✅ 加速交付週期
🗺 本文目錄
<a name="azure"></a>
☁️ 1. 部署到 Azure Web App for Containers
✅ 先決條件:
-
已建立 Azure Web App(Linux 容器類型)
-
建構完成並推送到 Docker Hub 或 Azure Container Registry (ACR)
🔐 建立 GitHub Secrets:
Key | 說明 |
---|---|
AZURE_WEBAPP_NAME | Web App 名稱 |
AZURE_PUBLISH_PROFILE | 從 Azure Portal 匯出來的發佈設定(Base64) |
➡️ Azure Portal → Web App → 部署中心 → 下載發佈設定檔
✍️ Workflow 範例:
name: Deploy to Azure Web App
on:
push:
branches: [main]
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Deploy to Azure Web App
uses: azure/webapps-deploy@v3
with:
app-name: ${{ secrets.AZURE_WEBAPP_NAME }}
publish-profile: ${{ secrets.AZURE_PUBLISH_PROFILE }}
images: yourdockerhubusername/yourapp:latest
<a name="ecs"></a>
🐳 2. 部署到 AWS ECS Fargate
✅ 先決條件:
-
已建立 ECS Cluster、Task Definition 與 Service
-
使用 Docker Hub 或 Amazon ECR 儲存映像
🔐 建立 Secrets:
Key | 說明 |
---|---|
AWS_ACCESS_KEY_ID | IAM 使用者金鑰 |
AWS_SECRET_ACCESS_KEY | IAM 使用者密鑰 |
ECS_CLUSTER | ECS 群組名稱 |
ECS_SERVICE | ECS 服務名稱 |
ECS_TASK_DEFINITION | JSON 定義或已註冊的名稱 |
✍️ Workflow 範例:
name: Deploy to AWS ECS
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v4
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ap-northeast-1
- name: Deploy to ECS
uses: aws-actions/amazon-ecs-deploy-task-definition@v1
with:
service: ${{ secrets.ECS_SERVICE }}
cluster: ${{ secrets.ECS_CLUSTER }}
task-definition: ${{ secrets.ECS_TASK_DEFINITION }}
✅ 若有多容器或動態更新映像 URI,可以先 sed
替換 task definition JSON,再註冊新版本。
<a name="gke"></a>
☸️ 3. 部署到 Google Kubernetes Engine(GKE)
✅ 先決條件:
-
已建立 GKE Cluster 並開啟 Kubernetes API
-
已將映像推送到 Google Container Registry (GCR) 或 Artifact Registry
-
已建立 Service Account 並下載 JSON 金鑰檔
🔐 建立 Secrets:
Key | 說明 |
---|---|
GCP_SA_KEY | GCP Service Account JSON 金鑰(base64) |
GKE_PROJECT | GCP 專案名稱 |
GKE_CLUSTER | GKE 群組名稱 |
GKE_ZONE | GKE 區域(如 asia-east1-b) |
✍️ Workflow 範例:
name: Deploy to GKE
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up GCP credentials
uses: google-github-actions/auth@v1
with:
credentials_json: ${{ secrets.GCP_SA_KEY }}
- name: Set up kubectl
uses: google-github-actions/setup-gcloud@v1
with:
project_id: ${{ secrets.GKE_PROJECT }}
- run: |
gcloud container clusters get-credentials ${{ secrets.GKE_CLUSTER }} \
--zone ${{ secrets.GKE_ZONE }} --project ${{ secrets.GKE_PROJECT }}
- name: Deploy to GKE
run: |
kubectl apply -f k8s/deployment.yaml
kubectl apply -f k8s/service.yaml
📝 你需要在專案內準備好 k8s/deployment.yaml
和 service.yaml
等 Kubernetes 定義檔。
<a name="conclusion"></a>
🧠 結語與延伸學習
透過 GitHub Actions + 雲平台部署,開發者可以打造:
-
💡 自動化的 CI/CD 工作流程
-
🚀 更穩定、快速的交付流程
-
☁️ 無痛整合多雲(Multi-Cloud)架構
留言
張貼留言