VSTS 雲到地的 CI CD (01) - 打通佈署管線

此系列是介紹在最近工作上 CI CD 的流程打造.

需求描述: Source Code 放在雲上 VSTS 的 TFVC, 而 Production Server 則是在自家多台伺服器中, 要透過 VSTS 佈署到自家 IIS 站台.

條件:

  1. 沒有專屬的固定對外 IP (對外固定 IP 有限無法專門為這台 VM 配置)
  2. 有 Domain Name 指向到這台 VM 位址

開發環境:

  • Windows 10
  • Visual Studio 2015 Update 3

Production Server:

  • Windows Server 2012 R2
  • IIS 8
  • .Net Framework 4.6

我們先用本地佈署至遠端 Server 來模擬 VSTS 佈署至遠端 Server 的情境

試著想像 VSTS 既然無法透過 IP 去連到遠端 Server

那我們在本地透過 IP 去佈署到遠端 Server ( 此方法即不採納 )

所以在本地佈署也不能使用指定 IP 的方式去佈署

Web Deployment Tool

保哥在 2010 寫了一篇文章 - 如何使用 Visual Studio 2010 的「單鍵發行」功能 (MsDeploy)

參照保哥的文章在 IIS 那台遠端 Server 把 Web Deployment Agent Service 裝起來

預設裝完 WebDeploy 佔用 port 80, 外面一樣不知道怎麼如何打請求

P.S. 記得檢查 Services 中有確定安裝起來並執行中

利用 IIS 站台 URL Rewrite 重新把請求導向到 :80

URL Rewrite 需要手動安裝以下:

在 IIS 新增一個跳板站台設定 DomainName 指向到這個跳板站台

URL Rewrite 設定完的站台根目錄底下的 web.config

<configuration>
    <system.webServer>
		<rewrite>
            <rules>
                <rule name="xxxxxxxxxxxx">
                    <match url="^(.*)" />
                    <conditions>
                        <add input="{HTTP_HOST}" pattern="^(.*)" />
                    </conditions>
                    <action type="Rewrite" url="http://127.0.0.1:80/{R:1}" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

如此一來針對網址打請求都會重新定向該 Server 的 80 port

記得 IIS 上的「管理服務」要將「啟用遠端連線」打開, 才能透過外部遠端佈署

驗證此服務是否真的能透過網址呼叫, 可以開啟瀏覽器打上設定的對網址 + 上 「/MSDEPLOYAGENTSERVICE」

應該要看到要輸入帳密來認證

為了實驗這方法是可行的, 我們先使用 Visual Studio 2015 Web Publish 

選擇「Web Deploy」, 佈署站台 (Site name) 的名稱記得輸入

按下「Publish」就會開始進行佈署

如果到這步都順利完成的話就恭喜你已經打通遠端佈署的步驟了

接下來我們就利用剛剛製作完成的發行檔 (xxxxxx.pubxml) 透過 VSTS 來進行雲到地佈署

VSTS 遠端佈署

以下我們將直接在 Build 的階段就進行佈署

才不會失焦對「遠端佈署」這個主題失焦

可以直接選擇 Visual Studio  template 進行修改

NuGet restore 我們就不進行修改

主要修改的是 Build solution 的參數

/p:DeployOnBuild=true /p:PublishProfile="xxxxxx.pubxml" /p:username="xxx" /p:password="xxx"

讓建置成功之後遠端佈署到 IIS 上

之後 Trigger 這個 Build 試試是否成功, 大功告成

MsDeploy Package Sync

如果上述步驟都成功的話, 各位應該會發現可怕的數字

居然要佈署 27.2 minutes

以下嘗試透過此服務再搭配 Web Deploy Package 將 .zip 進行佈署 IIS 站台

一樣先透過 Visual Studio 2015 製作發行檔「Web Deploy Package」

為了方便我們直接打包在同層根目錄底下就行了

先在 VSTS 安裝 MSDeploy Package Sync

定義一個新的 Build

Build Solution 的 MSBuild Arguments 改為呼叫新的發行檔

/p:DeployOnBuild=true /p:PublishProfile="xxxxxx.pubxml"

然後加入一個 build step

選擇剛剛安裝好的 MSDeploy Package Sync

直白的設定就不多做解釋了, 要注意 Additional Arguments 是用單引號去傳遞值

-verbose -setParam:'IIS Web Application Name'='xxx'

如果成功佈署

應該可以看到時間大大的減少

下一篇將介紹如何透過 Release Management 在佈署階段去替換掉 web.config

相關連結

如何使用 Visual Studio 2010 的「單鍵發行」功能 (MsDeploy)

Use the Web Deployment Tool

Can MSBuild deploy using integrated authentication or only basic?

MSDeploy Package Sync