2017年4月3日 星期一

使用Jenkins進行ASP.NET自動化部署

這篇將說明如何在Windows作業系統上,使用Jenkins軟體,從版本控管Subversion取得ASP.NET專案程式,在本機上進行自動化部署作業。

一、準備作業

⬛安裝Jenkins軟體,請參考Jenkins 安裝教學
⬛安裝Sbuversion版本控管軟體,請參考Subversion Server for Windows
⬛準備發行之ASP.NET專案,請參考Visual Studio 單鍵發行使用Web.config轉換語法進行差異化部署,並將程式碼簽入Subversion Server控管。


二、安裝MSBuild Plugin與Subversion Plug-in與套件

⬛開啟Jenkis管理介面,執行左側功能選單中[管理Jenkins],然後於內容中點選[管理外掛程式]。

⬛在管理外掛程式的內容中,先點擊[可用的]頁籤,然後勾選[MSBuild Plugin]套件,然後按下[直接安裝]。
因為Jenkins套件數量破千,要尋找某一個套件並不容易,畫面上有個小技巧很好用,若已知套件部分或全部的名稱,在過濾條件輸入關鍵字後,自動顯示符合關鍵字之套件名稱。

⬛在Update Center的的內容中,會顯示正在安裝/升級Plugins的的套件清單,與安裝的進度狀態。

⬛在安裝Jenkins時,預設的安裝套件中,應該已安裝Subversion Plug-in套件,若沒有,請依照上述步驟安裝[Subversion Plug-in]。

三、Jenkins環境設定

這節將對MSBuild與Subversion進行環境設定,以方便日後常態性使用。

⬛MSBuild:開啟Jenkis管理介面,執行左側功能選單中[管理Jenkins],然後於內容中點選[Global Tool Configuration]。

在Global Tool Configuration的內容中,先找到[MSBuild]區段,然後按下[MSBuild 安裝...]鈕,進行新增MSBuild參數設定。

⬛在Name輸入.net framework 4.0,Path to MSBuild輸入C:\Windows\Microsoft.NET\Framework\v4.0.30319,然後按下[Save]鈕儲存設定。
視需要可以新增多個.Net framework版本。

⬛Subversion:開啟Jenkis管理介面,執行左側功能選單中[管理Jenkins],然後於內容中點選[設定系統]。

設定系統的內容中,先找到[Subversion]區段,Subversion 工作區版次選擇[1.7],然後按下[儲存]

那要如何得知Subversion 工作區版次呢?
檢查受SVN控管的專案目錄底下.svn/format或.svn/entries,其版本與工作區版次對應如下。
Version 7 is SVN 1.3
Version 8 is SVN 1.4
Version 9 is SVN 1.5
Version 10 is SVN 1.6
Version 12 is SVN 1.7

四、Jenkins作業

接下來終於要新增作業來進行自動化部署。

開啟Jenkis管理介面,執行左側功能選單中[新增作業]。

輸入作業名稱WebApplication1,並在下方作業類型中選擇[建置 Free-Style 軟體專案],然後按下[OK]。

⬛在[General]頁籤中,不需修改任何內容。

⬛在[原始碼管理]頁籤中,點選[Subversion]作為原始碼的資料來源,Repository URL輸入https://localhost/svn/Demo/WebApplication1,Credentials選項下拉後,選擇可以存取該Repository的帳號與密碼(可以點擊選項右方[Add]鈕進行新增帳號與密碼)。

⬛在[建置觸發程序]頁籤中,可同時存在多種觸發方法,這裡設定遠端觸發建置與定期建置,[遠端觸發建置]需另外開啟一個瀏覽器,並輸入指定之 URL進行觸發建置,[定期建置]輸入00 22 03 * *,代表每個月的03號22時00分就會執行一次。

⬛在[建置環境]頁籤中,勾選[Delete workspace before build starts]選項,代表作業在每次建置之前,都會將工作區內的原始碼清空,以確保每次都會從原始碼管理再下載一份新的程式。勾選[在「畫面輸出」中加入時間戳記],代表作業在建置過程中所產生的記錄檔會有時間戳記。

⬛在[建置]頁籤中,[MSBuild Version]下拉選項點選.net framework 4.0,[MSBuild Build File]輸入WebApplication1.sln,[Command Line Arguments]輸入下面參數字串。

/p:DeployOnBuild=true /p:PublishProfile=Release


⬛按下[儲存],完成新增作業的設定。

⬛回到專案WebApplicaton1的管理介面,可以執行左側功能選單中[馬上建置],來驗證一下設定的內容是否正確。下方建置歷程中#1作業亮起藍燈,代表建置作業成功。

⬛開啟瀏覽器來進行遠端觸發作業,輸入http://localhost:8080/job/WebApplication1/build?token=123456。

⬛點選建置歷程#2,第一行便顯示此次建置是由遠端主機啟動。

⬛因為有預設定期建置的時間,剛好時間一到而觸發建置作業,查看建置歷程#3的記錄。


自動化部署完成!

2017年4月2日 星期日

使用Web.config轉換語法進行差異化部署

這篇將延續上篇Visual Studio 單鍵發行,說明使用單鍵發行功能,在實務上要如何因應不同環境(如本機正式、測試與開發環境),進行Web.config檔的差異化部署,例如資料庫連線字串或其他參數在不同環境下,其內容值也會不同。

一、本機環境

這節將說明在本機環境進行開發與測試。

⬛編輯Web.config檔,在configuration節點底下,新增下列參數設定。
<configuration>
  <appSettings>
    <add key="ServerName" value="localServer"/>
    <add key="API" value="http://localhost"/>
  </appSettings>
  <connectionStrings>
    <add name="DB" connectionString="Data Source=.;Initial Catalog=Northwind;Persist Security Info=True;User ID=userName;Password=password" providerName="System.Data.SqlClient" />
  </connectionStrings>
    <system.web>
      <compilation debug="true" targetFramework="4.0" />
    </system.web>
</configuration>

⬛編輯Default.aspx.cs程式檔,在Page_Load事件中,新增下列程式碼,主要目的是要把Web.config檔中的參數設定顯示於頁面上。
protected void Page_Load(object sender, EventArgs e)
{
    Response.Write("ServerName=" + System.Configuration.ConfigurationManager.AppSettings["ServerName"].ToString() + "<BR/>");
    Response.Write("API=" + System.Configuration.ConfigurationManager.AppSettings["API"].ToString() + "<BR/>");
    Response.Write("DB=" + System.Configuration.ConfigurationManager.ConnectionStrings["DB"].ToString() + "<BR/>");
}

⬛最後按下[開始偵錯 ]執行程式,確認網頁程式有將本機環境所使用的參數檔內容,成功的顯示出來。


二、正式環境

這節將延續第一節本機環境結果,說明在本機開發作業完成後,如何進行正式環境部署。

⬛編輯Web.Release.config檔,在configuration節點底下,新增下列參數設定。

  <appSettings>
    <add key="ServerName" value="ReleaseServer" xdt:Transform="SetAttributes" xdt:Locator="Match(key)" />
    <add key="API" value="http://10.10.10.51" xdt:Transform="SetAttributes" xdt:Locator="Match(key)" />
  </appSettings>
  <connectionStrings>
    <add name="DB" connectionString="Data Source=ReleaseHostName;Initial Catalog=Northwind;Persist Security Info=True;User ID=userName;Password=password" providerName="System.Data.SqlClient"
         xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
  </connectionStrings>
透過Web.config 轉換語法可以因應不同環境的需要,進行差異化部署。xdt:Locator:Locator 屬性指定您想要以某種方式變更的 Web.config 項目或項目集,xdt:Transform:Transform 屬性指定您要對 Locator 屬性找到的項目做出何種處理。詳細的內容請參閱Web 應用程式專案部署的 Web.config 轉換語法

⬛滑鼠移動至方案總管的專案WebApplication1項目上點擊右鍵,於快顯選單中點選[發行]功能,開啟發行Web視窗,選擇先前新增好的設定檔Release,按下[發行]鈕。

⬛發行作業完成後會自動開啟網頁瀏覽,查看參數檔內容,已經改為正式環境所需要的內容值。

⬛最後再到正式環境路徑下驗明正身,打開Web.config檔,再次確認部署的內容值。
正式環境部署完成!

三、測試環境
⬛測試環境的部署方式,請仿照第二節正式環境來依樣畫葫蘆,就可以完成測試環境的部署。

四、開發環境
在多人開發的情形下,可能會有需要建置開發環境,這節將說明如何新增Develop設定檔來進行部署作業。

⬛ 開啟Visual Studio 開發工具>建置>組態管理員。

⬛點擊使用中的方案組態下拉選單,選擇[新增]項目。

⬛在新增方案組態視窗中,輸入名稱Develop,複製設定值來源Debug,勾選建立新專案組態,先按下[確定]鈕,然後在組態管理員視窗中再按下[關閉]。

⬛滑鼠移動至方案總管的Web.config項目上點擊右鍵,選擇[新增設定轉換]功能。

⬛此時在Web.config檔的依存檔案中,會增加一個Web.Develop.config檔

⬛編輯Web.Develop.config檔,在configuration節點底下,新增下列參數設定。
  <appSettings>
    <add key="ServerName" value="DevelopServer" xdt:Transform="SetAttributes" xdt:Locator="Match(key)" />
    <add key="API" value="http://10.10.20.36" xdt:Transform="SetAttributes" xdt:Locator="Match(key)" />
  </appSettings>
  <connectionStrings>
    <add name="DB" connectionString="Data Source=DevelopHostName;Initial Catalog=Northwind;Persist Security Info=True;User ID=userName;Password=password" providerName="System.Data.SqlClient"
         xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
  </connectionStrings>

⬛滑鼠移動至方案總管的專案WebApplication1項目上點擊右鍵,於快顯選單中點選[發行]功能,開啟發行Web視窗。執行功能在選取或匯入發行設定檔(下拉選單)>新增設定檔。

⬛ 在出現新增設定檔窗後,輸入設定檔名稱為Develop後按下[確定]。

⬛輸入連線參數,發行方法選擇Web Deploy(單鍵發行),伺服器輸入localhost,網站名稱輸入DemoSite/DevelopWebApp,目的地URL輸入localhost/DevelopWebApp/Default.aspx,然後按[下一個]。

⬛組態選擇Develop,然後按[下一個]。

⬛可直接按下[發行]鈕,開始進行開發環境的部署。

⬛可以在Visual Studio 開發工具的輸出視窗中,查看發行作業的歷程記錄,發行作業完成後會自動開啟網頁瀏覽,查看參數檔內容,已經改為開發環境所需要的內容值。

⬛最後再到開發環境路徑下檢查Web.config檔,再次確認部署的內容值。
開發環境部署成功!



2017年4月1日 星期六

Visual Studio 單鍵發行

還在用手動方式來部署應用程式嗎,這篇教學將帶領大家快速體驗單鍵發行功能,不用準備多台伺服器,在本機電腦就可以體驗。

一、準備作業

⬛此範例教學是在本機(localhost)執行單鍵發行,必先於控制台>所有控制台項目>程式和功能>開啟或關閉Windows功能,進行安裝IIS管理服務(Web Management Service)。

⬛這裡建議先在IIS新增站台[DemoSite],以便完成後面的設定步驟。


二、設定步驟

⬛開啟Visual Studio 開發工具,新增[ASP.NET 空白 Web 應用程式]專案,名稱與方案名稱皆預設為WebApplication1,位置可用預設或自訂。

⬛滑鼠移動至方案總管的專案WebApplication1項目上點擊右鍵,加入WebForm檔,名稱為Default.aspx(這個網頁檔會在後面的設定中用到)。

⬛滑鼠移動至方案總管的專案WebApplication1項目上點擊右鍵,於快顯選單中點選[發行]功能,開啟發行Web視窗。

⬛於發行Web視窗>選取或匯入發行設定檔(下拉選單)>新增設定檔,並在出現新增設定檔窗後,輸入設定檔名稱為Release後按下[確定],然後再按下發行Web視窗中的[下一個]按鈕。

⬛輸入連線參數,發行方法選擇Web Deploy(單鍵發行),伺服器輸入localhost,網站名稱輸入DemoSite/ReleaseWebApp,目的地URL輸入localhost/ReleaseWebApp/Default.aspx。這裡要特別說明網站名稱的部分,網站名稱可以只填入站台名稱,如:DemoSite,站台需在發行前,於IIS新增完成,若有需要,也可再上加應用程式名稱,如:ReleaseWebApp,而應用程式若不存在於指定站台底下,發行時會自動新增。
按[驗證連線]鈕,可以檢查連線參數是否正確。


⬛組態的選擇,通常若要發行部署至正式環境就選Release,測試環境就選Debug,最大差異就是在是否有定義Debug常數與最佳化程式碼,這裡選擇Release。
為快速展示單鍵發行功能,這裡暫不討論資料庫部署。

⬛按下[開始預覽]來檢視異動清單。

⬛若有不想發行的檔案,可以於異動清單中將該檔案取消勾選,確定後按下[發行]鈕,開始進行單鍵發行作業。

⬛可以在Visual Studio 開發工具的輸出視窗中,查看發行作業的歷程記錄,發行作業完成後會自動開啟網頁瀏覽。

以上的說明,可以快速的體驗單鍵發行的功能。但實務上有可能因應不同執行環境,進行不同的參數檔設定,若想再進一步了解,如何因應不同環境(如本機、正式、測試與開發環境),進行Web.config檔的差異化部署,請參考使用Web.config轉換語法進行差異化部署