.net網站自動化部署-致兩年前的遺留的問題

 

  又到一年國慶,終於有了難得的幾天空閒,計劃陪陪媳婦娃子,再把最近閱讀的幾本相關書總結梳理下。當然,計劃總是美好的,於時接到了一個老朋友電話。大意是他搞了一個.net小網站,部署了4個節點,每次更新程序都是手動複製到4個機器,時不時忘記部署,忘記備份之類的問題,不勝其煩,希望我幫忙想個辦法。回想2年前,在做無人貨架項目時,也有部分是.net項目,當時自己也沒能處理這個問題,當時用了webdeploy,效果並不理想,雖然後來幾乎沒碰過.net了,這個問題依然縈繞心頭。既然有時間,有報酬,何不接此機會彌補兩前年的遺憾呢,於時滿口應承了下來。想想現在都在談CI/CD, DevOps.. 過程應該會是相當愉悅的,又是小網站,要求也不是那麼高。網站結構如下,非常簡單。

 

 

 

01

還是jenkins

        百度一番,一搜一大把,幾乎都是利用jenkins,加上之前有過用jenkins做tomcat自動化部署的經驗,心中一陣竊喜,過程真的如預期一般順暢。於時動手,開始了我們愉悅之旅。jenkins是基於Java開發的一種持續集成工具,於時先安裝java環境,配置環境變量(我是直接下載 window版本的 jdk 8)。接着下載window對應的jenkins版本,下載地址點這裏,按提示操作,安裝推薦插件(安裝後也可以插件管理中自行安裝),沒有注意事項!一波流帶走,就來到了歡迎界面。沒有任何障礙,感覺半天就可以打卡收工。因爲要編譯.net程序,需要安裝msbuild插件:以次  “Manage Jenkins” -> "Manage Plugins" -> "可選插件", 搜索 MsBuild,點擊直接安裝。操作如下圖。

 

 

 

 

  接着  “Manage Jenkins” -> "System Configuration" -> "Global Tool Configuration" 中配置 MSBuild,因爲MSBuild插件中自帶的編譯工具可能比較老,建議在本機安裝 visual studio 相同版本,直接使用其自帶的編譯工具。配置如下

 

 

 

  接着,安裝git服務,並在 “Manage Jenkins” -> "System Configuration" -> "Global Tool Configuration" 中配置 git 相關參數,配置如下。

 

 

 

   再接着,安裝插件 Publish Over SSH。然後在應用程序機器上安裝FreeSSHD,用於文件上傳和遠程執行命名。FreeSSHD 配置過程如下:

   1,添加用戶jenkins, 

   2,配置telnet, ssh 端口爲 23,28;

   3,配置 authentication 目錄, 在jenkins服務器,生成ssh key,把公鑰文件複製到這個目錄,重命名爲jenkins,與用戶名相同。(使用命令 ssh-keygen -t rsa  生成公鑰,私鑰 )

   4,配置sftp 目錄,爲文件上傳目錄。

   5,以管理員身份運行 FreeSSHd。這個很重要,不然一直提示 auth fail.

   操作步驟如下圖:

 

 

 

 

 

  接着,在 “Manage Jenkins” -> "System Configuration" -> "Global Tool Configuration" 中配置Publish Over SSH 相關參數,配置如下。

 

 

 

 

   在jenkins和應用服務上安裝 7Z工具,用於壓縮和解壓。並在環境變量 path 中配置 7Z的安裝目錄(用於在任意目錄執行命令)。到這裏系統工具及配置就完成了,接下來開始任務配置。

 

 

 

02

愉悅的構建

 

       環境搭建完成,就開始我們的表演吧。新建任務,名稱你隨意就好,選擇“Freestyle project”類型,點擊確定。進入任務配置界面。

  General 配置中,可以選中 Discard old builds 可以配置以天數和build記錄數保留數據。

  源碼管理中,添加好指定的git地址,及賬號密碼。以上流程沒有任何障礙。

  構建中,添加步驟Execute Windows batch command,用戶nuget restore。因爲前面已經在jenkins機器上安裝了visual stadio ,可以直接使用其自帶的nuget 工具。 配置如下圖,其中 nuget.bat的內容如下:

   NuGet.Build.Tasks.Console.exe restore VideosGYFileS.sln。其中 NuGet.Build.Tasks.Console.exe 爲VS自帶的,在path中配置了目錄這裏可以直接運行。(這個命令是在解決方案根目錄執行的。),命令最後爲exit 0 表示結束。

  

 

 

 

 

    接着添加步驟 Build a Visual Studio project or solution using MSBuild,選擇第一步中添加的 MSBuild 配置,如下圖,其中編譯參數爲:

  /t:Rebuild    /property:Configuration=Release;DeployOnBuild=true;TargetFrameworkVersion=v4.6。

 

 

 

 

  

   接着添加步驟Execute Windows batch command,用於打包編譯後的文件,方便後面上傳。壓縮時需要排除一些配置文件,配置如下圖,compress.bat文件內容如下:

    7z a  deploy.zip .\PrecompiledWeb\Web\* -xr!upload -xr!logs -x!web.config。 (.\  表示打包時去除前綴, -xr! 表示排除目錄,-x! 表示排除文件)

  

 

 

 

   

   

  到這裏,構建選項就已經配置完成了,開始構建,在解決方案目錄生成了deploy.zip文件。那說明已經成功了70%了。

  

03

完美的構建後操作

 

       構建完成,接下來就是把文件上傳到目標服務器了。這就是要用到我們前面配置的  Publish Over SSH插件了。 添加構建後步驟,選擇Send build artifacts over SSH。並添加第一步中創建的 應用服務器。多個服務器,可以添加多個server。要傳輸的文件爲構建步驟中生成的文件 deploy.zip,上傳後要執行的命令爲:cmd.exe /c "d: && cd wwwroot && backup.bat"  中  backup.bat 完成文件備份以當前時間生成備份文件放到 backup文件夾中。文件內容如下;

set vardate=%date:~0,4%%date:~5,2%%date:~8,2%
set h=%time:~0,2%
# 格式化小時,如果小時10,補0,不然會有空格
set h=%h: =0% set otime=%h%%time:~3,2%%time:~6,2%
# 備份文件格式 YYYYMMddHHmmss.zip
set filename=%vardate%%otime%.zip # 備份原文件 7z a %filename% .\gyapp\* -x!deploy.zip -xr!upload -xr!logs # 移動文件到backup 文件夾 move %filename% .\Backup # 解壓文件 7z x deploy.zip -aoa -o"D:\wwwroot\gyapp"

 

 

 

  最後來一張構建成功的截圖。

 

 

 

 

 

 

 

 

   到這裏所有配置就完成了,如果順利的話,自動化部署就完成了。鑑於本人能力問題,自到第79次構建,才真正愉快的左打收工了。沒錯,是79次!

  

 

 

 

 

   

04

結語

         文章到這裏,我只想說,這個過程真的不怎麼愉悅。整個過程需要用到方方面面的知識,比如構建過程,環境變量配置,編寫bat文件等 。也有很多異常問題,比如sshkey 版本問題,bat中時間格式問題等等。也要用到一些工具軟件,比如7Z,FreeSSHD,jenkins。再者也有很多細節要考慮,比如備份文件,排除文件等。再有前面說的,百度一下,一搜打把的文章,大部分並無太多用處,很多都只是demo。比如,大部分都有說所到用ftp,但是無法支持子目錄傳輸。以上種種問題,多次要奔潰放棄,怎奈受人之託,忠人之事,還好媳婦一直鼓勵,並帶着大寶小寶玩耍。最後斷斷續續用了幾天時間,整體來說還是痛苦並快樂着。想着過程中那麼問題,就想着整理成文,希望有需要的人看到本文,真的可以半天搞定。

 

 

         I have a dream to be a good programmer。

         

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章