教學課程:使用 Jenkins 和 Azure DevOps Services 部署至 Linux 虛擬機

持續整合 (CI) 和持續部署 (CD) 會形成管線,您可以建置、發行及部署程式代碼。 Azure DevOps Services 提供一組完整的完整功能 CI/CD 自動化工具,可供部署至 Azure。 Jenkins 是熱門的第三方 CI/CD 伺服器型工具,也提供 CI/CD 自動化。 您可以將 Azure DevOps Services 和 Jenkins 一起使用,以自定義如何傳遞雲端應用程式或服務。

在本教學課程中,您會使用 Jenkins 來建置 Node.js Web 應用程式。 然後,您會使用 Azure DevOps 來部署它

至包含Linux虛擬機 (VM) 的部署群組。 您將學習如何:

  • 取得範例應用程式。
  • 設定 Jenkins 外掛程式。
  • 設定 Node.js 的 Jenkins Freestyle 專案。
  • 設定 Jenkins 以進行 Azure DevOps Services 整合。
  • 建立 Jenkins 服務端點。
  • 建立 Azure 虛擬機的部署群組。
  • 建立 Azure Pipelines 發行管線。
  • 執行手動和 CI 觸發的部署。

必要條件

  • 您需要 Linux 虛擬機器才能部署目標。 如需詳細資訊,請參閱 使用 Azure CLI 建立和管理 Linux VM。

  • 開啟虛擬機的輸入埠 80。 如需詳細資訊,請參閱使用 Azure 入口網站 建立網路安全組。

取得範例應用程式

您需要應用程式來部署並儲存在 Git 存放庫中。 在本教學課程中,建議您使用此 可從 GitHub 取得的範例應用程式。 本教學課程包含用於安裝 Node.js 和應用程式的範例腳本。 如果您想要使用自己的存放庫,您應該設定類似的範例。

建立此應用程式的分支,並記下位置 (URL) 以在本教學課程的後續步驟中使用。 如需詳細資訊,請參閱 分支存放庫

注意

應用程式是透過 Yeoman建置的。 它會使用 Express、bower 和 grunt。 它有一些 npm 套件作為相依性。 此範例也包含設定 Nginx 並部署應用程式的腳本。 它會在虛擬機上執行。 具體來說,腳本:

  1. 安裝 Node、Nginx 和 PM2。
  2. 設定 Nginx 和 PM2。
  3. 啟動 Node 應用程式。

設定 Jenkins 外掛程式

首先,您必須設定兩個 Jenkins 外掛程式: NodeJSVS Team Services 持續部署

  1. 開啟您的 Jenkins 帳戶,然後選取 [ 管理 Jenkins]。
  2. 在 [ 管理 Jenkins ] 頁面上,選取 [ 管理外掛程式]。
  3. 篩選清單以找出 NodeJS 外掛程式,然後選取 [ 安裝但不重新啟動] 選項。 Adding the NodeJS plug-in to Jenkins
  4. 篩選清單以尋找 VS Team Services 持續部署 外掛程式,然後選取 [安裝但不重新啟動] 選項。
  5. 返回 Jenkins 儀錶板,然後選取 [ 管理 Jenkins]。
  6. 選取 [ 全域工具組態]。 尋找 NodeJS ,然後選取 [NodeJS 安裝]。
  7. 選取 [ 自動安裝] 選項,然後輸入 [名稱] 值。
  8. 選取 [儲存]。

設定 Node.js 的 Jenkins Freestyle 專案

  1. 選取 [ 新增專案]。 輸入項目名稱。
  2. 選取 [Freestyle 專案]。 選取 [確定]。
  3. 在 [ 原始程式碼管理 ] 索引標籤上,選取 [Git ],然後輸入存放庫和包含您應用程式程式碼的分支詳細數據。
    Add a repo to your build
  4. 在 [ 建置觸發程式] 索引 卷標上,選取 [輪詢 SCM ],然後輸入排程 H/03 * * * * 以每隔三分鐘輪詢 Git 存放庫的變更。
  5. 在 [ 建置環境] 索引標籤上,選取 [提供節點和 npm bin/ 資料夾 PATH ],然後選取 [NodeJS 安裝 ] 值。 將 npmrc 檔案 設定為 使用系統預設值
  6. 在 [ 建置] 索引標籤上,選取 [ 執行殼層 ],然後輸入 命令 npm install ,以確保所有相依性都已更新。

設定適用於 Azure DevOps Services 整合的 Jenkins

注意

請確定您用於下列步驟的個人存取令牌 (PAT) 包含 Azure DevOps Services 中的發行 (讀取、寫入、執行及管理)許可權。

  1. 如果您還沒有 PAT,請在 Azure DevOps Services 組織中建立 PAT。 Jenkins 需要此資訊才能存取您的 Azure DevOps Services 組織。 請務必儲存本節中後續步驟的令牌資訊。

    若要瞭解如何產生令牌,請閱讀 如何? 建立 Azure DevOps Services 的個人存取令牌?

  2. 在 [ 建置後動作] 索引 卷標中,選取 [新增建置後動作]。 選取 [ 封存成品]。

  3. 針對 [ 要封存的檔案],輸入 **/* 以包含所有檔案。

  4. 若要建立另一個動作,請選取 [新增建置後動作]。

  5. 在 TFS/Team Services 中選取 [觸發程式版本]。 輸入 Azure DevOps Services 組織的 URI,例如 https://{your-organization-name}.visualstudio.com

  6. 輸入專案名稱

  7. 選擇發行管線的名稱。 (您稍後會在 Azure DevOps Services 中建立此發行管線。

  8. 選擇認證以連線到 Azure DevOps Services 或 Azure DevOps Server 環境:

    • 如果您使用 Azure DevOps Services,請將 [用戶名稱] 保留空白。
    • 如果您使用內部部署版本的 Azure DevOps Server,請輸入使用者名稱和密碼。
      Configuring Jenkins post-build actions
  9. 儲存 Jenkins 專案。

建立 Jenkins 服務端點

服務端點可讓 Azure DevOps Services 連線到 Jenkins。

  1. 在 Azure DevOps Services 中開啟 [服務] 頁面,開啟 [新增服務端點] 列表,然後選取 [Jenkins]。 Add a Jenkins endpoint
  2. 輸入連接的名稱
  3. 輸入 Jenkins 伺服器的 URL,然後選取 [ 接受不受信任的 SSL 憑證 ] 選項。 範例 URL 是 http://{YourJenkinsURL}.westcentralus.cloudapp.azure.com
  4. 輸入 Jenkins 帳戶的使用者名稱和密碼。
  5. 選取 [ 驗證連線 ] 以檢查資訊是否正確。
  6. 選取 [ 確定 ] 以建立服務端點。

建立 Azure 虛擬機的部署群組

您需要部署 群組 來註冊 Azure DevOps Services 代理程式,以便將發行管線部署至虛擬機。 部署群組可讓您輕鬆地定義目標機器的邏輯群組以進行部署,並在每部機器上安裝必要的代理程式。

注意

在下列程式中,請務必安裝必要條件,且 不要使用sudo許可權執行腳本。

  1. 開啟 [組建與發行] 中樞的 [發行] 索引標籤,開啟 [部署群組],然後選取 [+ 新增]。
  2. 輸入部署群組的名稱和選擇性描述。 然後選取建立
  3. 選擇部署目標虛擬機的作業系統。 例如,選取 [Ubuntu 16.04+]。
  4. 選取 [在腳本中使用個人存取令牌進行驗證]。
  5. 選取 [ 系統必要條件] 連結。 安裝作業系統的必要條件。
  6. 選取 [ 將文稿複製到剪貼簿 ] 以複製腳本。
  7. 登入您的部署目標虛擬機並執行腳本。 請勿使用 sudo 許可權執行文稿。
  8. 安裝之後,系統會提示您輸入部署群組標籤。 接受預設值。
  9. 在 Azure DevOps Services 中,檢查部署群組[目標] 中新註冊的虛擬機。

建立 Azure Pipelines 發行管線

發行管線會指定 Azure Pipelines 用來部署應用程式的程式。 在此範例中,您會執行殼層腳本。

若要在 Azure Pipelines 中建立發行管線:

  1. 開啟 [組建與發行] 中樞的 [發行] 索引標籤,然後選取 [建立發行管線]。
  2. 選擇從空白程序開始,以選取 [空白] 範本。
  3. 在 [成品] 區段中,選取 [+ 新增成品],然後選擇 [來源類型] 的 [Jenkins]。 選取您的 Jenkins 服務端點連線。 然後選取 Jenkins 來源作業,然後選取 [ 新增]。
  4. 選取環境 1的省略號。 選取 [ 新增部署群組階段]。
  5. 選擇您的部署群組。
  6. 選取 + 以將工作新增至 部署群組階段
  7. 選取Shell腳本工作,然後選取 [新增]。 Shell 文稿工作提供可在每部伺服器上執行的腳本設定,以便安裝 Node.js 並啟動應用程式。
  8. 針對 [腳本路徑],輸入 $(System.DefaultWorkingDirectory)/Fabrikam-Node/deployscript.sh
  9. 選取 [ 進階],然後啟用 [指定工作目錄]。
  10. 針對 [工作目錄],輸入 $(System.DefaultWorkingDirectory)/Fabrikam-Node
  11. 編輯發行管線的名稱,以您在 Jenkins 中組建的 [建置後動作] 索引標籤上指定的名稱。 Jenkins 要求此名稱能夠在更新來源成品時觸發新版本。
  12. 選取 [ 儲存 ],然後選取 [ 確定 ] 以儲存發行管線。

執行手動和 CI 觸發的部署

  1. 選取 [+ 發行 ],然後選取 [ 建立發行]。
  2. 選取您在反白顯示下拉式清單中完成的組建,然後選取 [ 佇列]。
  3. 選擇快顯訊息中的發行連結。 例如:「已建立 Release-1」。
  4. 開啟 [記錄] 索引標籤以監看發行主控台輸出。
  5. 在瀏覽器中,開啟您新增至部署群組之其中一部伺服器的URL。 例如,輸入 http://{your-server-ip-address}
  6. 移至來源 Git 存放庫,並使用一些已變更的文字修改檔案 app/views/index.jade 中 h1 標題的內容
  7. 認可您的變更。
  8. 幾分鐘后,您會看到在 Azure DevOps 的 [發行] 頁面上建立的新版本。 開啟版本以查看部署發生。 恭喜!

針對 Jenkins 外掛程式進行疑難解答

如果您在 Jenkins 外掛程式遇到任何 Bug,請在 Jenkins JIRA針對特定元件提出問題。

下一步

在本教學課程中,您會使用 Jenkins 進行建置和發行的 Azure DevOps Services,將應用程式部署至 Azure 自動化。 您已了解如何︰

  • 在 Jenkins 中建置您的應用程式。
  • 設定 Jenkins 以進行 Azure DevOps Services 整合。
  • 建立 Azure 虛擬機的部署群組。
  • 建立 Azure Pipeline 來設定 VM 並部署應用程式。

若要瞭解如何針對建置和發行步驟使用 Azure Pipelines,請參閱 這一點

若要瞭解如何撰寫 YAML 型 CI/CD 管線以部署至 VM,請繼續進行下一個教學課程。