實作系列 - 2: 建構 AWS 上的 CICD 流程(2)

更新 發佈閱讀 7 分鐘

上週我們介紹了 AWS CICD 的架構與運作流程,這次將深入介紹如何建立 CodeBuild 的部分!

CodeBuild 簡介

AWS CodeBuild 的主要功能是編譯、建構並測試程式碼,確保應用程式能在不同環境中順利運行。詳細的建構流程會依據指定的 buildspec.yml 文件進行,這個文件定義了安裝、建構、測試和後處理的各個階段,因此 buildspec.yml 是必不可少的。

建構完成且確認無誤後,通常會將結果儲存在 Amazon S3 中,並觸發後續的部署流程。當然,你也可以利用 Amazon SNS 發送完成通知至指定的頻道。

建構規範 buildspec.yml

buildspec.yml 文件通常位於程式碼的根目錄下,其中包含了建構過程的各個階段。基本上,buildspec.yml 的結構與其他 CI 系統的配置文件相似,因此如果你有舊的 CI 流程,可以直接參考並改寫成適用於 AWS 的版本。

接下來,我們來看看 buildspec.yml 的各個部分:

版本 version

指定使用的 buildspec 版本,例如 version: 0.2

設定檔 env

在這一部分,我們可以定義環境變數,這些變數會在建構過程中被引用。有些變數名稱是 AWS 預設的,因此需要特別注意,可以參考 AWS 的環境變數文檔

階段 phases

建構過程分為四個階段,按順序執行:

  • install:安裝依賴項,如 SDK、工具、庫等。
  • pre_build:執行建構前的操作,如檢查環境變數、設置配置等。
  • build:實際的建構步驟,如編譯代碼、運行測試、確認 Coding Style 等。
  • post_build:建構後的操作,如部署或將建構產物上傳到 S3。

緩存 cache

這一部分用來定義如何緩存建構過程中的檔案,從而加速後續建構。通常會緩存依賴項,例如 node_modules 或 vendor 等。

建構產物 artifacts

此部分定義了建構完成後需要保存或傳送的檔案。例如,二進位檔、壓縮包(zip、jar)或目錄結構等。

此外,appspec.yml 文件是下一步 CodeDeploy 部署過程的必要文件,記得在 artifacts 中指定此檔案。

建構規範範例

以下是一個簡單的 buildspec.yml 範例:

version: 0.2
env:
GITHUB_TOKEN: "***"
phases:
install:
on-failure: ABORT
runtime-versions:
php: 7.4
nodejs: 10
commands:
- REPO_URL=$(echo ${CODEBUILD_SOURCE_REPO_URL} | sed 's@^https://@@')
- git remote add origin <https://${GITHUB_TOKEN}@$>{REPO_URL}
- BUILD_BRANCH=$(echo ${CODEBUILD_WEBHOOK_BASE_REF} | sed 's@^refs/heads/@@')
- php -v
- apt-get update
- apt-get install -y memcached libmemcached-tools libmemcached-dev
- pecl install memcached
pre_build:
on-failure: ABORT
commands:
- composer config -g github-oauth.github.com ${GITHUB_TOKEN}
- composer install --prefer-dist --optimize-autoloader
- ./scripts/codebuild.sh frontInstall
- ./scripts/codebuild.sh endInstall
build:
on-failure: ABORT
commands:
- composer phpcs
- composer test
post_build:
on-failure: ABORT
commands:
- ls -la
cache:
paths:
- 'vendor/**/*'
- 'node_modules/**/*'
artifacts:
files:
- 'app/**/*'
- 'scripts/**/*'
- 'vendor/**/*'
- 'appspec.yml'

最後結束前的確認

在開心寫完並將 buildspec.yml 檔案推送至 Git 之前,記得先在本地環境測試一遍。即使你是將舊有的 CI 文件改寫,也必須確保它能正常運行。CodeBuild 的環境變數眾多且容易混淆,若未事先確認,可能會出現錯誤,且一旦上傳至 AWS 測試,每次執行都會產生費用,雖然費用不高,但仍需注意。

這篇就介紹到這裡,下次會繼續介紹 CICD 流程的其他部分。

參考資料

  1. https://www.ernestchiang.com/zh/notes/aws/codebuild/#文件
  2. https://shazi.info/一條龍佈署-cicd-從-github-跑-travis-到-aws-codedeploy-travis-到-codedeploy/
  3. https://aws.plainenglish.io/how-to-run-local-builds-using-the-aws-codebuild-agent-13bd78dacbf2
  4. https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-env-vars.html
留言
avatar-img
留言分享你的想法!
avatar-img
林柏宇的沙龍
2會員
57內容數
test
林柏宇的沙龍的其他內容
2025/05/18
本文將介紹如何在 AWS 雲端環境中建立 CI/CD 流程,涵蓋使用 AWS 的 CodeBuild、CodeDeploy 和 CodePipeline 等服務。這個流程讓每次程式碼上傳後,可以自動化執行測試和部署。文章中將說明運作流程、建構過程以及最佳實踐,幫助讀者順利導入 CI/CD。
Thumbnail
2025/05/18
本文將介紹如何在 AWS 雲端環境中建立 CI/CD 流程,涵蓋使用 AWS 的 CodeBuild、CodeDeploy 和 CodePipeline 等服務。這個流程讓每次程式碼上傳後,可以自動化執行測試和部署。文章中將說明運作流程、建構過程以及最佳實踐,幫助讀者順利導入 CI/CD。
Thumbnail
2025/05/11
在軟體工程中,利用臨時儲存來提升系統性能是個重要的方法。本文深入探討了各種臨時儲存技術的使用模式和特點。將分析不同快取類型如快取的工作原理、 Redis 的高效儲存以及 Session 如何在無狀態的 HTTP 協議中保持用戶狀態。本文將使開發者更瞭解這些技術在提高應用效能中的關鍵角色。
Thumbnail
2025/05/11
在軟體工程中,利用臨時儲存來提升系統性能是個重要的方法。本文深入探討了各種臨時儲存技術的使用模式和特點。將分析不同快取類型如快取的工作原理、 Redis 的高效儲存以及 Session 如何在無狀態的 HTTP 協議中保持用戶狀態。本文將使開發者更瞭解這些技術在提高應用效能中的關鍵角色。
Thumbnail
2025/05/04
本文詳細介紹了 RabbitMQ 的基本概念、架構以及其在現代系統中的重要性。RabbitMQ 作為一套開源的訊息佇列服務,旨在有效管理通訊流,增強系統穩定性和擴展性。透過描述佇列、交換器及消費者等核心組件的功能,並探討其在微服務和事件驅動架構中的應用。
Thumbnail
2025/05/04
本文詳細介紹了 RabbitMQ 的基本概念、架構以及其在現代系統中的重要性。RabbitMQ 作為一套開源的訊息佇列服務,旨在有效管理通訊流,增強系統穩定性和擴展性。透過描述佇列、交換器及消費者等核心組件的功能,並探討其在微服務和事件驅動架構中的應用。
Thumbnail
看更多
你可能也想看
Thumbnail
還在煩惱平凡日常該如何增添一點小驚喜嗎?全家便利商店這次聯手超萌的馬來貘,推出黑白配色的馬來貘雪糕,不僅外觀吸睛,層次豐富的雙層口味更是讓人一口接一口!本文將帶你探索馬來貘雪糕的多種創意吃法,從簡單的豆漿燕麥碗、藍莓果昔,到大人系的奇亞籽布丁下午茶,讓可愛的馬來貘陪你度過每一餐,增添生活中的小確幸!
Thumbnail
還在煩惱平凡日常該如何增添一點小驚喜嗎?全家便利商店這次聯手超萌的馬來貘,推出黑白配色的馬來貘雪糕,不僅外觀吸睛,層次豐富的雙層口味更是讓人一口接一口!本文將帶你探索馬來貘雪糕的多種創意吃法,從簡單的豆漿燕麥碗、藍莓果昔,到大人系的奇亞籽布丁下午茶,讓可愛的馬來貘陪你度過每一餐,增添生活中的小確幸!
Thumbnail
在這篇文章中,我們將介紹工作與以前念書時期在開發流程上的差異,並深入瞭解CI/CD、Travis CI以及加解密的應用。 CI/CD是自動化的軟體開發實踐,而加解密則是保護機密資料安全的重要技術。
Thumbnail
在這篇文章中,我們將介紹工作與以前念書時期在開發流程上的差異,並深入瞭解CI/CD、Travis CI以及加解密的應用。 CI/CD是自動化的軟體開發實踐,而加解密則是保護機密資料安全的重要技術。
Thumbnail
對 AWS Certified Cloud Practitioner 證照考試難度的看法、學習方法和考試內容的介紹。
Thumbnail
對 AWS Certified Cloud Practitioner 證照考試難度的看法、學習方法和考試內容的介紹。
Thumbnail
在本篇文章中,將會設定 Cloud Run,以便每當將程式修改並推送到 GitHub 時,它都會使用 Cloud Build 自動構建和部署應用程序的最新版本。
Thumbnail
在本篇文章中,將會設定 Cloud Run,以便每當將程式修改並推送到 GitHub 時,它都會使用 Cloud Build 自動構建和部署應用程序的最新版本。
Thumbnail
前年第一次藉公司機會,參加了DevOpsDay的活動。雖然devOps一詞各自表述,大多狀況還是偏向維運會遇到的技術為主,做為平時開發、跟使用者訪談需求的工作內容來說,參加聚會如果沒有一定的知識,對講者所提到的狀況比較難有共鳴...
Thumbnail
前年第一次藉公司機會,參加了DevOpsDay的活動。雖然devOps一詞各自表述,大多狀況還是偏向維運會遇到的技術為主,做為平時開發、跟使用者訪談需求的工作內容來說,參加聚會如果沒有一定的知識,對講者所提到的狀況比較難有共鳴...
Thumbnail
分享關於 AWS CLF-C02 考試的準備心得,包括考試主要範圍、準備過程中的學習資源及建議,以及考試當日的流程和心得。希望本文能為欲嘗試取得此認證的人提供心得與參考。
Thumbnail
分享關於 AWS CLF-C02 考試的準備心得,包括考試主要範圍、準備過程中的學習資源及建議,以及考試當日的流程和心得。希望本文能為欲嘗試取得此認證的人提供心得與參考。
Thumbnail
在沒有分環境之前,每一隻lambda只有一個code console給所有人一起編輯,開發好了就deploy,根據設定的trigger觸發執行。 現在我們希望能夠在code console開發,然後deploy到不同的stage,目標是不同stage的api gateway能夠調用該lambda的
Thumbnail
在沒有分環境之前,每一隻lambda只有一個code console給所有人一起編輯,開發好了就deploy,根據設定的trigger觸發執行。 現在我們希望能夠在code console開發,然後deploy到不同的stage,目標是不同stage的api gateway能夠調用該lambda的
Thumbnail
前言 上次我們講到 CI/CD 中的 when 使用,今天我們要來傳授一套必殺技,我們要把過去所學的全部融合再一起,相信各位都準備好了,將 Gitlab 從枷鎖中解放出來吧,讓我們來詠唱「武裝完全支配術」 「System Call. Connect Armament. Search Archiv
Thumbnail
前言 上次我們講到 CI/CD 中的 when 使用,今天我們要來傳授一套必殺技,我們要把過去所學的全部融合再一起,相信各位都準備好了,將 Gitlab 從枷鎖中解放出來吧,讓我們來詠唱「武裝完全支配術」 「System Call. Connect Armament. Search Archiv
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News