關於使用Jenkins作自動化部署入門篇,我已經分別寫了兩篇文章,無論企業如今是在用.Net Framework仍是.Net Core,無論企業是在用git仍是SVN。其實這兩篇文章通常足以交付開發階段的80%業務了。不足的是這兩篇文章都只是將環境html
部署到了單臺機器上。因此這篇文章在介紹如何將編譯好的源碼包傳輸到其餘服務器上時,順便一塊兒將windows服務作持續部署的內容也加入進來,和不少朋友交流後,大部分企業所使用的技術都還相對比較保守,以爲頗有必要一塊兒談談linux
關於windows服務作CI/CD的話題。畢竟在開發新項目的同時也要維護老項目。
Windows+.NetCore+git+IIS在Jenkins上的自動化部署入門。git
Windows+.Net Framework+svn+IIS在Jenkins上的自動化部署入。github
1.Publish Over SSH 在Jenkins插件管理中安裝shell
2.Publish Over FTP在Jenkins插件管理中安裝windows
3.windows搭建FTP服務器
4.windows安裝OpenSSh
app
1.關於在Jenkins中安裝Publish Over FTP和Publish Over SSH兩款插件,這裏就很少介紹了,不懂如何安裝的能夠看下前兩篇文章。ssh
2.在jenkins的系統配置中進行FTP帳號相關配置。ide
2.1 上面的name取任意名稱就行,remote Directory爲服務器上的目錄,這裏填寫的目錄服務器上必定要提早建立好。通常服務器根目錄能夠這樣寫「/」。
3. windows上搭建FTP,這個能夠百度。注意的地方時防火牆記開啓端口21和20。
4.使用topShelf建立一個.Net Framework服務。
5.新建自由風格項目TestWinservice,進行配置,步驟以下:
5.1代碼拉取配置
5.2 構建配置
5.2.1 編譯命令說明
/t:Rebuild /p:Configuration=Release /p:VisualStudioVersion=16.0
/p:ExcludeGeneratedDebugSymbol=false
/p:ExcludeXmlAssemblyFiles=false
5.3 FTP文件傳輸配置
5.4 開始構建,看結果
上圖明顯看到傳輸過去4個文件,一切都是成功的,但這時有個問題,傳輸過去的文件怎麼讓它自動部署起來,遠程怎麼執行部署腳本?忽然shit 了,我沒考慮周到。因此準備上SSH,固然也能夠用 Web Deploy,我以爲用Web Deploy有些繁瑣,因此放棄。
5.5 windows上安裝OpenSSh。
下載地址:https://github.com/PowerShell/Win32-OpenSSH/releases
解壓好後打開目錄,使用管理員權限執行一下命令
設置服務自動啓動並啓動服務
記得防火牆規則放行22端口,能夠用Xshell工具測試鏈接。
5.6 Jenkins中配置SSH,和前面在Jenkins中配置FTP是同樣的步驟,這裏採用帳號方式。
基本上和配置FTP都相似,就不過多解釋。
5.7 以前構建項目FTP配置的地方替換成SSH Server,看下圖。
執行的腳本邏輯,使用TopShelf建立的windows服務都要以管理員方式運行安裝。
::切換到管理員運行命令 cd C:\WINDOWS\system32 e: cd E:\publish\ConsoleService set scrpath=C:\publish\ConsoleService\*.* set dirpath=E:\publish\ConsoleService sc query MhgService | findstr /i "STATE">nul :: 若是服務未安裝,則跳過中止服務的步驟 if errorlevel 1 goto NotExist :: 更新windows服務 NetFxConsoleService.exe stop XCOPY %scrpath% %dirpath% /Y /S NetFxConsoleService.exe start if not %ERRORLEVEL% geq 0 goto Error: goto next :NotExist XCOPY %scrpath% %dirpath% /Y /S NetFxConsoleService.exe install NetFxConsoleService.exe start :next echo "MhgService更新成功!" goto :success :error echo "MhgService更新失敗!" :success echo 執行完畢,任意鍵退出 pause >nul exit
注意:上面腳本中我以"cd C:\WINDOWS\system32"方式切換到管理員方式運行腳本在我某一臺服務器上是能夠安裝起來的,在另一臺服務器上就會提示要以管理員方式安裝服務。因這個問題折騰了許久。後來網上了解到腳本執行中能夠獲取管理員的權限。請看下面的腳本。
::獲取管理員權限 @ECHO OFF setlocal EnableDelayedExpansion color 3e title 服務配置 PUSHD %~DP0 & cd /d "%~dp0"
%1 %2 mshta vbscript:createobject("shell.application").shellexecute("%~s0","goto :runas","","runas",1)(window.close)&goto :eof :runas ::腳本邏輯 e: cd E:\publish\ConsoleService set scrpath=C:\publish\ConsoleService\*.* set dirpath=E:\publish\ConsoleService sc query MhgService | findstr /i "STATE">nul ..................
用這種方式通過測試,目前只有在服務器上雙擊運行能夠安裝成功,在Jenkins SSH Server中執行 沒有看到服務安裝起來。若是有人知道什麼緣由能夠告訴我。其實還折騰過vbs,也僅僅只是服務器上能夠雙擊運行起來。
在弄Windows服務自動化部署的過程當中,感受在windows中要作CI/CD這些事情,頭髮真會愈來愈少。若是要玩CI/CD ,有機會盡量項目環境用linux 、.net core 擁抱開源。總之,只有折騰過才能感受到吧。