在前兩集中,我們帶到了Github Actions這個CI/CD工具以及 IAM 的具體概念與內容。在今天的文章中,我們將會實際建構一個CI/CD pipeline 幫我們建構一個安全的AWS服務自動化部署流程,就此邁向維運開發的第一步。
在昨天我們知道了 IAM 是用來管理權限,可以透過Policy(由許多Statement所定義)將權限包裝成IAM User(給人)或是Role(人或服務),而在建置CI/CD Pipeline時,Role 即是我們會採用的 Solution,為了要成功建構出一個令人安心又好用的CI/CD pipeline,我們接下來就來著手準備下面這些內容:
如果你已經會這個部分可以跳過,這裡會帶你將之前我們建立的CDK專案給推到 Github 上,就可以輕鬆完成版本控制了。
如果你真的沒有使用過Git的經驗,可以先下載 Git 以及創建一個 Github 帳號
這裡推薦一個入門影片PAPAYA電腦教室
裡面有下載以及關於Git操作基本觀念的介紹(一定要了解一下commit, push, pull還有merge等基本名詞)
創立完帳號並登入過後,點Repository->New 或是直接使用URL https://github.com/new 來創立你的Repo
接下來進你常用的程式編輯器(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到底是什麼?
我們之前介紹過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吧
首先在Github的網頁上點選Action->Set up a workflow yourself
這片區域是你撰寫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程式碼確保他沒有撰寫錯誤
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
uses: actions/checkout@v3
會將儲存庫的程式碼檢出到 GitHub 的虛擬環境中,方便後續操作。
run
run: pip install -r requirements.txt
會安裝 Python 依賴。
GitHub Actions 提供許多常用的預建 action(例如設置 Python、Node.js),可以透過 GitHub Marketplace 找找看有沒有現成的好用模板。
接下來只要將剛剛寫好的yaml貼入頁面中點選右上角的commit就可以將workflow更新了
因為同時也push到main上了,所以剛好會觸發一次工作流程
可以看到一切流程都很順利 成功編譯出了CloudFormation template!
如此一來我們就能兼顧版本控制的同時確保程式碼的品質,但接下來我們還要串上AWS服務,讓他能夠正式完成部署!
今天介紹了Github Actions並完成了一個初步的Pipeline建置!希望大家覺得內容有幫助,在下一篇中我們會來串接AWS,並學習金鑰的管理方法以及IAM的Policy的撰寫,請大家敬請期待囉