iT邦幫忙

2025 iThome 鐵人賽

DAY 11
0
Build on AWS

一步步帶你認識 Cloud Native —— 用AWS免費服務打造雲原生專案系列 第 11

Day 11 Github Actions Workflow建置 | AWS CDK + CI/CD 實現自動化部署 (2)

  • 分享至 

  • xImage
  •  

歡迎來到本系列第十一篇文章


在前兩集中,我們帶到了Github Actions這個CI/CD工具以及 IAM 的具體概念與內容。在今天的文章中,我們將會實際建構一個CI/CD pipeline 幫我們建構一個安全的AWS服務自動化部署流程,就此邁向維運開發的第一步。


接下來要做的事

昨天我們知道了 IAM 是用來管理權限,可以透過Policy(由許多Statement所定義)將權限包裝成IAM User(給人)或是Role(人或服務),而在建置CI/CD Pipeline時,Role 即是我們會採用的 Solution,為了要成功建構出一個令人安心又好用的CI/CD pipeline,我們接下來就來著手準備下面這些內容:

  1. 建置一個 Github Repository
  2. 建立一個 Github Actions Workflow
  3. 想辦法讓 Workflow 能連上 AWS

建置Github Repository

如果你已經會這個部分可以跳過,這裡會帶你將之前我們建立的CDK專案給推到 Github 上,就可以輕鬆完成版本控制了。

如果你真的沒有使用過Git的經驗,可以先下載 Git 以及創建一個 Github 帳號
這裡推薦一個入門影片PAPAYA電腦教室
裡面有下載以及關於Git操作基本觀念的介紹(一定要了解一下commit, push, pull還有merge等基本名詞)

創立完帳號並登入過後,點Repository->New 或是直接使用URL https://github.com/new 來創立你的Repo
https://ithelp.ithome.com.tw/upload/images/20250820/20178103OzeEQaOVO5.png

接下來進你常用的程式編輯器(IDE)裡找到我們之前建置的CDK專案資料夾

# 進入專案資料夾
cd my-project

# 如果還沒初始化 git,就先做
git init

# 把所有檔案加進版本控制
git add .

# 建立一次提交
git commit -m "first commit"

# 設定遠端倉庫(把 URL 換成你 GitHub repo 的 HTTPS/SSH 連結)
git remote add origin https://github.com/<你的帳號>/<repo名>.git

# 把當前分支推到 GitHub,一般預設用 main
git branch -M main
git push -u origin main

如果有遇到推不上去的問題,那大概是有conflict,pull下來解掉之後再commit就可以merge了

或是自己開發時蠻推薦使用Github Desktop 有 GUI介面幫你整理這些功能。

建立Github Actions Workflow

Github Actions到底是什麼?
我們之前介紹過Github Actions是一個可以幫助我們做CI/CD的工具,可以接受push之類的觸發器來啟動一套自動化流程。

但具體而言到底是怎麼樣的自動化呢?你可以這樣想像:
Github為你準備了一台電腦,而你可以告訴他當你把程式碼推上去之後要做甚麼

大概有以下這幾點是我們需要去思考的:

1.需要什麼樣的電腦(作業系統配置)
2.需要什麼樣的環境(程式依賴、套件依賴安裝)
3.想要他做什麼(CI/CD流程)

以 AWS CDK 專案為例
假設我們的目標是自動部署靜態網站:

觸發器 (Trigger):每次 push 到 main 分支

步驟 (Steps):

Checkout 程式碼

安裝 Node.js & Python(確保 CDK CLI 與 SDK 環境就緒)

安裝依賴 (pip install -r requirements.txt, npm install -g aws-cdk)

編譯或生成 CDK template (cdk synth)

部署到 AWS (cdk deploy --require-approval never)

而過程中的每一步 Github Actions 會幫你檢測是失敗還是成功
於是建立良好的CI/CD流程更可以幫助你精準定位出錯的地方,讓迭代能更加順利快速

有了基本概念後,我們來創建我們的第一個Workflow吧

https://ithelp.ithome.com.tw/upload/images/20250821/20178103dBRoXZt27P.png

首先在Github的網頁上點選Action->Set up a workflow yourself

https://ithelp.ithome.com.tw/upload/images/20250821/20178103pukYrCxf10.png

這片區域是你撰寫Workflow的地方,撰寫完畢後會commit到左上角的檔案目錄(你的repo名稱/.github/workflows/workflow名稱.yaml)

以下我們來撰寫一個簡單的workflow並了解它的內容

name: Deploy with AWS CDK

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Set up Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '20'  # 使用支持的 Node.js 版本(建議 16 或更高)

      - name: Install AWS CDK CLI
        run: npm install -g aws-cdk

      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: '3.11'  # 根據你的 CDK 專案需求設置 Python 版本

      - name: Install Python dependencies
        run: pip install -r requirements.txt
        working-directory: ./  # 確保 requirements.txt 在正確路徑

      - name: CDK Synth
        run: cdk synth

目前這個 workflow 會在你 push 程式碼到 main 時幫你安裝依賴並且編譯你的cdk程式碼確保他沒有撰寫錯誤
https://ithelp.ithome.com.tw/upload/images/20250821/20178103hJwLiGVfyN.png

name: Deploy with CDK

on:
  push:
    branches:
        - main

第一行是一個流的名稱,接下來用on:來定義在什麼時候觸發這個流
push:當有人Push時 schedule在特定時間觸發(workflow_run在其他工作流結束後觸發

但我們今天就用最單純的 push 發生在 "main" 這個 branch 上時觸發

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Set up Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '20'  # 使用支持的 Node.js 版本(建議 16 或更高)

      - name: Install AWS CDK CLI
        run: npm install -g aws-cdk

      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: '3.11'  # 根據你的 CDK 專案需求設置 Python 版本

      - name: Install Python dependencies
        run: pip install -r requirements.txt
        working-directory: ./  # 確保 requirements.txt 在正確路徑

      - name: CDK Synth
        run: cdk synth
    

在以上的流程中,我們定義了一個名為 deploy 的 job,並使用 steps 來指定其具體執行步驟。讓我們來仔細看看到底都寫了些什麼:

** runs-on**
指定工作流程運行的作業系統環境。例如:

runs-on: ubuntu-latest

steps

定義 job 的執行步驟,包含以下兩個重要部分:
uses

  • 引用 GitHub Actions 市場中預先定義的 action。例如:
uses: actions/checkout@v3

會將儲存庫的程式碼檢出到 GitHub 的虛擬環境中,方便後續操作。

run

  • 在虛擬環境的命令列介面(CLI)中執行指定的 shell 命令,類似於在本地終端機輸入指令。例如::
run: pip install -r requirements.txt

會安裝 Python 依賴。

GitHub Actions 提供許多常用的預建 action(例如設置 Python、Node.js),可以透過 GitHub Marketplace 找找看有沒有現成的好用模板。

接下來只要將剛剛寫好的yaml貼入頁面中點選右上角的commit就可以將workflow更新了

因為同時也push到main上了,所以剛好會觸發一次工作流程
https://ithelp.ithome.com.tw/upload/images/20250821/20178103hzNrv4yIJi.png

可以看到一切流程都很順利 成功編譯出了CloudFormation template!
如此一來我們就能兼顧版本控制的同時確保程式碼的品質,但接下來我們還要串上AWS服務,讓他能夠正式完成部署!

結語

今天介紹了Github Actions並完成了一個初步的Pipeline建置!希望大家覺得內容有幫助,在下一篇中我們會來串接AWS,並學習金鑰的管理方法以及IAM的Policy的撰寫,請大家敬請期待囉


上一篇
Day10 IAM 權限&憑證管理 | AWS CDK + CI/CD 實現自動化部署 (1)
下一篇
Day12 告別 GitHub Secret:IAM Role 與 OIDC 實戰 | AWS CDK + CI/CD 實現自動化部署 (3)
系列文
一步步帶你認識 Cloud Native —— 用AWS免費服務打造雲原生專案24
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
viiccwen
iT邦新手 5 級 ‧ 2025-08-21 11:00:31

Nice Try Diddy

我要留言

立即登入留言