使用 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 (單一執行個體) 為環境類型。如果您打算遠端登入執行個體,請選取金鑰對。否則其他選項請保留預設值,然後為持續部署管道建立環境。

continuous-delivery-pipeline-1

(按一下以縮放)

continuous-delivery-pipeline-1

c. Elastic Beanstalk 將開始建立用於部署應用程式的範例環境。它會為您的應用程式建立 Amazon EC2 執行個體、安全群組、Auto Scaling 群組、Amazon S3 儲存貯體、Amazon CloudWatch 警示和網域名稱。

備註:完成需要幾分鐘的時間。

continuous-delivery-pipeline-1c

(按一下以縮放)

continuous-delivery-pipeline-1c

在此步驟中,您將擷取範例應用程式碼的副本,並選擇要託管程式碼的來源。管道將從來源取得程式碼,然後對其執行動作。

您可用三種選項其中之一做為來源:GitHub 儲存庫、Amazon S3 儲存貯體或 AWS CodeCommit 儲存庫。選取您的偏好設定,並依照下列步驟進行:

 

  • GitHub

    a.如果您要使用 GitHub 帳戶:

    continuous-delivery-pipeline-2a

    (按一下以縮放)

    continuous-delivery-pipeline-2a
  • Amazon S3

    a. 如果您計劃使用 Amazon S3 做為來源,您將從 AWS GitHub 儲存庫擷取範本程式碼,將程式碼儲存至電腦,然後上傳至 Amazon S3 儲存貯體。

    continuous-delivery-pipeline-2a1

    (按一下以縮放)

    continuous-delivery-pipeline-2a1

    b.將來源檔案儲存至電腦:

    • 按一下名為 aws-codepipeline-s3-aws-codedeploy_linux.zip ​ 的檔案
    • 按一下 View Raw (檢視原始)
    • 將範例檔案儲存至本機電腦。
    continuous-delivery-pipeline-2b2

    (按一下以縮放)

    continuous-delivery-pipeline-2b2

    c.按一下這裡開啟 Amazon S3 主控台,並建立 Amazon S3 儲存貯體:

    • 按一下 Create Bucket (建立儲存貯體)
    • Bucket Name (儲存貯體名稱):輸入您儲存貯體的名稱,例如 awscodepipeline-demobucket-variables。 所有 ​Amazon S3 中的儲存貯體名稱皆須獨一無二,因此請使用您自己的名稱,不要使用範例中相同的名稱。
    • Region (區域):從下拉式清單中,選取要建立管道的區域,例如 US Standard (美國標準)。 
    • 按一下 Create (建立)
    continuous-delivery-pipeline-2d

    (按一下以縮放)

    continuous-delivery-pipeline-2d

    d. 主控台將顯示剛建立的儲存貯體,其應該是空的。

    • 按一下 Properties (屬性)
    • 展開 Versioning (版本控制),然後選取 Enable Versioning (啟用版本控制)。 啟用版本控制後,​Amazon S3 會在儲存貯體中儲存每個物件的每一個版本。
    continuous-delivery-pipeline-2g

    (按一下以縮放)

    continuous-delivery-pipeline-2g

    e.您現在應該將範本程式碼上傳至 Amazon S3 儲存貯體: 

    • 按一下 Upload (上傳)
    • 依照螢幕上的指示,上傳含有從 GitHub 下載之範本程式碼的 .zip 檔案。
    continuous-delivery-pipeline-2f

    (按一下以縮放)

    continuous-delivery-pipeline-2f
  • AWS CodeCommit

    a. 如果您計劃使用 AWS CodeCommit 做為來源,您將從 AWS GitHub 儲存庫擷取範本程式碼,將程式碼儲存至電腦,然後上傳至 AWS CodeCommit 儲存庫。

    continuous-delivery-pipeline-2a1

    (按一下以縮放)

    continuous-delivery-pipeline-2a1

    b.將來源檔案儲存至電腦:

    • 選取名為 aws-codepipeline-s3-aws-codedeploy_linux.zip​ 的檔案。
    • 選取 View Raw (檢視原始)
    • 將範例檔案儲存至本機電腦。
    continuous-delivery-pipeline-2b2

    (按一下以縮放)

    continuous-delivery-pipeline-2b2

    d.按一下這裡開啟 AWS CodeCommit 主控台,並選取 Get Started (開始使用)

    continuous-delivery-pipeline-2b3

    (按一下以縮放)

    continuous-delivery-pipeline-2b3

    e.在 Create new repository (建立新的儲存庫) 頁面上:

    • Repository name (儲存庫名稱):輸入 PipelineRepo
    • 選取 Create repository (建立儲存庫)
    continuous-delivery-pipeline-2c3

    (按一下以縮放)

    continuous-delivery-pipeline-2c3

    f. 連線至儲存庫,然後推送範例檔案的副本到儲存庫。 如需說明,請參閱連線至 AWS CodeCommit 儲存庫

在此步驟中,您將建立並設定含有來源和部署這兩個動作的簡易管道。將來源儲存庫和部署環境的位置提供至 CodePipeline。


a. 按一下這裡開啟 AWS CodePipeline 主控台。

  • 在 Welcome (歡迎使用) 頁面上,按一下 Create pipeline (建立管道)。 
  • 如果這是您第一次使用 AWS CodePipeline,則會出現簡介頁面,而不是 Welcome (歡迎使用)。按一下 Get Started (開始使用)
continuous-delivery-pipeline-3

(按一下以縮放)

continuous-delivery-pipeline-3

b. 在 Step 1: Name (步驟 1:名稱) 頁面上:

  • Pipeline name (管道名稱):輸入管道的名稱 DemoPipeline
  • 按一下 Next Step (下一步)

備註:在您建立管道後,便無法更改其名稱。

continuous-delivery-pipeline-3b

(按一下以縮放)

continuous-delivery-pipeline-3b

c.在 Step 2: Source (步驟 2:來源) 頁面上,選取所選的來源位置,然後依照下列步驟進行:

  • GitHub

    來源供應商:GitHub

    • Connect to GitHub (連線到 GitHub) 區段中,按一下 Connect to GitHub (連線到 GitHub)
    • 將開啟新瀏覽器視窗,將您連線到 GitHub。若出現要求登入的提示,請提供您的 GitHub 登入資料。 
    • 畫面會要求您授權應用程式存取您的帳戶。選擇 Authorize application (授權應用程式)
    continuous-delivery-pipeline-3c

    (按一下以縮放)

    continuous-delivery-pipeline-3c

    指定儲存庫和分支:

    • Repository (儲存庫):從下拉式清單中選擇您想要當做管道來源位置的 GitHub 儲存庫。在含有名為 aws-codepipeline-s3-aws-codedeploy_linux 之範本程式碼​的 GitHub 帳戶中按一下延伸儲存庫。 
    • Branch (分支):從下拉式清單中選擇您想要使用的分支 master
    • 按一下 Next Step (下一步)
    continuous-delivery-pipeline-3e

    (按一下以縮放)

    continuous-delivery-pipeline-3e
  • Amazon S3

    來源供應商:Amazon S3。

    • Amazon S3 location (Amazon S3 位置):輸入您建立的 Amazon S3 儲存貯體名稱,加上您複製到該儲存主體的範例檔案 (aws-codepipeline-s3-aws-codedeploy_linux.zip)。例如,如果您將儲存貯體命名為 awscodepipeline-demobucket-variable,應該輸入:s3://awscodepipeline-demobucket-variable/aws-codepipeline-s3-aws-codedeploy_linux.zip
    • 按一下 Next Step (下一步)
    continuous-delivery-pipeline-3c2

    (按一下以縮放)

    continuous-delivery-pipeline-3c2
  • AWS CodeCommit

    來源供應商:AWS CodeCommit。

    • Repository name (儲存庫名稱):選擇 AWS CodeCommit 儲存庫的名稱。 
    • Branch name (分支名稱):選擇包含範例檔案的分支名稱。
    • 按一下 Next Step (下一步)
    continuous-delivery-pipeline-3c3

    (按一下以縮放)

    continuous-delivery-pipeline-3c3

d.真正的持續部署管道需要有建置階段,以編譯程式碼並測試單元。CodePipeline 允許您將偏好的建置提供者插入到管道中。但在本教學課程中,您將跳過建置階段。

  • Step 3: Build (步驟 3:建置) 頁面上,選擇 No Build (無建置)
  • 按一下 Next Step (下一步)

 

continuous-delivery-pipeline-3f

(按一下以縮放)

continuous-delivery-pipeline-3f

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」(來源) 是管道的第一階段所指定的名稱。

continuous-delivery-pipeline-3g

(按一下以縮放)

continuous-delivery-pipeline-3g

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 的服務角色。

continuous-delivery-pipeline-3fa

(按一下以縮放)

continuous-delivery-pipeline-3fa

在此步驟中,您將啟動管道。建立管道後,管道便會自動開始執行。首先,管道會偵測來源位置的範例應用程式碼、封裝檔案,然後將檔案移到您定義的第二階段。在此階段,管道會將程式碼傳遞至 Elastic Beanstalk,其中包含將託管程式碼的 EC2 執行個體。Elastic Beanstalk 負責處理將程式碼部署至 EC2 執行個體。


a.在 Step 6: Review (步驟 6:檢閱) 頁面中,檢閱資訊,然後按一下 Create pipeline (建立管道)

continuous-delivery-pipeline-4

(按一下以縮放)

continuous-delivery-pipeline-4

b.建立管道後,將出現管道狀態頁面,然後管道會自動開始執行。管道執行各動作時,您可查看進度,以及成功和失敗訊息。

若要驗證您的管道是否成功執行,請監控管道在各階段間移動的進度。每一個階段狀態將從 No executions yet (尚未執行)​ 變更為 In Progress (進行中),然後顯示 Succeeded (成功)​ 或 Failed (失敗)。該管道應會在幾分鐘內完成初次執行。

continuous-delivery-pipeline-4a

(按一下以縮放)

continuous-delivery-pipeline-4a

c.在 Beta 階段的狀態區中,按一下 AWS Elastic Beanstalk (AWS Elastic Beanstalk)。 

continuous-delivery-pipeline-4a2

(按一下以縮放)

continuous-delivery-pipeline-4a2

d.AWS Elastic Beanstalk 主控台隨即開啟,並顯示部署的詳細資訊。

  • 按一下剛建立名為 Default-Environment 的環境。​ 
continuous-delivery-pipeline-4b

(按一下以縮放)

continuous-delivery-pipeline-4b

e.按一下頁面右上角出現的 URL,檢視您部署的範例網站。

continuous-delivery-pipeline-6e

(按一下以縮放)

continuous-delivery-pipeline-6e

在此步驟中,您將修改範本程式碼,並將變更遞交至儲存庫。CodePipeline 將偵測更新後的範本程式碼,然後自動開始透過 Elastic Beanstalk 將程式碼部署到 EC2 執行個體。 

請注意,您部署的範例網頁將參照 AWS CodeDeploy,此服務會自動執行程式碼部署。在 CodePipeline 中,CodeDeploy 是使用 Elastic Beanstalk 執行部署動作的替代方案。接著我們更新範本程式碼,以正確顯示您已使用 Elastic Beanstalk 部署範本程式碼的狀態。

  • GitHub

    a.造訪您在 GitHub 中延伸您自己的儲存庫副本。

    • 開啟 index.html
    • 選取 Edit (編輯) 圖示。
    continuous-delivery-pipeline-5b1

    (按一下以縮放)

    continuous-delivery-pipeline-5b1

    b.複製下列文字並貼到第 30 行以更新網頁: 

    您已成功建立管道,管道將從 GitHub 擷取此來源應用程式,並將應用程式部署到使用 AWS Elastic Beanstalk 的某一 Amazon EC2 執行個體上。您往實作持續部署又邁進了一步!

    continuous-delivery-pipeline-5c

    (按一下以縮放)

    continuous-delivery-pipeline-5c

    c. 遞交變更至儲存庫。

    continuous-delivery-pipeline-5c1

    (按一下以縮放)

    continuous-delivery-pipeline-5c1
  • Amazon S3

    a.在桌面上,造訪剛下載名為 aws-codepipeline-s3-aws-codedeploy_linux.zip 的 zip 檔案。


    b.編輯範例 Web 應用程式碼:

    • 使用您偏好的文字編輯器解壓縮 zip 檔案中的 index.html。 
    • 更新「恭喜!」之後的標頭文字,使其變成:

    「您已成功建立管道,管道將從 Amazon S3 擷取此來源應用程式,並將應用程式部署到使用 AWS Elastic Beanstalk 的某一 Amazon EC2 執行個體上。您往實作持續部署又邁進了一步!」

    • 將更新後的 index.html 檔案複製回 aws-codepipeline-s3-aws-codedeploy_linux.zip,取代舊版的 index.html。
    continuous-delivery-pipeline-6b2

    (按一下以縮放)

    continuous-delivery-pipeline-6b2

    c.將更新後的檔案重新上傳到 Amazon S3 儲存貯體:

    • 返回您之前建立的 S3 儲存貯體。 
    • 將更新後的 aws-codepipeline-s3-aws-codedeploy_linux.zip 檔案上傳回儲存貯體。 

    備註:您一開始建立 S3 儲存貯體時已啟用版本控制,因此 S3 會為您檔案的每個版本儲存副本。

    continuous-delivery-pipeline-6c2

    (按一下以縮放)

    continuous-delivery-pipeline-6c2
  • AWS CodeCommit

    a.造訪您所下載含有範本程式碼名為 aws-codepipeline-s3-aws-codedeploy_linux.zip 的 zip 檔案。


    b.編輯範例 Web 應用程式碼:
     
    • 使用您偏好的文字編輯器解壓縮 zip 檔案中的 index.html。 
    • 接著更新「恭喜!」之後的標頭文字,使其變成:

    您已成功建立管道,管道將從 AWS CodeCommit 擷取此來源應用程式,並將應用程式部署到使用 AWS Elastic Beanstalk 的某一 Amazon EC2 執行個體上。您往實作持續部署又邁進了一步!

    continuous-delivery-pipeline-6b2

    (按一下以縮放)

    continuous-delivery-pipeline-6b2

    c.遞交更新後的 zip 檔案並將檔案推送到 CodeCommit 儲存庫。


d.返回您在 CodePipeline 主控台中的管道。幾分鐘後,您應該會看到來源變為藍色,這表示管道已偵測到您對來源儲存庫進行的變更。發生此狀況時,管道會自動將更新的程式碼上傳至 Elastic Beanstalk。

  • 在管道狀態顯示 Succeeded (成功)​ 後,在 Beta ​階段的狀態區中按一下 AWS Elastic Beanstalk (AWS Elastic Beanstalk)
continuous-delivery-pipeline-4a2

(按一下以縮放)

continuous-delivery-pipeline-4a2

e.AWS Elastic Beanstalk 主控台隨即開啟,並顯示部署的詳細資訊。選取剛建立名為 Default-Environment 的環境。​

continuous-delivery-pipeline-4b

(按一下以縮放)

continuous-delivery-pipeline-4b

f.按一下頁面右上角出現的 URL,再次檢視範例網站。 您的文字已自動透過持續部署管道更新!

 

continuous-delivery-pipeline-6e

(按一下以縮放)

continuous-delivery-pipeline-6e

為避免日後發生變更,您將刪除透過此教學課程啟動的所有資源,資源包括管道、Elastic Beanstalk 應用程式,以及設定用來託管程式碼的來源。 


a.首先,您將刪除管道:

  • 在管道檢視中,按一下 Edit (編輯)。 
  • 按一下 Delete (刪除)
  • 輸入管道的名稱,然後按一下 Delete (刪除)
continuous-delivery-pipeline-5d-6

(按一下以縮放)

continuous-delivery-pipeline-5d-6

b.接著,刪除 Elastic Beanstalk 應用程式:

  • 造訪 Elastic Beanstalk 主控台。 
  • 按一下 Actions (動作)
  • 接著按一下 Terminate Environment (終止環境)
continuous-delivery-pipeline-6

(按一下以縮放)

continuous-delivery-pipeline-6
  • Amazon S3

    c.如果您在本教學中建立 S3 儲存貯體,請刪除所建立的儲存貯體:

    • 造訪 S3 主控台。 
    • 在儲存貯體名稱上按一下滑鼠右鍵,然後選擇 Delete Bucket (刪除儲存貯體)。 
    • 出現確認訊息時,請輸入儲存貯體名稱,然後按一下 Delete (刪除)
    continuous-delivery-pipeline-6d

    (按一下以縮放)

    continuous-delivery-pipeline-6d
  • AWS CodeCommit

    c.如果您為此教學課程建立了 AWS CodeCommit 儲存庫,請造訪 CodeCommit 主控台並刪除所建立的儲存庫:

    continuous-delivery-pipeline-7a

    (按一下以縮放)

    continuous-delivery-pipeline-7a

    c.在導覽窗格中,選擇 Settings (設定)

    • 按一下 Delete Repository (刪除儲存庫)
    • 將彈出確認視窗。輸入儲存庫的名稱,然後按一下 Delete (刪除)
    continuous-delivery-pipeline-7b

    (按一下以縮放)

    continuous-delivery-pipeline-7b

您已成功使用 AWS CodePipeline 建立自動化軟體發行管道! 您使用 CodePipeline 建立了管道,該管道使用 GitHub、Amazon S3 或 AWS CodeCommit 做為應用程式碼的來源位置,並將程式碼部署到 AWS Elastic Beanstalk 所管理的 Amazon EC2 執行個體。管道將自動在每次程式碼變更時部署程式碼。您往實作持續部署又邁進了一步!

現在您已學會如何使用 AWS CodePipeline 建立簡易管道,接著請造訪下列資源以了解更多。

  • 請遵循本指南建立更進階的四階段管道。此管道使用 GitHub 儲存庫做為您的來源、用於建置及測試專案的 Jenkins 建置伺服器,以及用於將內建程式碼部署到預備伺服器的 AWS CodeDeploy 應用程式。
  • 使用我們的管道入門套件快速建立整合 Jenkins 建置伺服器的四階段管道。
  • 進一步了解持續交付