教學:建立四階段管道 - AWS CodePipeline

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

教學:建立四階段管道

現在您已在 教學:建立簡易管道 (S3 儲存貯體)教學課程:建立簡單管道 (CodeCommit儲存庫)中建立您的第一個管道,您可以開始建立更複雜的管道。本教學課程將逐步引導您建立四階段管道,該管道使用 GitHub儲存庫作為原始碼、Jenkins 建置伺服器來建置專案,以及將建置程 CodeDeploy 式碼部署到測試伺服器的應用程式。下圖顯示了初始的三階段管道。

顯示來源動作的來源階段、具有 Jenkins 動作的建置階段,以及部署動作的部署階段的圖表。

在建立管道之後,您將會使用測試動作來編輯管道以將之新增到階段中,藉以測試程式碼,同時也使用 Jenkins。

在建立此管道前,您必須設定必要資源。例如,如果您想要為原始程式碼使用 GitHub 儲存庫,則必須先建立儲存庫,然後才能將其新增至管線。作為設置的一部分,本教程將引導您完成在EC2實例上設置 Jenkins 以進行演示。

重要

您在此程序中新增至管線的許多動作都涉及建立管線之前需要建立的 AWS 資源。 AWS 來源動作的資源必須始終建立在您建立管道的相同 AWS 區域中。例如,如果您在美國東部 (俄亥俄) 區域建立管道,則您的 CodeCommit 存放庫必須位於美國東部 (俄亥俄) 區域。

您可以在建立管道時新增跨區域動作。 AWS 跨區域作業的資源必須位於您計劃執行作業的相同「 AWS 區域」中。如需詳細資訊,請參閱在中新增跨區域動作 CodePipeline

重要

在建立管道的過程中,客戶提供的 S3 成品儲存貯體將用 CodePipeline 於成品。(這與用於 S3 來源動作的儲存貯體不同。) 如果 S3 成品儲存貯體與管道帳戶位於不同的帳戶中,請確定 S3 成品儲存貯體所擁有的 S3 成品儲存貯體 AWS 帳戶 是安全且可靠的。

在您開始此教學前,應已完成 開始使用 CodePipeline​ 中的一般先決條件。

步驟 1:完成事前準備

要與詹金斯集成, AWS CodePipeline 要求您在要使用的詹金斯的任何實例上安裝 CodePipeline 插件詹金斯。 CodePipeline您也應該設定專用使用IAM者或角色,以便在 Jenkins 專案與 CodePipeline. 整合 Jenkins 的最簡單方法 CodePipeline 是在使用您為 Jenkins 整合建立的EC2執行個體角色的IAM執行個體上安裝 Jenkins。為了讓 Jenkins 動作成功連線管道中的連結,您必須在伺服器或EC2執行個體上設定 Proxy 和防火牆設定,以允許對 Jenkins 專案所使用的連接埠進行輸入連線。確定您已將 Jenkins 設定為驗證使用者並強制執行存取控制,然後再允許這些連接埠上的連線 (例如,如果您已將 Jenkins 保護為僅使用HTTPS連線,則為 80 和 8080 (如果允許連線)。HTTP如需詳細資訊,請參閱保護 Jenkins 安全

注意

本教學課程使用程式碼範例,並設定將範例從 Haml 轉換為的建置步驟。HTML您可以按照中的步驟從存放 GitHub 庫下載開放原始碼範例程式碼將範例複製或複製到 GitHub 儲存庫。您將需要 GitHub 存放庫中的整個樣本,而不僅僅是 .zip 文件。

此教學也假設:

  • 您對於安裝及管理 Jenkins 還有建立 Jenkins 專案的操作非常熟悉。

  • 您已在代管您的 Jenkins 專案的相同電腦或執行個體上安裝適用於 Ruby 的 Rake 與 Haml Gem。

  • 您已經設置了必要的系統環境變量,以便可以從終端或命令行運行 Rake 命令(例如,在 Windows 系統上,修改PATH變量以包括安裝 Rake 的目錄)。

將範例複製或複製到 GitHub 儲存庫

若要複製範例並推送至 GitHub 儲存庫
  1. 從 GitHub 存放庫下載範例程式碼,或將存放庫複製到您的本機電腦。有兩種範本套件:

  2. 從儲存庫中,選擇 Fork (延伸)​ 來複製範本儲存庫到 Github 帳戶中的儲存庫。如需詳細資訊,請參閱GitHub文件

創建一個IAM角色使用詹金斯集成

最佳做法是考慮啟動EC2執行個體來託管 Jenkins 伺服器,並使用IAM角色授與 CodePipeline執行個體互動所需的權限。

  1. 登入 AWS Management Console 並開啟IAM主控台,位於https://console.aws.amazon.com/iam/

  2. 在IAM主控台的功能窗格中,選擇 [角色],然後選擇 [建立角色]。

  3. Select type of trusted entity (選取可信任執行個體類型) 下,選擇 AWS 服務。在 [選擇將使用此角色的服務] 底下,選擇EC2。在 [選取您的使用案例] 下,選擇EC2

  4. 選擇下一步:許可。在 Attach permissions policies (附加許可政策) 頁面上,選取 AWSCodePipelineCustomActionAccess 受管政策,然後選擇 Next: Tags (下一步:標籤)。選擇下一步:檢閱

  5. 在「複查」頁面的「角色名稱」中,輸入要專門為 Jenkins 整合建立的角色名稱 (例如,JenkinsAccess),然後選擇 [建立角色]。

當您在步驟 3:設定EC2執行個體詳細資料中建立要安裝 Jenkins 的執行個體時,請確定您選擇執行個體角色 (例如 JenkinsAccess).

有關執行個體角色和 Amazon 的詳細資訊EC2,請參閱 Amazon 的IAM角色EC2、使用IAM角色將許可授予在 Amazon EC2 執行個體上執行的應用程式和建立角色以委派許可給 AWS 服務.

安裝和配置詹金斯和 CodePipeline 插件詹金斯

要安裝詹金斯和 CodePipeline 插件詹金斯
  1. 建立您要安裝 Jenkins 的EC2執行個體,並在步驟 3:設定執行個體詳細資訊中,確定您選擇您建立的執行個體角色 (例如,JenkinsAccess). EC2如需有關建立EC2執行個體的詳細資訊,請參閱 Amazon EC2 使用者指南中的啟動 Amazon 執行個體。

    注意

    如果您已經擁有要使用的 Jenkins 資源,則可以這樣做,但必須建立特殊使用IAM者,將AWSCodePipelineCustomActionAccess受管理的原則套用至該使用者,然後在 Jenkins 資源上設定並使用該使用者的存取認證。如果你想使用詹金斯 UI 來提供憑據,配置詹金斯只允許。HTTPS如需詳細資訊,請參閱疑難排 CodePipeline

  2. 在 EC2 執行個體上安裝 Jenkins。如需更多資訊,請參閱說明安裝 Jenkins啟動並存取 Jenkins 的 Jenkins 文件,以及 產品與服務整合 CodePipeline 中的 details of integration with Jenkins

  3. 啟動 Jenkins,然後在首頁上選擇 Manage Jenkins (管理 Jenkins)

  4. Manage Jenkins (管理 Jenkins) 頁面上,選擇 Manage Plugins (管理外掛程式)

  5. 選擇 Available (可用) 標籤,並在 Filter (篩選條件) 搜尋方塊中輸入 AWS CodePipeline。從列表中選擇 Jenkins 的CodePipeline 插件,然後選擇立即下載並在重新啟動後安裝

  6. Installing Plugins/Upgrades (安裝外掛程式/升級) 頁面上,選擇 Restart Jenkins when installation is complete and no jobs are running (安裝完成且沒有正在執行的工作時重新啟動 Jenkins)

  7. 選擇 Back to Dashboard (返回儀表板)

  8. 在主要頁面上,選擇 New Item (新項目)

  9. 項目名稱中,輸入 Jenkins 專案的名稱 (例如,MyDemoProject). 選擇 [自由式專案],然後選擇 [確定]

    注意

    請確定您的專案名稱符合的需求 CodePipeline。如需詳細資訊,請參閱配額 AWS CodePipeline

  10. 在專案的組態頁面上,勾選 Execute concurrent builds if necessary (若需要請執行同時進行的組建) 核取方塊。​ 在 Source Code Management (原始程式碼管理) 中,選擇 AWS CodePipeline。如果您已在EC2執行個體上安裝 Jenkins,並為您建立的 AWS CLI IAM使用者設定檔設定為 CodePipeline 與 Jenkins 之間的整合,請將所有其他欄位保留空白。

  11. 選擇 [進階],然後在 [提供者] 中,輸入動作的提供者名稱 CodePipeline (例如 MyJenkinsProviderName). 確保此名稱是唯一且易於記憶的名稱。您將會在此教學後面部分中將組建動作新增到管道,然後會在新增測試動作時在次重複此操作。

    注意

    此動作名稱必須符合中動作的命名需求 CodePipeline。如需詳細資訊,請參閱配額 AWS CodePipeline

  12. 在 [組建觸發程序] 中,清除任何核取方塊,然後選取 [詢] SCM。在 Schedule (排程) 中,輸入五個星號,並以空格間隔,如下所示:

    * * * * *

    這次民意調查 CodePipeline 每分鐘。

  13. Build (組建) 中,選擇 Add build step (新增組建步驟)。選擇執行命令介面 (Amazon Linux 或 Ubuntu 伺服器) 執行批次命令 (視窗伺服器),然後輸入下列命令:RHEL

    rake
    注意

    請確認您的環境使用執行 Rake 所需的變數及設定來配置;否則組建將會失敗。

  14. 選擇 [新增建置後動作],然後選擇 [發行AWS CodePipeline 者]。選擇 Add (新增),然後在 Build Output Locations (組建輸出位置) 中,將位置保留為空白。此組態為預設。將會在組建程結束時建立壓縮檔。

  15. 選擇 Save (儲存) 來儲存您的 Jenkins 專案。

步驟 2:在中建立管道 CodePipeline

在此部分的教學中,您將會使用 Create Pipeline (建立管道)​ 精靈來建立管道。

建立 CodePipeline 自動發行程序
  1. 請登入 AWS Management Console 並開啟 CodePipeline 主控台,網址為 http://console.aws.amazon.com/codesuite/codepipeline/home

  2. 如有需要,可使用區域選擇器,將區域變更為您的管道資源所在的區域。例如,如果您已在中建立上一個教學課程的資源us-east-2,請確定 [區域] 選取器已設定為美國東部 (俄亥俄州)。

    如需有關可用之區域和端點的詳細資訊 CodePipeline,請參閱AWS CodePipeline 端點和配額

  3. Welcome (歡迎) 頁面、Getting started (入門) 頁面、或者 Pipelines (管道) 頁面上,選擇 Create pipeline (建立管道)

  4. Step 1: Choose pipeline settings (步驟 1:選擇管道設定) 頁面的 Pipeline name (管道名稱) 中輸入管道的名稱。

  5. 管線類型中,針對本教學課程的目的選擇 V1。您也可以選擇 V2;但是請注意,管道類型在特性和價格上有所不同。如需詳細資訊,請參閱管線類型

  6. 在 [服務角色] 中,選擇 [新增服務角色] CodePipeline 以允許在中建立服務角色IAM。

  7. Advanced settings (進階設定) 下的設定保留為預設值,然後選擇 Next (下一步)

  8. 在「步驟 2:新增來源階段」頁面的「來源提供者」中,選擇GitHub

  9. 在「連線」下,選擇現有的連線或建立新的連線。若要建立或管理來 GitHub 源動作的連線,請參閱GitHub 連接

  10. Step 3: Add build stage (步驟 3:新增組建階段),選擇 Add Jenkins (新增 Jenkins)。在提供者名稱中,輸入您在 Jenkins 的 CodePipeline 外掛程式中提供的動作名稱 (例如 MyJenkinsProviderName). 此名稱必須完全符合 Jenkins CodePipeline 外掛程式中的名稱。在伺服器中URL,輸入URL安裝 Jenkins 的EC2執行個體。在「專案名稱」中,輸入您在 Jenkins 中建立的專案名稱,例如 MyDemoProject,然後選擇 [下一步]。

  11. 步驟 4:新增部署階段中,重複使用您在中建立的 CodeDeploy 應用程式和部署群組教學:建立簡易管道 (S3 儲存貯體)。在部署提供者中,選擇CodeDeploy。在 Application name (應用程式名稱) 中,輸入 CodePipelineDemoApplication,或選擇 refresh (重新整理) 按鈕,然後從清單中選擇應用程式名稱。在 Deployment group (部署群組) 中,輸入 CodePipelineDemoFleet,或從清單中選擇,然後選擇 Next (下一步)

    注意

    您可以使用自己的 CodeDeploy 資源或建立新資源,但可能會產生額外費用。

  12. Step 5: Review (步驟 5:檢閱) 中,檢閱資訊,然後選擇 Create pipeline (建立管道)

  13. 管道會自動在管道中啟動並執行範本。當管道建立 Haml 範例,並將網頁部署到部署中的每個 Amazon EC2 執行個體時,您可以檢視進度HTML、成功和失敗訊息。 CodeDeploy

步驟 3:新增另一個階段至您的管道

現在您將建立測試階段然後和測試動作到階段中,該階段使用包含在範本中的 Jenkins 測試來判定網頁是否有任何內容。此測試僅用於示範用途。

注意

如果您不希望新增另一個階段到您的管道,您可以在部署動作之前或之後新增測試動作到管道的 Staging (預備) 階段。

新增測試階段到管道

查詢執行個體的 IP 地址

驗證您想要部署程式碼的執行個體 IP 地址
  1. 在該管道狀態顯示 Succeeded (成功)​ 後,在 Staging (預備)​ 階段的狀態區域中,選擇 Details (詳細資訊)

  2. 部署詳細資訊區段中,在執行個體 ID 中選擇其中一個成功部署的執行個體中的執行個體 ID。

  3. 複製執行個體的 IP 位址 (例如,192.168.0.4). 您將在詹金斯測試中使用此 IP 地址。

建立用於測試部署的 Jenkins 專案

建立 Jenkins 專案
  1. 在您安裝了 Jenkins 的執行個體上開啟 Jenkins,並從首頁選擇 New Item (新項目)

  2. 項目名稱中,輸入 Jenkins 專案的名稱 (例如,MyTestProject). 選擇 [自由式專案],然後選擇 [確定]

    注意

    請確定專案的名稱符合 CodePipeline 需求。如需詳細資訊,請參閱配額 AWS CodePipeline

  3. 在專案的組態頁面上,勾選 Execute concurrent builds if necessary (若需要請執行同時進行的組建) 核取方塊。​ 在 Source Code Management (原始程式碼管理) 中,選擇 AWS CodePipeline。如果您已經在EC2執行個體上安裝了 Jenkins,並IAM使用您為了整合而建立的使用者設定檔 CodePipeline 和 Jenkins,請將所有其他欄位保留空白。 AWS CLI

    重要

    如果您正在設定 Jenkins 專案,但該專案並未安裝在 Amazon EC2 執行個體上,或安裝在執行 Windows 作業系統的EC2執行個體上,請根據 Proxy 主機和連接埠設定的要求填寫欄位,並提供您為 Jenkins 和之間整合而設定的IAM使用者或角色的登入資料。 CodePipeline

  4. 選擇 Advanced (進階),並在 Category (目錄) 中選擇 Test (測試)

  5. 在 [提供者] 中,輸入您用於建置專案的相同名稱 (例如,MyJenkinsProviderName). 在本教學課程稍後將測試動作新增至管線時,您將使用此名稱。

    注意

    此名稱必須符合動作的 CodePipeline 命名需求。如需詳細資訊,請參閱配額 AWS CodePipeline

  6. 在 [組建觸發程序] 中,清除任何核取方塊,然後選取 [詢] SCM。在 Schedule (排程) 中,輸入五個星號,並以空格間隔,如下所示:

    * * * * *

    這次民意調查 CodePipeline 每分鐘。

  7. Build (組建) 中,選擇 Add build step (新增組建步驟)。如果您要部署到 Amazon Linux 或 Ubuntu 伺服器執行個體,請選擇執行殼層。RHEL然後輸入以下內容,其中 IP 地址是您之前複製的EC2實例的地址:

    TEST_IP_ADDRESS=192.168.0.4 rake test

    如果您要部署到 Windows Server 執行個體,請選擇「執行批次命令」,然後輸入下列命令,其中 IP 位址是您之前複製之EC2執行個體的位址:

    set TEST_IP_ADDRESS=192.168.0.4 rake test
    注意

    測試假設預設連接埠為 80。若您想要指定不同的連接埠,請新增測試連接埠陳述式,如下所示:

    TEST_IP_ADDRESS=192.168.0.4 TEST_PORT=8000 rake test
  8. 選擇 [新增建置後動作],然後選擇 [發行AWS CodePipeline 者]。請勿選擇 Add (新增)

  9. 選擇 Save (儲存) 來儲存您的 Jenkins 專案。

建立第四個階段

新增階段到內含 Jenkins 測試動作的管道
  1. 請登入 AWS Management Console 並開啟 CodePipeline 主控台,網址為 http://console.aws.amazon.com/codesuite/codepipeline/home

  2. 名稱中,選擇您建立的配管名稱 MySecondPipeline。

  3. 在管道詳細資訊頁面上,選擇 Edit (編輯)

  4. Edit (編輯) 頁面上,選擇 + Stage (+ 階段) 以在 Build (建置) 階段後立即新增一個階段。

  5. 在新階段的名稱欄位中,輸入名稱 (例如 Testing),然後選擇 + Add action group (+ 新增動作群組)

  6. 動作名稱中,輸入 MyJenkinsTest-Action。 在測試提供者中,選擇您在 Jenkins 中指定的提供者名稱(例如,MyJenkinsProviderName). 在「專案名稱」中,輸入您在 Jenkins 中建立的專案名稱 (例如,MyTestProject). 在輸入工件中,從默認名稱為 Jenkins 構建中選擇工件 BuildArtifact,然後選擇 [完成]。

    注意

    由於 Jenkins 測試動作會在 Jenkins 建置步驟中建置的應用程式上運作,請使用建置成品作為測試動作的輸入成品。

    如需有關輸入和輸出成品以及管道結構的詳細資訊,請參閱 CodePipeline 配管結構參照

  7. Edit (編輯) 頁面上,選擇 Save pipeline changes (儲存管道變更)。在 Save pipeline changes (儲存管道變更) 對話方塊中,選擇 Save and continue (儲存並繼續)

  8. 雖然新階段已新增至您的管道,但由於沒有發生觸發另一個管道執行的變更,所以會顯示該階段為 No executions yet (尚未執行)。若要透過修訂後的管線執行範例,請在管線詳細資訊頁面上選擇「發行變更」。

    管道檢視會顯示管道中的階段與動作,以及在那四個階段間執行的版本狀態。管道執行所有階段所需花費的時間將根據成品大小、組建與測試動作的複雜度、以及其他因素而定。

步驟 4:清除資源

在您完成本教學之後,您應該刪除管道以及其所使用的資源,如此您才不會因為持續使用那些資源而付費。如果您不打算繼續使用,請刪除管道 CodePipeline,然後刪除 CodeDeploy 應用程式及其關聯的 Amazon EC2 執行個體,最後刪除用於存放成品的 Amazon S3 儲存貯體。如果您不打算繼續使用其他資源,也應該考慮是否要刪除其他資源,例如 GitHub 儲存庫。

清除此教學中使用的資源
  1. 在本機 Linux、macOS 或 Unix 電腦上開啟終端機工作階段,或在本機 Windows 電腦上開啟命令提示字元,然後執行delete-pipeline指令以刪除您建立的管線。對於 MySecondPipeline,建議您輸入下列命令:

    aws codepipeline delete-pipeline --name "MySecondPipeline"

    此命令不會傳回任何結果。

  2. 若要清理您的 CodeDeploy 資源,請依照理中的指示操作。

  3. 若要清理執行個體資源,請刪除安裝 Jenkins 的EC2執行個體。如需詳細資訊,請參閱清理您的執行個體

  4. 如果您不打算建立更多管道或 CodePipeline 再次使用,請刪除用於存放管道成品的 Amazon S3 儲存貯體。若要刪除​儲存貯體,請按照刪除儲存貯體中的說明進行。

  5. 若您不想要再次使用此管道的其他資源,請考慮依照該特定資源的說明來刪除這些資源。例如,如果您要刪除 GitHub 存放庫,請按照刪除 GitHub 網站上的存放庫中的指示進行操作。