使用 Jenkins 和 Team Services 將應用部署到 Linux VM

持續集成 (CI) 和持續部署 (CD) 是一個管道,能夠經過它生成、發佈和部署代碼。 Team Services 針對到 Azure 的部署提供了一組完整的功能完備的 CI/CD 自動化工具。 Jenkins 是一個流行的基於 CI/CD 服務器的第三方工具,也提供 CI/CD 自動化功能。 能夠組合使用以上二者來自定義如何提供雲應用或服務。html

本教程使用 Jenkins 生成一個 Node.js web 應用,並使用 Visual Studio Team Services 將其部署到包含 Linux 虛擬機的部署組node

你將執行如下任務:git

  • 採用 Jenkins 生成應用
  • 爲 Team Services 集成配置 Jenkins
  • 爲 Azure 虛擬機建立部署組
  • 建立對 VM 進行配置並部署應用的發佈定義

開始以前

獲取示例應用

須要部署 Git 存儲庫中存儲的一個應用。 對於本教程,建議使用 GitHub 中提供的此示例應用瀏覽器

  1. 建立此應用的一個分支並記下位置 (URL) 以便在本教程的後續步驟中使用。安全

  2. 使此分支成爲公共的以方便在後面鏈接到 GitHub。

Note

有關詳細信息,請參閱建立存儲庫分支使專用存儲庫成爲公共的

Note

此應用是使用 Yeoman 構建的;它使用了 Express、bower 和 grunt;它以某些 npm 程序包做爲依賴項。 示例應用包含一組 Azure 資源管理器模板,它們用來爲 Azure 上的部署動態建立虛擬機。 Team Services 發佈定義中的任務會使用這些模板。 主模板建立一個網絡安全組、一臺虛擬機和一個虛擬網絡。 它分配一個公共 IP 地址並打開入站端口 80。 它還會添加一個標記,部署組會使用該標記來選擇要接收部署的計算機。

示例還包含一個用來設置 Nginx 並部署應用的腳本。 它在每臺虛擬機上執行。 具體而言,該腳本會安裝 Node、Nginx 和 PM2,配置 Nginx 和 PM2,並啓動 Node 應用。

配置 Jenkins 插件

首先,必須爲 NodeJS 和與 Team Services 的集成配置兩個 Jenkins 插件。

  1. 打開 Jenkins 賬戶並選擇「管理 Jenkins」。

  2. 在「管理 Jenkins」頁中,選擇「管理插件」。

  3. 對列表進行篩選以找到「NodeJS」插件,安裝該插件且不重啓。

    將 NodeJS 插件添加到 Jenkins

  4. 對列表進行篩選以找到「Team Foundation Server」插件並安裝它。 (此插件同時適用於 Team Services 和 Team Foundation Server。)不須要重啓 Jenkins。

爲 Node.js 配置 Jenkins 生成

在 Jenkins 中,建立一個新的生成項目並以下所述對其進行配置:

  1. 在「常規」選項卡中,爲生成項目輸入一個名稱。

  2. 在「源代碼管理」選項卡中,選擇「Git」並輸入包含應用代碼的存儲庫和分支的詳細信息。

    將存儲庫添加到生成

    Note

    若是存儲庫不是公共的,請選擇「添加」並提供用於鏈接到它的憑據。

  3. 在「生成觸發器」選項卡中,選擇「輪詢 SCM」並輸入計劃 H/03 * * * * 以便每三分鐘輪詢一次 Git 存儲庫來查詢更改。

  4. 在「生成環境」選項卡中,選擇「提供節點和 npm bin/ 文件路徑」並輸入 NodeJS 做爲 Node JS 安裝值。 將「npmrc 文件」保留設置爲「使用系統默認值」。

  5. 在「生成」選項卡中,輸入命令 npm install 以確保更新全部依賴項。

爲 Team Services 集成配置 Jenkins

  1. 在「生成後操做」選項卡中,對於「要存檔的文件」,輸入 **/* 以包括全部文件。

  2. 對於「TFS/Team Services 中的觸發器發佈」,輸入賬戶的完整 URL(例如 https://your-account-name.visualstudio.com)、項目名稱、(之後建立的)發佈定義的名稱,以及用於鏈接到賬戶的憑據。 須要使用以前建立的用戶名和 PAT。

    配置 Jenkins 生成後操做

  3. 保存生成項目。

建立 Jenkins 服務終結點

服務終結點容許 Team Services 鏈接到 Jenkins。

  1. 在 Team Services 中打開「服務」頁面,打開「新建服務終結點」列表,並選擇「Jenkins」。

    添加 Jenkins 終結點

  2. 輸入用來引用此鏈接的名稱。

  3. 輸入 Jenkins 服務器的 URL,並選中「接受不受信任的 SSL 證書」選項。

  4. 輸入 Jenkins 賬戶的用戶名和密碼。

  5. 選擇「驗證鏈接」來檢查信息是否正確。

  6. 選擇「肯定」以建立服務終結點。

建立部署組

須要一個部署組來包含虛擬機。

  1. 打開「生成和發佈」中心的「發佈」選項卡,打開「部署組」選項卡並選擇「+ 新建」。

  2. 爲部署組輸入名稱和可選說明。 選擇「建立」。

Azure 資源組部署任務會在它運行時使用 Azure 資源管理器模板建立並註冊 VM。 你不須要本身建立並註冊虛擬機。

建立發佈定義

發佈定義指定 Team Services 在部署應用時執行的流程。 若要在 Team Services 中建立發佈定義,請執行如下操做:

  1. 打開「生成和發佈」中心的「生成」選項卡,打開發布定義列表中的 + 下拉列表,並選擇「建立發佈定義」。&

  2. 選擇「空」模板並選擇「下一步」。

  3. 在「項目」部分中,單擊「連接一個項目」並選擇「Jenkins」。 選擇本身的 Jenkins 服務終結點鏈接。 而後,選擇 Jenkins 源做業並選擇「建立」。

  4. 在新的發佈定義中,選擇「+ 添加任務」並向默認環境中添加一個Azure 資源組部署任務。

  5. 選擇「+ 添加任務」連接旁邊的下拉箭頭並向定義中添加一個部署組階段。

    添加部署組階段

  6. 在任務目錄中,打開「實用工具」部分並添加「Shell 腳本」任務的一個實例。

  7. Azure 資源組部署任務中使用的參數模板設置用來鏈接到 VM 的管理員密碼。 經過變量 $(adminpassword) 提供此密碼:

    • 打開「變量」選項卡,在「變量」部分中,輸入名稱 adminpassword

    • 輸入管理員密碼。

    • 選擇值文本框旁邊的「掛鎖」圖標來保護密碼。

配置 Azure 資源組部署任務

Azure 資源組部署任務用來建立部署組。 請以下所述對其進行配置:

  • Azure 訂閱:從「可用 Azure 服務鏈接」下的列表中選擇一個鏈接。 若是沒有顯示任何鏈接,則依次選擇「管理」、「新建服務終結點」和「Azure 資源管理器」,並根據提示進行操做。 返回到發佈定義,刷新「AzureRM 訂閱」列表並選擇已建立的鏈接。

  • 資源組:輸入以前建立的資源組的名稱。

  • 位置:爲部署選擇區域。

    建立新的資源組

  • 模板位置:URL of the file

  • 模板連接:{your-git-repo}/ARM-Templates/UbuntuWeb1.json

  • 模板參數連接:{your-git-repo}/ARM-Templates/UbuntuWeb1.parameters.json

  • 替代模板參數:替代值的列表,例如:-location {location} -virtualMachineName {machine] -virtualMachineSize Standard_DS1_v2 -adminUsername {username} -virtualNetworkName fabrikam-node-rg-vnet -networkInterfaceName fabrikam-node-websvr1 -networkSecurityGroupName fabrikam-node-websvr1-nsg -adminPassword $(adminpassword) -diagnosticsStorageAccountName fabrikamnodewebsvr1 -diagnosticsStorageAccountId Microsoft.Storage/storageAccounts/fabrikamnodewebsvr1 -diagnosticsStorageAccountType Standard_LRS -addressPrefix 172.16.8.0/24 -subnetName default -subnetPrefix 172.16.8.0/24 -publicIpAddressName fabrikam-node-websvr1-ip -publicIpAddressType Dynamic
    對於 {佔位符},請插入本身的具體值。

  • 啓用先決條件:Configure with Deployment Group agent

  • TFS/VSTS 終結點:選擇「添加」,並在「添加新的 Team Foundation Server/Team Services 鏈接」對話框中,選擇「基於令牌的身份驗證」。 輸入鏈接名稱和團隊項目的 URL。 而後,生成並輸入我的訪問令牌 (PAT) 來對項目團隊的鏈接進行身份驗證。

    建立我的訪問令牌

  • 團隊項目:選擇當前的項目。

  • 部署組:輸入用於資源組參數的同一部署組名稱。

Azure 資源組部署任務的默認設置是用於建立或更新資源,而且以增量方式執行該操做。 該任務在它首次運行時建立 VM,以後只是對它們進行更新。

配置 Shell 腳本任務

Shell 腳本任務用來爲在每臺服務器上安裝 Node.js 並啓動該應用的腳本提供配置。 請以下所述對其進行配置:

  • 腳本路徑:$(System.DefaultWorkingDirectory)/Fabrikam-Node/deployscript.sh

  • 指定工做目錄:Checked

  • 工做目錄:$(System.DefaultWorkingDirectory)/Fabrikam-Node

重命名並保存發佈定義

  1. 將發佈定義的名稱編輯爲在 Jenkins 的生成的「生成後操做」選項卡中指定的名稱。 Jenkins 要求此名稱可以在源項目更新時觸發新的發佈。

  2. (可選)經過單擊環境名稱來更改該名稱。

  3. 選擇「保存」,並選擇「肯定」。

啓動手動部署

  1. 選擇「+ 發佈」並選擇「建立發佈」。

  2. 在突出顯示的下拉列表中選擇已完成的生成,並選擇「建立」。

  3. 選擇彈出消息中的發佈連接。 例如:「發佈 Release-1 已建立。」

  4. 打開「日誌」選項卡以查看發佈控制檯輸出。

  5. 在瀏覽器中,打開已添加到部署組的服務器之一的 URL。 例如,輸入 http://{your-server-ip-address}

啓動 CI/CD 部署

  1. 在發佈定義中,在 Azure 資源組部署任務的設置的「控制選項」部分中取消選中「已啓用」複選框。 對於到現有部署組的未來部署,不須要從新執行此任務。

  2. 轉到源 Git 存儲庫並修改文件 app/views/index.jade 中 h1 標題的內容。

  3. 提交更改。

  4. 幾分鐘後,會在 Team Services 或 TFS 的「發佈」頁面中看到新建立的發佈。 打開此發佈能夠看到部署正在進行。 祝賀你!

後續步驟

在本教程中,你已使用 Jenkins 生成和用於發佈的 Team Services 實現了到 Azure 的應用部署自動化。 你已瞭解如何:

  • 採用 Jenkins 生成應用
  • 爲 Team Services 集成配置 Jenkins
  • 爲 Azure 虛擬機建立部署組
  • 建立對 VM 進行配置並部署應用的發佈定義

轉到下一教程,詳細瞭解如何部署 LAMP(Linux、Apache、MySQL 和 PHP)堆棧。

當即訪問http://market.azure.cn

相關文章
相關標籤/搜索