用 CodeBuild 與 buildspec.yml 自動化建置

在 AWS 上自動化部署

Dunieski Otano

Amazon Web Services Solutions Architect

CodeBuild 能做什麼

  • CodeBuild 是一項全代管建置服務
  • 無需佈建或管理伺服器
  • 暫時性容器中執行建置
  • 自動擴縮;只為建置分鐘數付費
  • 可在 CodePipeline 中作為 Build 階段整合

 

CodeBuild 受管服務與暫時性容器的生命週期示意圖

在 AWS 上自動化部署

buildspec.yml 檔案

  • buildspec.yml:位於原始碼根目錄的 YAML 檔
  • 定義 CodeBuild 在建置期間要執行的動作
  • 依序執行四個階段:
    • install:安裝相依套件與工具
    • pre_build:建置前的設定任務
    • build:編譯程式碼並執行測試
    • post_build:封裝成品並清理

buildspec

在 AWS 上自動化部署

實際的 buildspec.yml 範例

  • installpip install -r requirements.txt
  • pre_build[ -z "$DB_URL" ] && exit 1
  • buildpytest tests/
  • post_build:先 zip -r app.zip .,再 echo "Build completed"

淺色主題的程式碼編輯器,顯示含四個階段的 buildspec.yml;build 執行 pytest 測試,post_build 將程式封裝為 app.zip,作為管線成品輸出

在 AWS 上自動化部署

建置環境設定

 

4-codebuild-environment-config-compute-envvars-caching.png

  • 運算規格:small、medium、large、2xlarge
    • 依建置複雜度與速度需求選擇
  • 環境變數:將設定傳入建置
    • 祕密請放在 Parameter Store 或 Secrets Manager
  • 相依快取:在建置間快取已下載套件
    • 對大型專案可大幅縮短建置時間
在 AWS 上自動化部署

成品輸出與管線整合

 

5-codebuild-artifact-output-s3-codepipeline-handoff.png

  • artifacts 區段定義 CodeBuild 的輸出
  • files:檔案或樣式清單;base-directory:根路徑
  • 輸出成品會存到 S3,並自動傳遞到下一階段
  • 成品路徑錯誤會導致部署失敗,即使建置成功
在 AWS 上自動化部署

完整的建置-測試-部署鏈

  • 開發者將程式碼推送到 CodeCommit
  • CodePipeline 自動觸發
  • CodeBuild:install -> pre_build -> build -> post_build
  • 建置成品流向 CodeDeploy
  • 應用程式部署到目標環境

完整 CI/CD 鏈:CodeCommit、CodeBuild 各階段、CodeDeploy

在 AWS 上自動化部署

一起來練習吧!

在 AWS 上自動化部署

Preparing Video For Download...