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

 

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

 

 

 

01git

仍是jenkinsweb

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

 

 

 

 

  接着  「Manage Jenkins」 -> "System Configuration" -> "Global Tool Configuration" 中配置 MSBuild,由於MSBuild插件中自帶的編譯工具可能比較老,建議在本機安裝 visual studio 相同版本,直接使用其自帶的編譯工具。配置以下服務器

 

 

 

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

 

 

 

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

   1,添加用戶jenkins, ide

   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。

         

相關文章
相關標籤/搜索