iT邦幫忙

2024 iThome 鐵人賽

DAY 21
0
DevOps

我獨自升級:從水管工走向 DataOps系列 第 21

【Day 21】Data Pipeline CI / CD - AWS CodeBuild

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20241005/20135427Tkkh6R8puL.png
圖片來源:官方介紹

基本介紹

AWS CodeBuild 是無伺服器(Serverless)的持續整合(CI)服務,主要提供自動編譯程式碼、運行測試並生成可部署的文件,在整個 AWS CI/CD 流程中是最重要的,CodeBuild 優勢在於它的無伺服器特性,所以大幅降低維護的負擔,另外與 AWS 服務的整合也是另一個優勢。

CodeBuild 核心功能

  • 持續整合與測試: CodeBuild 支援自動從版本控制系統中提取代碼,進行構建和測試,確保每次代碼提交後都能快速發現問題。
  • 自動化編譯和部署: CodeBuild 可以根據配置文件,自動完成編譯過程並生成可部署的環境,並儲存到 CodeArtifacts。

CodeArtifacts 也是 AWS 的一項服務,可以用套件管理工具將不同環境需要的套件,打包成所需的最終成品放進去,軟體套件彼此的相依關係也會儲存

  • 無伺服器架構: CodeBuild 由 AWS 全面管理,開發者不需要擔心服務器配置、維護或擴展問題,專注於開發工作。
  • 支持多語言與多框架: CodeBuild 支援 Java、Python、Node.js、Go 等多種語言和框架,且可以自定義構建環境,滿足不同技術棧的需求。

基本上 CodeBuild 的使用除了編譯、生成環境文件(如 Docker Image)、就是建立測試環境執行測試,但是如果是較單純的部署也是可以透過 CodeBuild 來實作,不需要使用 AWS 的 CodeDeploy/images/emoticon/emoticon07.gif

CodeBuild 設定說明

  1. 建置專案 (Build projects)
    建置專案定義了 CodeBuild 如何執行構建。它包含有關源代碼位置、使用的構建環境、要運行的構建命令以及存儲構建輸出的位置等信息。

  2. 建置規格 (Buildspec)
    Buildspec 是一個 YAML 文件,定義了 CodeBuild 執行建立時要運行的命令和相關設定。它通常位於源代碼存儲庫的根目錄,名為 buildspec.yml

  3. 環境 (Environments)
    CodeBuild 環境是執行 CodeBuild 當中程式的容器化環境。AWS 提供了多種設定環境種類,涵蓋常見的操作系統、編程語言和工具。您也可以創建自訂環境。

  4. 原始碼 (Source)
    原始碼指定了構建的輸入位置。CodeBuild 支持多種源代碼提供商,包括 AWS CodeCommit、GitHub、Bitbucket 等。

【Day 20】Data Pipeline CI / CD - AWS CodeCommit

  1. 成品 (Artifacts)
    成品是構建過程的輸出。這可能是編譯後的應用程序、測試報告或其他文件。CodeBuild 可以將這些成品存儲在 Amazon S3 存儲桶中。

buildspec.yml 介紹

ㄧ、基本架構

version: 0.2

env:
  variables:
    key: "value"
  secrets-manager:
    key: secret-id:json-key:version-stage:version-id
  git-credential-helper: no | yes

phases:
  install:
    run-as: Linux-user-name
    on-failure: ABORT | CONTINUE
    runtime-versions:
      runtime: version
    commands:
      - command
    finally:
      - command
  pre_build:
    run-as: Linux-user-name
    on-failure: ABORT | CONTINUE
    commands:
      - command
    finally:
      - command
  build:
    {... 如同 pre_build ...}
  post_build:
    {... 如同 pre_build ...}
artifacts:
  files:
    - ...
  name: ...

1. 環境變量設置 (env)

  • variables: 定義環境變數
  • secrets-manager: 如果是較重要的變數或設定,會設定在 AWS Secrets Manager
  • git-credential-helper: 配置 Git 憑證幫助程式訪問 Private 存儲庫

2. 建立階段 (phases)

建立過程分為四個主要階段:install、pre_build、build 和 post_build。

四個階段習慣上會分成不同功能,如果想要用一個達成其實也可以:

  • install 階段:用於安裝項目依賴和工具。
  • pre_build 階段:用於設置環境、登錄到存儲庫等預備工作。
  • build 階段:執行實際的構建過程,如編譯代碼、運行測試等。
  • post_build 階段:用於清理、發送通知或將構建結果上傳到指定位置等後續工作。

每個階段的結構都相似,且都是可選的,架構細節如下:

  • run-as: 指定運行命令的 Linux 用戶名。
  • on-failure: 定義當命令失敗時的行為(中止或繼續)。
  • runtime-versions: 指定運行時版本(僅在 install 階段可用)。
  • commands: 該階段要執行的命令列表。
  • finally: 無論 commands 的結果如何都會執行的命令。

3. artifacts : 建立過程輸出文件存放的相關設定

二、Python 專案範例

version: 0.2

phases:
  install:
    runtime-versions:
      python: 3.9
    commands:
      - echo "Installing dependencies..."
      - pip install --upgrade pip
      - pip install -r requirements.txt
  pre_build:
    commands:
      - echo "Running static code analysis..."
      - flake8 .
  build:
    commands:
      - echo "Running unit tests..."
      - pytest tests/
      - echo "Building the application..."
      - python setup.py
  post_build:
    commands:
      - echo "Running integration tests..."
      - python -m pytest integration_tests/

artifacts:
  files:
    - '**/*'
  name: my-python-app-$(date +%Y-%m-%d)
  • install(安裝階段):指定 Python 3.9 為運行版本、更新 pip、安裝 requirements.txt 中的模組
  • pre_build(預建立階段):使用 flake8 進行靜態代碼分析
  • build(建立階段):pytest運行單元測試、建立應用程序
  • post_build(建立後階段):pytest運行整合測試
  • artifacts:'**/*' 表示包含所有文件和子目錄,name 是定義名稱,這裡使用動態名稱,包含app名稱和當前日期

預設情況下,檔案名稱是 buildspec.yml,但在建立 CodeBuild 的時候也可以另外設定,所以也會依照不同的需求去設定名稱,例如:buildspec_debug.ymlbuildspec_release.yml


上一篇
【Day 20】Data Pipeline CI / CD - AWS CodeCommit
系列文
我獨自升級:從水管工走向 DataOps21
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言