本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 AWS CodePipeline 和 AWS CDK 設定 CI/CD 管道
創建者:康斯坦丁扎魯達夫 (AWS)、西澤佩雷拉 (AWS)、拉斯·金德 (AWS) 和亞沙達巴斯 (AWS)
程式碼儲存庫:AWS CodePipeline 搭配 CI/CD | 環境:PoC 或試點 | 技術: DevOps |
工作負載:開源 | AWS 服務:AWS CodePipeline |
首頁
透過持續整合和持續交付 (CI/CD) 自動化您的軟體建置和發行程序,可支援可重複的建置,並快速交付新功能給使用者。您可以快速輕鬆地測試每個代碼更改,並且可以在發布軟件之前 catch 並修復錯誤。透過測試和發行程序執行每項變更,您可以驗證應用程式或基礎結構程式碼的品質。CI/CD 體現了一套文化、一組作業原則和實務集合
此模式定義了 Amazon Web Services (AWS) 上可重複使用的持續整合和持續交付 (CI/CD) 管道。AWS CodePipeline 管道是使用 AWS Cloud Development Kit (AWS CDK) v2
使用時 CodePipeline,您可以透過 AWS 管理主控台界面、AWS Command Line Interface (AWS CLI) (AWS CLI)、AWS 或 AWS 開發套件,為軟體發行程序的不同階段建模。 CloudFormation此模式示範使用 AWS CDK 實作 CodePipeline 及其元件。除了建構程式庫之外,AWS CDK 還包含一個工具組 (CLI 命令cdk
),這是與 AWS CDK 應用程式互動的主要工具。除其他功能外,此工具組還提供將一或多個堆疊轉換為 CloudFormation 範本,並將其部署到 AWS 帳戶的功能。
該管道包括用於驗證第三方庫安全性的測試,並有助於確保在指定的環境中快速自動發布。您可以通過驗證過程來提高應用程序的整體安全性。
此模式的目的是加速 CI/CD 管線的使用,以部署程式碼,同時確保您部署的資源遵循 DevOps 最佳實務。實作範例程式碼
先決條件和限制
先決條件
有效的 AWS 帳戶
在下面的一個基本的了解:
AWS CDK
AWS CloudFormation
AWS CodePipeline
TypeScript
限制
此模式 TypeScript 僅會將 AWS CDK 用於使用。它不涵蓋 AWS CDK 支援的其他語言。
產品版本
使用下列工具的最新版本:
AWS 命令列界面 (AWS CLI)
CFN_NAG
git-remote-codecommit
Node.js
架構
目標技術堆疊
AWS CDK
AWS CloudFormation
AWS CodeCommit
AWS CodePipeline
目標架構
管道是由 AWS CodeCommit 儲存庫 (SampleRepository
) 中的變更觸發。在開始時,會 CodePipeline 建置構件、自行更新,並啟動部署程序。產生的管道會將解決方案部署到三個獨立的環境:
Dev — 在使用中開發環境中進行三步程式碼檢查
測試 — 集成和回歸測試環境
產品 — 生產環境
包括在開發階段的三個步驟是短信,安全性和單元測試。這些步驟並行運行以加快該過程。為了確保管線僅提供工作中的加工品,只要處理程序中的某個步驟失敗,它就會停止執行。開發階段部署之後,管道會執行驗證測試以驗證結果。在成功的情況下,管道會將成品部署到測試環境,其中包含部署後驗證。最後一步是將成品部署到 Prod 環境。
下圖顯示從 CodeCommit 存放庫到建置與更新程序的工作流程 CodePipeline、三個 Dev 環境步驟,以及三個環境中每個環境中的後續部署與驗證。
工具
AWS 服務
AWS Cloud Development Kit (AWS CDK) 是一種軟體開發架構,可協助您在程式碼中定義和佈建 AWS 雲端基礎設施。
AWS 可 CloudFormation協助您設定 AWS 資源、快速且一致地佈建 AWS 資源,並在 AWS 帳戶和區域的整個生命週期中進行管理。在此模式中, CloudFormation 模板可用於創建 CodeCommit 存儲庫和 CodePipeline CI/CD 管道。
AWS CodeCommit 是一種版本控制服務,可協助您以私密方式存放和管理 Git 儲存庫,而無需管理自己的原始檔控制系統。
AWS CodePipeline 是 CI/CD 服務,可協助您快速建模和設定軟體發行的不同階段,並自動執行持續發行軟體變更所需的步驟。
AWS Command Line Interface (AWS CLI) (AWS CLI) 是一種開放原始碼工具,可協助您透過命令列殼層中的命令與 AWS 服務互動。
其他工具
cfn_nag
是一種開放原始碼工具,可在範本中尋找 CloudFormation 模式,以識別潛在的安全性問題。 git-remote-codecommit是通過擴展 Git 從 CodeCommit 存儲庫中推送和提取代碼的實用程序。
Node.js
是一個事件驅動的 JavaScript 運行時環境,旨在構建可擴展的網絡應用程序。
Code
此模式的程式碼可在 CodePipeline 具有 CI/CD 實務儲存庫的 GitHub AWS
最佳實務
檢閱 AWS Identity and Access Management (IAM) 政策等資源,以確認這些資源符合您的組織最佳實務。
史诗
任務 | 描述 | 所需技能 |
---|---|---|
在 macOS 或 Linux 上安裝工具。 | 如果您使用的是 MacOS 或 Linux,則可以通過在首選終端機中運行以下命令或使用 Linux 版自製軟
| DevOps 工程師 |
使用 AWS Cloud9 安裝工具。 | 如果您使用的是 AWS Cloud9
注意:AWS Cloud9 應該已安裝 Node.js 和 npm。若要檢查安裝或版本,請執行下列命令。
| DevOps 工程師 |
設定 AWS CLI。 | 若要設定 AWS CLI,請使用適用於您作業系統的指示:
| DevOps 工程師 |
任務 | 描述 | 所需技能 |
---|---|---|
下載或克隆代碼。 | 若要取得此模式所使用的程式碼,請執行下列其中一個動作:
從複製的
稍後,您將使用新建立的 AWS CodeCommit 儲存庫做為遠端來源。 | DevOps 工程師 |
Connect 到 AWS 帳戶。 | 您可以使用臨時安全令牌或 landing zone 身份驗證進行連接。若要確認您使用的是正確的帳戶和 AWS 區域,請執行下列命令。
| DevOps 工程師 |
引導環境。 | 若要啟動 AWS CDK 環境,請執行下列命令。
成功啟動環境後,應顯示以下輸出。
如需 AWS CDK 啟動安裝的詳細資訊,請參閱 AWS CDK 文件。 | DevOps 工程師 |
合成模板。 | 若要合成 AWS CDK 應用程式,請使用指
您應該會看到下列輸出。
| DevOps 工程師 |
部署 CodePipeline 堆疊。 | 現在您已啟動並合成 CloudFormation 範本,您可以進行部署。部署將建立 CodePipeline 管線和 CodeCommit 儲存庫,這將成為管線的來源和觸發程序。
執行命令之後,您應該會看到成功部署 CodePipeline 堆疊和輸出資訊。會
| DevOps 工程師 |
設置遠程 CodeCommit 存儲庫和分支。 | 成功部署後, CodePipeline 將啟動管道的第一次執行,您可以在 AWS CodePipeline 主控台
要修復此錯誤,請將遠程原點設置為
| DevOps 工程師 |
任務 | 描述 | 所需技能 |
---|---|---|
提交變更以啟動管線。 | 成功的初始部署之後,您應該擁有一個完整的 CI/CD 管線,並將分
| DevOps 工程師 |
任務 | 描述 | 所需技能 |
---|---|---|
使用生成文件運行開發過程。 | 您可以使用 若要測試使用
| 應用 DevOps 程式開發人員、 |
任務 | 描述 | 所需技能 |
---|---|---|
刪除 AWS CDK 應用程式資源。 | 若要清理 AWS CDK 應用程式,請執行下列命令。
請注意,在啟動載入期間建立的 Amazon 簡易儲存服務 (Amazon S3) 儲存貯體不會自動刪除。他們需要允許刪除的保留政策,或者您需要在 AWS 帳戶中手動刪除它們。 | DevOps 工程師 |
故障診斷
問題 | 解決方案 |
---|---|
範本未如預期般運作。 | 如果出現問題並且模板不起作用,請確保您具有以下內容:
|