Jenkins部署使用文檔(.Net,Vue項目)

目錄

本文要實現的功能:

工具介紹:

開始安裝:

jenkins配置:

團隊使用:

其他問題:

關於自己: 


 

本文要實現的功能:

  1. 在本地編寫代碼,編譯通過後提交到Github/SVN.
  2. 服務器的Jenkins檢測到有代碼提交到Github,自動或者手動編譯,生成發佈版本的代碼。
  3. 然後Jenkins調用FTP工具(或者一個批處理命令)將發佈版本的代碼傳到IIS網站的目錄下。
  4. 實現提交代碼後,一鍵編譯,直接訪問。

工具介紹:

  1. jenkins:Java平臺一種持續集成工具,可以實現自動化的發佈,當然.net平臺也有,但還沒了解。實質就是它可以用配置的方式自動調用很多程序,實現自動化。
  2. MSBuild:.net 平臺的編譯工具,我們用vs編譯項目時,其實vs內部也是調用的MSBuild.
  3. Git/:代碼管理工具
  4. nuget:用於還原項目所引用的nuget包
  5. node.js 編譯vue
  6. webpack vue項目打包

開始安裝:

既然jenkins是自動執行某些工具來實現我們的功能,那我們就先把所有步驟手動執行一次,如果沒有問題,那麼配置到jenkins上肯定也沒有問題。以下工具都是在服務器上安裝,我用的是虛擬機,win server 2008r2

  1. 安裝IIS, 小夥,如果你連IIS都不會安裝,就先別學jenkins了。^^
  2. 安裝.net framework4.6 在線安裝:http://download.microsoft.com/download/1/4/A/14A6C422-0D3C-4811-A31F-5EF91A83C368/NDP46-KB3045560-Web.exe ,如果如果安裝過,或有其他版本,建議卸載。
  3. 安裝TargetingPack .NET Framework 4.6 Targeting Pack是一個程序包,使開發人員能夠使用Visual Studio 2013,Visual Studio 2012或第三方IDE構建面向.NET Framework 4.6的應用程序。 官網下載:https://www.microsoft.com/en-us/download/details.aspx?id=48136
  4. nuget.exe 官網下載:https://www.nuget.org/downloads
  5. 安裝git 官網下載:https://git-scm.com/downloads
  6. jenkins 官網下載:https://jenkins.io/zh/

將測試項目源代碼(也可以從github中拉取到本地)test放到C:\inetpub\wwwroot目錄,執行完下面的命令後會把項目需要的包都還原。

在cmd中輸入 :

 

C:\Progra~2\NuGet\nuget.exe restore C:\inetpub\wwwroot\test\myobj.sln

顯示下面這樣,證明nuget是沒問題的:

 

 

接下來是安裝msbuild,直接在我電腦的vs安裝目錄下找到MSBuild文件夾,考到服務器中。(C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional)

測試MSBuild是否可用:

C:\progra~2\MSBuild\15.0\Bin\MSBuild.exe /t:Build /p:Configuration=Release /p:WebProjectOutputDir=C:\inetpub\wwwroot\test\myweb\bin\v1 /p:OutputPath=C:\inetpub\wwwroot\test\myweb\bin\v1\bin  C:\inetpub\wwwroot\test\myobj.sln

顯示下面是可以用:

編譯後v1文件夾中就出現發佈後的文件:(可以把它配置到IIS上,看看編譯後的程序能不能跑起來)

以上的步驟就是,編寫代碼》提交代碼》將代碼拉取到服務器》編譯》發佈,所有步驟我們都手動完成了,接下來就是用jenkins把這些步驟自動完成。

下面是後來寫的blog,公司沒用git ,代碼管理用的svn。

jenkins配置:

 

下面的構建我全都用的windows batch 命令,所以不用安裝插件,如果你安裝了msbuild的插件,在“Global Tool Configuration”配置路徑即可,我用命令程序路徑什麼的我是直接寫到了腳本中。

新建項目:

點擊確定後進入到項目的配置頁面:

後臺構建:構建>增加構建步驟>Execute Windows batch command(構建步驟是有順序的,可以拖動排序)

//構建步驟1:用nuget還原包引用
D:\Progra~1\NuGet\nuget.exe restore D:\progra~1\Jenkins\workspace\Imanager\test\OES.sln
//構建步驟2:使用MSBuild編譯程序, WebProjectOutputDir是輸出文件夾,progra~1是路徑簡寫,因爲命令中單詞不可以有空格
d:/progra~1/micros~1\2017\Enterprise\MSBuild\15.0\Bin\MSBuild.exe /t:Build /p:Configuration=Release /p:WebProjectOutputDir=C:\v1 /p:OutputPath=C:\v1\bin  D:\progra~1\Jenkins\workspace\Imanager\test\OES.sln

前臺構建:在jenkins裏要建三個構建步驟,"Execute Windows batch command",分開執行

//構建步驟3:進入到vue項目目錄,還原包
cd D:\progra~1\Jenkins\workspace\Imanager\test\OES.Admin\ImanagerHtml
npm install
//構建步驟4:執行編譯
cd D:\progra~1\Jenkins\workspace\Imanager\test\OES.Admin\ImanagerHtml
npm run build
//構建步驟5:進入vue根目錄,把編譯生成的dist文件夾內容全部複製到c:\v1\html 中,參數"/e"表示:複製目錄和子目錄,包括空的,"/y"表示:禁止提示以確認改寫一個現存目標文件
cd D:\progra~1\Jenkins\workspace\Imanager\test\OES.Admin\ImanagerHtml 
xcopy dist c:\v1\html /e /y

構建步驟2 和 構建步驟5 相當於編譯後發佈到了同臺服務器,如果web服務器和 jenkins不在一臺機器上,可用powershell遠程拷貝

$remoteDirPath="\\DESKTOP-9KAK340\remote"
    Write-Host '連接遠程主機...'
    net use $remoteDirPath  "zzl" /user:"lind"
    Write-Host '遞歸拷貝文件(強制覆蓋模式)...'
    
    $files = Get-ChildItem -Path "C:\Jenkins_Publish " # 獲取本地目錄下的文件
    foreach($file in $files) {
        Copy-Item -Path $file.FullName -Destination $remoteDirPath -Include "*" -Exclude "" -Recurse -Force
    }
    Write-Host '目錄拷貝完成!'

團隊使用:

在服務器部署完本地可用http://localhost:8080,如果公司網絡沒有限制的話 http://外網地址:8080 也可以訪問

在Jenkins主界面,“Manage Jenkins”》“Configure Global Security”

管理員增加其他成員:在Jenkins主界面,“Manage Jenkins”》Manage Users,同樣,增加成員後要在安全矩陣中分配權限

優化問題:構建前端項目時,我是寫到一個"Execute Windows batch command"的,但是不知道爲什麼執行完npm install,後面的代碼就沒有執行,所有就像上面寫的,單獨執行是沒問題的。

cd D:\progra~1\Jenkins\workspace\Imanager\test\OES.Admin\ImanagerHtml
npm install
npm run build
xcopy dist c:\v1\html /e /y

其他問題:

  • 在服務器端build前端vue項目時,服務器環境的Node.js環境要和本地開發環境一樣,即相同的node版本,webpback版本也要一致。
  • vm中我用的winserver2008r2 只有橋接模式才能聯網,不知道爲什麼。
  • 手動在命令行裏執行命令時要以管理員模式運行,之前代碼放到了C盤,在編譯時生成新文件會提示沒有權限無法寫入。
  • 現在用的vs是2017,.net framework版本4.6.1,把vs安裝目錄的 D:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild 複製到服務器中編譯時總是不通過,原因:可能是vs版本問題,在編譯時要用到D:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE 裏面的東西,所以要把MSBuild和同級的Common7也複製到服務器中。(更粗暴的方式:直接在服務器安裝和開發環境一樣的Visual Studio)

關於自己: 

擅長.NET  B/S結構,做過【Web系統】 【BI數據分析系統】  【CMS內容管理系統】 【微信平臺相關開發(公衆號,小程序)】

熟悉Linux Centos系統

QQ 1229145381(推薦)    微信:hanpanpan1326  備註:CSDN

-------------------------

2019/8/15更新

在使用的有個需求是:每次構建時想屏蔽web.config,文件,就是即使web.config提交了,構建時也不會發布,解決方案:

msbuild時先發布到臨時文件夾,再用xcopy將臨時文件賦值到iis對應的目錄,這裏要用一個參數exclude 來屏蔽特定文件。

將需要屏蔽的文件放到exclude.txt中即可

xcopy d:\webs\IFuture\temp d:\webs\IFuture /s/e/y/exclude:c:\Enterprise\exclude.txt

 

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