使用 Visual Studio Team Service 自動建置與部署 Azure WebJob

最近剛好碰到需求是要使用 Azure WebJob 來開發一些非同步的處理程式,就希望可以讓 WebJob 也可以透過 Visual Studio Team Service 來做到 CI / CD ,方便控管軟體品質與部署,以下的範例和說明是以使用 WebJob 自己獨立的 Azure WebApp (不包含其他 Website) 為前提來設定 Visual Studio Team Service 可以自己建置及部署 Azure WebJob 專案。

建立新的 Azure WebJob 專案

  1. 打開 Visual Studio ,建立新的 WebJob 專案
    螢幕快照 2016-06-30 下午8.50.04

  2. 撰寫 Azure WebJob 程式邏輯
    螢幕快照 2016-06-30 下午8.51.40

  3. 在 Azure WebJob 專案上按下滑鼠右鍵,選擇 Publish as Azure WebJob
    螢幕快照 2016-06-30 下午8.53.09

  4. 輸入 WebJob 相關資訊(例如連續執行或是排程執行)
    螢幕快照 2016-06-30 下午8.53.35

  5. 選擇發行目標,這邊可以隨便選擇一個 WebApp,我們不會直接發行,會使用 Visual Studio Team Service 的 Release Management 來管理要發行的目的地
    螢幕快照 2016-06-30 下午8.54.01

  6. 切記!!設定完畢後,直接點選 Close,不要點選 Publish ,不然就直接發行出去了
    螢幕快照 2016-06-30 下午8.54.38

  7. 發行完畢之後,應該可以看到專案之中多了一些檔案,我們要把用不到的發行檔案刪掉 (** Web Deploy.pubxml)
    螢幕快照 2016-06-30 下午8.54.59

  8. 將專案 Commit 並且 Push 到 Visual Studio Team Service 的 Repository 之中
    螢幕快照 2016-06-30 下午9.16.26

設定自動建置 (Build)

  1. 在 Visual Studio Team Service 中設定新的 Build,並且選擇 Deployment > Azure WebApp
    螢幕快照 2016-06-30 下午9.43.55

  2. 設定 Continuous Integration ,讓新版本簽入時自動建置
    螢幕快照 2016-06-30 下午9.44.55

  3. 因為我們等等要使用 Release Management 來部署,所以這邊先把 Azure Deployment 的 Step 刪除
    螢幕快照 2016-06-30 下午9.47.10

  4. 儲存設定好的建置(Build)
    螢幕快照 2016-06-30 下午9.48.38

設定自動部署 (Release)

  1. 切換到 Visual Studio Team Service 的 Release 功能,新增一個新的 Release Definition
    螢幕快照 2016-06-30 下午10.00.39

  2. 選擇剛剛建好的 Build ,並且一樣設定 Continuous Deployment,讓有新版本時可以自動部署
    螢幕快照 2016-06-30 下午10.01.49

  3. 設定好要 Deploy 的 WebApp 資訊並儲存
    螢幕快照 2016-06-30 下午10.06.28

測試 WebJob

  1. 更新程式碼之後,Visual Studio Team Service 應該就會自動建置及部署到 Azure,我們也可以在 Azure WebApp 中看到 WebJob 正在執行
    螢幕快照 2016-06-30 下午10.22.02

  2. 我們新增一筆資料到 Azure WebJob 所監聽的 Queue 之中,也可以看到任務成功的被執行
    螢幕快照 2016-06-30 下午10.23.51

小結

透過 Visual Studio Team Service 自動建置及部署 Azure WebJob 可以讓 WebJob 專案也享受到 CI/CD 的好處,也避免人為手工部署可能造成的失誤,甚至可以透過 Release Management 管理 WebJob 要部署的環境。甚至我們還可以替 WebJob 專案加上單元測試和軟體品質分析種種工具,來讓我們 WebJob 專案的程式碼品質更加的穩定,關於以上內容,若有任何問題歡迎一起討論!