共用方式為


教學課程:使用 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 外掛程式。
  • 配置 Jenkins Freestyle 專案以使用 Node.js。
  • 設定 Jenkins 以進行 Azure DevOps Services 整合。
  • 建立 Jenkins 服務端點。
  • 建立 Azure 虛擬機器的部署群組。
  • 建立 Azure Pipelines 發行管線。
  • 執行手動部署以及由 CI 觸發的部署。

先決條件

取得範例應用程式

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

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

備註

該應用程序是通過 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 外掛程式,然後選取 安裝而不重新啟動 選項。 將 NodeJS 外掛程式新增至 Jenkins
  4. 篩選清單以尋找 VS Team Services 持續部署 外掛程式,然後選取 [ 安裝而不重新啟動 ] 選項。
  5. 返回 Jenkins 儀表板並選取 管理 Jenkins
  6. 選取 全域工具組態。 找到 NodeJS 並選擇 NodeJS 安裝
  7. 選取 [自動安裝] 選項,然後輸入 [名稱 ] 值。
  8. 選取 [儲存]。

設定一個 Jenkins Freestyle 專案用於 Node.js

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

設定 Jenkins 以進行 Azure DevOps Services 整合

備註

請確定您用於下列步驟的個人存取權杖 (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,請輸入使用者名稱和密碼。
      設定 Jenkins 建置後動作
  9. 儲存 Jenkins 專案。

建立 Jenkins 服務端點

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

  1. 開啟 Azure DevOps Services 中的 [服務 ] 頁面,開啟 [ 新增服務端點] 清單,然後選取 [Jenkins]。 新增 Jenkins 端點
  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 用來部署應用程式的過程。 在此範例中,您會執行 Shell 指令碼。

若要在 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. 在瀏覽器中,打開您新增至部署群組的其中一部伺服器的網址。 例如,輸入 http://{your-server-ip-address}
  6. 前往來源 Git 儲存庫,並使用一些變更的文字修改檔案 app/views/index.jade 中 h1 標題的內容。
  7. 提交您的變更。
  8. 幾分鐘後,您會在 Azure DevOps 的 [發行 ] 頁面上看到建立的新版本。 開啟發行版本以查看部署的進行狀態。 祝賀!

疑難排解 Jenkins 外掛程式

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

後續步驟

在本教學課程中,您會使用 Jenkins 進行建置,以及使用 Azure DevOps Services 進行發行,將應用程式自動部署至 Azure。 您已學到如何做到以下幾點:

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

若要瞭解如何使用 Azure Pipelines 進行建置和發行步驟,請參閱 這裡

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