使用 AWS CodePipeline
在本教學課程中,您將學習如何建立可部署即時範例應用程式的自動化軟體發行管道。您將使用 AWS CodePipeline 建立管道,該服務會在每次程式碼變更時建立、測試及部署您的程式碼。您可用 GitHub 帳戶、Amazon Simple Storage Service (S3) 儲存貯體或 AWS CodeCommit 儲存庫做為範例應用程式碼的來源位置。您也可用 AWS Elastic Beanstalk 做為範例應用程式的部署目標。完成後的管道可用來偵測含有範例應用程式之來源儲存庫所發生的變更,然後自動更新即時範例應用程式。
持續部署可部署修訂版本到生產環境,而不需要開發人員的明確核准,這能讓整個軟體發行程序自動化。
此教學中的所有操作都可用免費方案資格來進行。
管理您的 AWS 資源
登入主控台持續部署管道需要含有虛擬伺服器的目標環境或 Amazon EC2 執行個體,以用來部署範本程式碼。您應該在建立管道前先準備此環境。
a. 為簡化在本教學課程中設定及組態 EC2 執行個體的程序,您將使用 AWS Elastic Beanstalk 建立範例環境。Elastic Beanstalk 可讓您輕鬆託管 Web 應用程式,無需自行啟動、設定或操作虛擬伺服器。它會自動佈建及操作基礎設施 (例如,虛擬伺服器、負載平衡器等),並為您提供應用程式堆疊 (例如,作業系統、語言與架構、Web 和應用程式伺服器等)。
b. 從下拉式選單中選擇 PHP (PHP),然後按一下 Launch Now (立即啟動)。
備註:如果您先前已建立 Elastic Beanstalk 應用程式,請按一下:右上角的 Create New Application (建立新的應用程式)。為應用程式命名,並建立新的 Web 伺服器環境。選取 PHP (PHP) 為平台,選取 Single Instance (單一執行個體) 為環境類型。如果您打算遠端登入執行個體,請選取金鑰對。否則其他選項請保留預設值,然後為持續部署管道建立環境。
c. Elastic Beanstalk 將開始建立用於部署應用程式的範例環境。它會為您的應用程式建立 Amazon EC2 執行個體、安全群組、Auto Scaling 群組、Amazon S3 儲存貯體、Amazon CloudWatch 警示和網域名稱。
備註:完成需要幾分鐘的時間。
在此步驟中,您將擷取範例應用程式碼的副本,並選擇要託管程式碼的來源。管道將從來源取得程式碼,然後對其執行動作。
您可用三種選項其中之一做為來源:GitHub 儲存庫、Amazon S3 儲存貯體或 AWS CodeCommit 儲存庫。選取您的偏好設定,並依照下列步驟進行:
在此步驟中,您將建立並設定含有來源和部署這兩個動作的簡易管道。將來源儲存庫和部署環境的位置提供至 CodePipeline。
a. 按一下這裡開啟 AWS CodePipeline 主控台。
- 在 Welcome (歡迎使用) 頁面上,按一下 Create pipeline (建立管道)。
- 如果這是您第一次使用 AWS CodePipeline,則會出現簡介頁面,而不是 Welcome (歡迎使用)。按一下 Get Started (開始使用)。
b. 在 Step 1: Name (步驟 1:名稱) 頁面上:
- Pipeline name (管道名稱):輸入管道的名稱 DemoPipeline。
- 按一下 Next Step (下一步)。
備註:在您建立管道後,便無法更改其名稱。
c.在 Step 2: Source (步驟 2:來源) 頁面上,選取所選的來源位置,然後依照下列步驟進行:
d.真正的持續部署管道需要有建置階段,以編譯程式碼並測試單元。CodePipeline 允許您將偏好的建置提供者插入到管道中。但在本教學課程中,您將跳過建置階段。
- 在 Step 3: Build (步驟 3:建置) 頁面上,選擇 No Build (無建置)。
- 按一下 Next Step (下一步)。
e.在 Step 4: Beta (步驟 4:Beta) 頁面上:
- Deployment provider (部署提供者):按一下 AWS Elastic Beanstalk (AWS Elastic Beanstalk)。
- Application name (應用程式名稱):按一下 My First Elastic Beanstalk Application (我的第一個 Elastic Beanstalk 應用程式)。
- Environment name (環境名稱):按一下 Default-Environment (Default-Environment)。
- 按一下 Next Step (下一步)。
備註:名稱「Beta」是預設指定給管道此階段的名稱,如同「Source」(來源) 是管道的第一階段所指定的名稱。
f.在 Step 5: Service Role (步驟 5:服務角色) 頁面上:
- Service Role (服務角色):按一下 Create role (建立角色)。
- 您將被重新導向到 IAM 主控台,說明要為您建立的 AWS-CodePipeline-Service 角色。按一下 Allow (允許)
- 建立角色後,您將回到 Step 5: Service Role (步驟 5:服務角色) 頁面,Role name (角色名稱) 將顯示 AWS-CodePipeline-Service。按一下 Next Step (下一步)。
備註:只有在您第一次於 AWS CodePipeline 中建立管道時,才需要建立服務角色。若已建立服務角色,您可從角色下拉式清單中選擇。下拉式清單會顯示與您帳戶建立關聯的所有 IAM 服務角色,如果您選擇與預設值不同的名稱,則請確定名稱可以辨識為 AWS CodePipeline 的服務角色。
在此步驟中,您將啟動管道。建立管道後,管道便會自動開始執行。首先,管道會偵測來源位置的範例應用程式碼、封裝檔案,然後將檔案移到您定義的第二階段。在此階段,管道會將程式碼傳遞至 Elastic Beanstalk,其中包含將託管程式碼的 EC2 執行個體。Elastic Beanstalk 負責處理將程式碼部署至 EC2 執行個體。
a.在 Step 6: Review (步驟 6:檢閱) 頁面中,檢閱資訊,然後按一下 Create pipeline (建立管道)。
b.建立管道後,將出現管道狀態頁面,然後管道會自動開始執行。管道執行各動作時,您可查看進度,以及成功和失敗訊息。
若要驗證您的管道是否成功執行,請監控管道在各階段間移動的進度。每一個階段狀態將從 No executions yet (尚未執行) 變更為 In Progress (進行中),然後顯示 Succeeded (成功) 或 Failed (失敗)。該管道應會在幾分鐘內完成初次執行。
c.在 Beta 階段的狀態區中,按一下 AWS Elastic Beanstalk (AWS Elastic Beanstalk)。
d.AWS Elastic Beanstalk 主控台隨即開啟,並顯示部署的詳細資訊。
- 按一下剛建立名為 Default-Environment 的環境。
e.按一下頁面右上角出現的 URL,檢視您部署的範例網站。
在此步驟中,您將修改範本程式碼,並將變更遞交至儲存庫。CodePipeline 將偵測更新後的範本程式碼,然後自動開始透過 Elastic Beanstalk 將程式碼部署到 EC2 執行個體。
請注意,您部署的範例網頁將參照 AWS CodeDeploy,此服務會自動執行程式碼部署。在 CodePipeline 中,CodeDeploy 是使用 Elastic Beanstalk 執行部署動作的替代方案。接著我們更新範本程式碼,以正確顯示您已使用 Elastic Beanstalk 部署範本程式碼的狀態。
d.返回您在 CodePipeline 主控台中的管道。幾分鐘後,您應該會看到來源變為藍色,這表示管道已偵測到您對來源儲存庫進行的變更。發生此狀況時,管道會自動將更新的程式碼上傳至 Elastic Beanstalk。
- 在管道狀態顯示 Succeeded (成功) 後,在 Beta 階段的狀態區中按一下 AWS Elastic Beanstalk (AWS Elastic Beanstalk)。
e.AWS Elastic Beanstalk 主控台隨即開啟,並顯示部署的詳細資訊。選取剛建立名為 Default-Environment 的環境。
f.按一下頁面右上角出現的 URL,再次檢視範例網站。 您的文字已自動透過持續部署管道更新!
為避免日後發生變更,您將刪除透過此教學課程啟動的所有資源,資源包括管道、Elastic Beanstalk 應用程式,以及設定用來託管程式碼的來源。
a.首先,您將刪除管道:
- 在管道檢視中,按一下 Edit (編輯)。
- 按一下 Delete (刪除)。
- 輸入管道的名稱,然後按一下 Delete (刪除)。
b.接著,刪除 Elastic Beanstalk 應用程式:
- 造訪 Elastic Beanstalk 主控台。
- 按一下 Actions (動作)。
- 接著按一下 Terminate Environment (終止環境)。
您已成功使用 AWS CodePipeline 建立自動化軟體發行管道! 您使用 CodePipeline 建立了管道,該管道使用 GitHub、Amazon S3 或 AWS CodeCommit 做為應用程式碼的來源位置,並將程式碼部署到 AWS Elastic Beanstalk 所管理的 Amazon EC2 執行個體。管道將自動在每次程式碼變更時部署程式碼。您往實作持續部署又邁進了一步!
現在您已學會如何使用 AWS CodePipeline 建立簡易管道,接著請造訪下列資源以了解更多。
- 請遵循本指南建立更進階的四階段管道。此管道使用 GitHub 儲存庫做為您的來源、用於建置及測試專案的 Jenkins 建置伺服器,以及用於將內建程式碼部署到預備伺服器的 AWS CodeDeploy 應用程式。
- 請使用我們的管道入門套件快速建立整合 Jenkins 建置伺服器的四階段管道。
- 進一步了解持續交付。