Jenkins 3 –部署問題排除

文章開始前先列一下,目前方案下的專案及組態
  1. n個Library專案及2個Web專案。
  2. 組態區份為: Debug、 Release、QAS、STA、PRD。前兩個是Vs預設,後面3個是根據發佈的環境命名

遇到的問題


     前一篇文章介紹的發行,使用的是MsBuild來建置方案檔.sln。透過發行Profile檔,先建置後再作發行。 這樣的方式,在建置方案後,預設會找出方案下所有的Web專案來發行。依照上述方案架構與組態,會遇幾個問題如下:
  1. 第一個Web專案發行後,第2個Web專案會找不到發行Profile檔。ps:我只想發行一個Web專案,第二個專案沒有發行Profile。
  2. 若建置改成使用特定的專案,例如:只建置A Web。這在建置時,會遇到非預設組態(QAS、STA、PRD),找不到的錯誤,因為其他相依的Library專案,並沒有這些設定,在VS加入時,預設建置設定只加入當時選擇的專案及方案,如下圖 WebApp有QAS,但底下的Library沒有。

    image

解決方式


  本想找看看,有沒有只在MsBuild時,使用特定的專案來發行的解決方法,但找了幾個來試試,都不行,後來找到的解決方式,是先建置完,再使用MsDpeploy來發行。
  1. .MsBuild 使用package,此方式會將發行後的檔案,壓縮成一個.zip,並產生對應的deploy.cmd

    image

    MsBuild參數:
    /p:DeployOnBuild=true /p:WebPublishMethod=Package /p:configuration=QAS /p:SkipInvalidConfigurations=true /p:PrecompileBeforePublish=true /p:EnableUpdateable=false  /p:DeployIisAppPath=KIM.LAB.NET
  2. 使用MsDeploy執行上一步驟產生出來的deploy.cmd,此步驟有一點要注意的是,若Jenkins是照預設的安裝目錄C:\Program Files (x86)...裝的話,執行時會出現錯誤訊息如下:
    這個時候不應有 \Jenkins\workspace\Local-Package\BuildLab.WebApp\obj\QAS\Package\BuildLab.WebApp.SetParameters.xml
    找了好久,作了一些實驗,才發現是因為目錄名稱不能有右括號 ) ...........真是無言,花了我幾小時的時間。

    MsDeploy參數:"%WORKSPACE%\CorexERP.Web\obj\QAS\Package\CorexERP.Web.deploy.cmd" /Y /M:https://kimi.lab.net:8172/msdeploy.axd -allowUntrusted /U:Administrator /P:xxxx /A:Basic


Jenkins截圖如下:
image

MsDeploy.cmd 其他注意事項

  1. 若你的網站和我一樣是裝在自己家的主機上的話,Deploy Url要使用https及MsDeploy.axd 預設的port 8172

    https://kimi.lab.net:8172/msdeploy.axd。如紅色字
    ps:若無法發行,試著用ip or 主機名稱試試 e.g :kim-ap1:8172..
  2. 若使用的是Azure Web App,則需下載行設定檔,裡面會有發行的Url及驗證的帳號/密碼。

    image
  3. 若未在MsBuild指定/p:DeployIisAppPath參數,則MsDeploy需指定setParam來指定部署的位置。例:"-setParam:'IIS Web Application Name'='KIM.LAB.NET'"

參考來源

http://www.troyhunt.com/2010/11/you-deploying-it-wrong-teamcity_24.html
http://blog.miniasp.com/post/2011/05/31/Avoid-Delete-Files-on-Remote-Website-using-MSDeploy-tool.aspx

這個網誌中的熱門文章

[TFS] 分支與合併

[.NET Core] 將專案發行至IIS