持續集成 (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 賬戶的訪問權限。 若是還沒有建立 Jenkins 服務器,請參閱 Jenkins 文檔。github
登陸到 Team Services 賬戶 (https://{youraccount}.visualstudio.com
)。 能夠獲取免費 Team Services 賬戶。web
Noteshell
有關詳細信息,請參閱鏈接到 Team Services。npm
在 Team Services 賬戶中建立我的訪問令牌 (PAT)(若是尚沒有該令牌)。 Jenkins 須要使用此信息來訪問 Team Services 賬戶。 請參閱如何建立用於 Team Services 和 TFS 的我的訪問令牌來了解如何生成該令牌。json
須要部署 Git 存儲庫中存儲的一個應用。 對於本教程,建議使用 GitHub 中提供的此示例應用。瀏覽器
建立此應用的一個分支並記下位置 (URL) 以便在本教程的後續步驟中使用。安全
使此分支成爲公共的以方便在後面鏈接到 GitHub。
Note
有關詳細信息,請參閱建立存儲庫分支和使專用存儲庫成爲公共的。
Note
此應用是使用 Yeoman 構建的;它使用了 Express、bower 和 grunt;它以某些 npm 程序包做爲依賴項。 示例應用包含一組 Azure 資源管理器模板,它們用來爲 Azure 上的部署動態建立虛擬機。 Team Services 發佈定義中的任務會使用這些模板。 主模板建立一個網絡安全組、一臺虛擬機和一個虛擬網絡。 它分配一個公共 IP 地址並打開入站端口 80。 它還會添加一個標記,部署組會使用該標記來選擇要接收部署的計算機。
示例還包含一個用來設置 Nginx 並部署應用的腳本。 它在每臺虛擬機上執行。 具體而言,該腳本會安裝 Node、Nginx 和 PM2,配置 Nginx 和 PM2,並啓動 Node 應用。
首先,必須爲 NodeJS 和與 Team Services 的集成配置兩個 Jenkins 插件。
打開 Jenkins 賬戶並選擇「管理 Jenkins」。
在「管理 Jenkins」頁中,選擇「管理插件」。
對列表進行篩選以找到「NodeJS」插件,安裝該插件且不重啓。
對列表進行篩選以找到「Team Foundation Server」插件並安裝它。 (此插件同時適用於 Team Services 和 Team Foundation Server。)不須要重啓 Jenkins。
在 Jenkins 中,建立一個新的生成項目並以下所述對其進行配置:
在「常規」選項卡中,爲生成項目輸入一個名稱。
在「源代碼管理」選項卡中,選擇「Git」並輸入包含應用代碼的存儲庫和分支的詳細信息。
Note
若是存儲庫不是公共的,請選擇「添加」並提供用於鏈接到它的憑據。
在「生成觸發器」選項卡中,選擇「輪詢 SCM」並輸入計劃 H/03 * * * *
以便每三分鐘輪詢一次 Git 存儲庫來查詢更改。
在「生成環境」選項卡中,選擇「提供節點和 npm bin/ 文件路徑」並輸入 NodeJS
做爲 Node JS 安裝值。 將「npmrc 文件」保留設置爲「使用系統默認值」。
在「生成」選項卡中,輸入命令 npm install
以確保更新全部依賴項。
在「生成後操做」選項卡中,對於「要存檔的文件」,輸入 **/*
以包括全部文件。
對於「TFS/Team Services 中的觸發器發佈」,輸入賬戶的完整 URL(例如 https://your-account-name.visualstudio.com
)、項目名稱、(之後建立的)發佈定義的名稱,以及用於鏈接到賬戶的憑據。 須要使用以前建立的用戶名和 PAT。
保存生成項目。
服務終結點容許 Team Services 鏈接到 Jenkins。
在 Team Services 中打開「服務」頁面,打開「新建服務終結點」列表,並選擇「Jenkins」。
輸入用來引用此鏈接的名稱。
輸入 Jenkins 服務器的 URL,並選中「接受不受信任的 SSL 證書」選項。
輸入 Jenkins 賬戶的用戶名和密碼。
選擇「驗證鏈接」來檢查信息是否正確。
選擇「肯定」以建立服務終結點。
須要一個部署組來包含虛擬機。
打開「生成和發佈」中心的「發佈」選項卡,打開「部署組」選項卡並選擇「+ 新建」。
爲部署組輸入名稱和可選說明。 選擇「建立」。
Azure 資源組部署任務會在它運行時使用 Azure 資源管理器模板建立並註冊 VM。 你不須要本身建立並註冊虛擬機。
發佈定義指定 Team Services 在部署應用時執行的流程。 若要在 Team Services 中建立發佈定義,請執行如下操做:
打開「生成和發佈」中心的「生成」選項卡,打開發布定義列表中的 + 下拉列表,並選擇「建立發佈定義」。&
選擇「空」模板並選擇「下一步」。
在「項目」部分中,單擊「連接一個項目」並選擇「Jenkins」。 選擇本身的 Jenkins 服務終結點鏈接。 而後,選擇 Jenkins 源做業並選擇「建立」。
在新的發佈定義中,選擇「+ 添加任務」並向默認環境中添加一個Azure 資源組部署任務。
選擇「+ 添加任務」連接旁邊的下拉箭頭並向定義中添加一個部署組階段。
在任務目錄中,打開「實用工具」部分並添加「Shell 腳本」任務的一個實例。
Azure 資源組部署任務中使用的參數模板設置用來鏈接到 VM 的管理員密碼。 經過變量 $(adminpassword) 提供此密碼:
打開「變量」選項卡,在「變量」部分中,輸入名稱 adminpassword
。
輸入管理員密碼。
選擇值文本框旁邊的「掛鎖」圖標來保護密碼。
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 腳本任務用來爲在每臺服務器上安裝 Node.js 並啓動該應用的腳本提供配置。 請以下所述對其進行配置:
腳本路徑:$(System.DefaultWorkingDirectory)/Fabrikam-Node/deployscript.sh
指定工做目錄:Checked
工做目錄:$(System.DefaultWorkingDirectory)/Fabrikam-Node
將發佈定義的名稱編輯爲在 Jenkins 的生成的「生成後操做」選項卡中指定的名稱。 Jenkins 要求此名稱可以在源項目更新時觸發新的發佈。
(可選)經過單擊環境名稱來更改該名稱。
選擇「保存」,並選擇「肯定」。
選擇「+ 發佈」並選擇「建立發佈」。
在突出顯示的下拉列表中選擇已完成的生成,並選擇「建立」。
選擇彈出消息中的發佈連接。 例如:「發佈 Release-1 已建立。」
打開「日誌」選項卡以查看發佈控制檯輸出。
在瀏覽器中,打開已添加到部署組的服務器之一的 URL。 例如,輸入 http://{your-server-ip-address}
在發佈定義中,在 Azure 資源組部署任務的設置的「控制選項」部分中取消選中「已啓用」複選框。 對於到現有部署組的未來部署,不須要從新執行此任務。
轉到源 Git 存儲庫並修改文件 app/views/index.jade 中 h1 標題的內容。
提交更改。
幾分鐘後,會在 Team Services 或 TFS 的「發佈」頁面中看到新建立的發佈。 打開此發佈能夠看到部署正在進行。 祝賀你!
在本教程中,你已使用 Jenkins 生成和用於發佈的 Team Services 實現了到 Azure 的應用部署自動化。 你已瞭解如何:
轉到下一教程,詳細瞭解如何部署 LAMP(Linux、Apache、MySQL 和 PHP)堆棧。
當即訪問http://market.azure.cn