Jenkins持續集成學習-Windows環境進行.Net開發2


Jenkins持續集成學習-Windows環境進行.Net開發2


目錄

Jenkins持續集成學習-Windows環境進行.Net開發1
Jenkins持續集成學習-Windows環境進行.Net開發2
Jenkins持續集成學習-Windows環境進行.Net開發3
Jenkins持續集成學習-Windows環境進行.Net開發4
Jenkins持續集成學習-搭建jenkins問題匯總

前言

Jenkins持續集成學習-Windows環境進行.Net開發一文中介紹了如何持續集成部署在SVN上的VS項目。
本文將繼續深入探究在.net環境下的持續集成環境。

目標

在掌握持續集成基本配置和jenkins的使用后,完成以下2點任務。

  1. 持續自動編譯通過后自動執行單元測試。
  2. 單元測試執行通過后自動生成Nuget包並上傳到指定的庫服務地址。

使用 .Net Stardard

在Jenkins.Core項目增加一個單元測試項目。

1.png

在TestClass新增一個測試方法


[TestFixture]
public class TestClass
{
    [Test]
    public void TestHelloWorld()
    {
        Assert.Pass(HelloWolrdHelper.GetString());
    }
}

現在Jenkins.Core項目結構如下

│  Jenkins.Core.sln
├─.nuget
│      NuGet.Config
│      NuGet.exe
│      NuGet.targets
│
├─Jenkins.Core
│  │  HelloWorldHelper.cs
│  │  Jenkins.Core.csproj
│  │  Jenkins.Core.csproj.user
│  │
│  └─Properties
│          AssemblyInfo.cs
│
└─Jenkins.Core.Test
    │  Jenkins.Core.Test.csproj
    │  packages.config
    │  TestClass.cs
    │
    └─Properties
            AssemblyInfo.cs

上一章我們提到引用了其他nuget包后,若這個項目的其他程序集編譯的時候會錯誤。

這個項目在編譯Jenkins.Core程序集的時候可以編譯通過,但是在編譯Jenkins.Core.Test會報錯,如下圖所示。
5.png

可以看出圈出來的路徑是有問題的。沒有找到解決方法,若有人知道的話麻煩說一下

后面嘗試把項目升級到 .Net Stardard。由於上一篇文章我們只添加了JenkinsTest項目到Jenkins中,因此我們需要將Jenkins.Core項目也添加到Jenkins中,並添加自動單元測試的功能,完成后上傳到SVN。

SVN目前項目結構如下
3.png

創建項目的過程和上一篇一樣,只是由於我們的項目是VS2017創建的 .Net Standard項目。因此需要使用15.0的MSBuild編譯。
在全局新增15.0的MSBuild。若裝了VS2017,可以在VS2017的安裝目錄找到,我的在D盤,因此在D:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\MSBuild.exe

創建一個新項目取名為unittest。
2.png

為了簡單起見,暫時只編譯Jenkins.Core.csproj。
7.png
設置完成后嘗試構建,但是報錯了

6.png

錯誤提示沒有obj\project.assets.json文件。

project.assets.json文件是 .Net Startard 新的包還原方式產生的文件,里面包含了依賴,引用nuget包地址,程序集目標框架等配置。.Net Framework的項目使用nuget進行包還原,會在項目中添加packages文件夾和package.config配置。而 .Net Startard使用PackageReference的方式進行包引用。具體引用原可以可以看官方的文檔說明。對於project.assets.json文件的介紹可以看Slim SDK-Style project

由於使用了 .Net Stardard項目我們的.csproj項目非常的簡潔,這一下這些配置是我們開發時主要關心的項。SDK-Style probject將其他內容部署相關的配置全部放到了project.assets.json文件中,留下的為開發相關配置。

Jenkins.Core.csproj項目如下,非常簡潔。

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net45</TargetFramework>
    <Version>0.3.0</Version>
    <AssemblyVersion>0.3.0.0</AssemblyVersion>
    <FileVersion>0.3.0.0</FileVersion>
    <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
  </PropertyGroup>
</Project>

Jenkins.Core.Test.csproj項目如下,除了引用關系再無其他亂七八糟的東西了。


<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net45</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <ProjectReference Include="..\Jenkins.Core\Jenkins.Core.csproj" />
  </ItemGroup>
    <ItemGroup>
    <PackageReference Include="NUnit" Version="3.11.0" />
  </ItemGroup>

</Project>

根據PackageReference包引用方式我們將項目中無用的文件可以都刪除掉。整個項目結構如下


│  Jenkins.Core.sln
│
├─Jenkins.Core
│  │  HelloWorldHelper.cs
│  │  Jenkins.Core.csproj
│  │
│  └─obj
│      └──project.assets.json
│
└─Jenkins.Core.Test
    │  Jenkins.Core.Test.csproj
    │  Jenkins.Core.Test.csproj.user
    │  TestClass.cs
    │
    └─obj
        └──project.assets.json

上傳到SVN后再次構建就成功了。

實際這里需要做的是在創建前先重置包,在重置的時候會自動創建文件。
這里對於PackageReference理解有誤,實際上project.assets.json文件為使用PackageReference方式進行包管理時,Nuget包還原時創建的項目依賴及部署依賴的配置文件。在Jenkins持續集成學習-非開發環境搭建jenkins問題匯總一文會提到PackageReference包引用的一些問題。

日志如下


15:47:23   對來自后列目錄的編譯器使用共享編譯: D:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\Roslyn
15:47:24 CopyFilesToOutputDirectory:
15:47:24   正在將文件從“obj\Release\net45\Jenkins.Core.dll”復制到“bin\Release\net45\Jenkins.Core.dll”。
15:47:24   Jenkins.Core -> D:\Program Files (x86)\Jenkins\workspace\unittest\Jenkins.Core\bin\Release\net45\Jenkins.Core.dll
15:47:24   正在將文件從“obj\Release\net45\Jenkins.Core.pdb”復制到“bin\Release\net45\Jenkins.Core.pdb”。
15:47:24 GenerateNuspec:
15:47:24   Successfully created package 'D:\Program Files (x86)\Jenkins\workspace\unittest\Jenkins.Core\bin\Release\Jenkins.Core.0.3.0.nupkg'.
15:47:24 已完成生成項目“D:\Program Files (x86)\Jenkins\workspace\unittest\Jenkins.Core\Jenkins.Core.csproj”(Build 個目標)的操作。
15:47:24 

可以看到MSBuild 15使用Roslyn編譯器。同時編譯完成后自動生成了Nuget包。

單元測試

流程

我們希望的流程如下

graph LR 編譯程序集 --> |通過| 創建nuget包 編譯程序集 --> |不通過| 失敗 創建nuget包 --> 編譯單元測試程序集 編譯單元測試程序集 --> |通過| 執行單元測試 編譯單元測試程序集 --> |不通過| 失敗 執行單元測試 --> |通過| 上傳nuget包 執行單元測試 --> |不通過| 失敗

31.png

手動執行單元測試

nunit提供了命令執行單元測試的功能,到nunit官網下載,下載zip的即可,下載后解壓。

直接輸入nunit3-console會輸出參數說明。

E:\開發工具\VS開發工具\NUnit.Console-3.9.0>nunit3-console.exe
NUnit Console Runner 3.9.0
Copyright (c) 2018 Charlie Poole, Rob Prouse


NUNIT3-CONSOLE [inputfiles] [options]

Runs a set of NUnit tests from the console.

InputFiles:
      One or more assemblies or test projects of a recognized type.

Options:
      --test=NAMES           Comma-separated list of NAMES of tests to run or
                               explore. This option may be repeated.
      --testlist=PATH        File PATH containing a list of tests to run, one
                               per line. This option may be repeated.
      --where=EXPRESSION     Test selection EXPRESSION indicating what tests
                               will be run. See description below.
      --params, -p=VALUE     Define a test parameter.
      --timeout=MILLISECONDS Set timeout for each test case in MILLISECONDS.
      --seed=SEED            Set the random SEED used to generate test cases.
      --workers=NUMBER       Specify the NUMBER of worker threads to be used
                               in running tests. If not specified, defaults to
                               2 or the number of processors, whichever is
...

nunit3-console后面加上單元測試的dll名就可以進行單元測試,單元測試完成會生成單元測試的結果。默認結果會保存到nunit3-console的目錄下,我們需要手動修改目錄為我們自己的單元測試項目dll同一級目錄。

通過一下命令執行單元測試
nunit3-console.exe dll完整路徑名 --work 保存的測試結果路徑
我本地執行的單元測試如下

E:\開發工具\VS開發工具\NUnit.Console-3.9.0>nunit3-console.exe F:\Study\Demo\JenkinsTest\JenkinsTest.Core\Jenkins.Core.Test\bin\Debug\net45\Jenkins.Core.Test.dll  --work F:\Study\Demo\JenkinsTest\JenkinsTest.Core\Jenkins.Core.Test\bin\Debug\net45
NUnit Console Runner 3.9.0
Copyright (c) 2018 Charlie Poole, Rob Prouse

Runtime Environment
   OS Version: Microsoft Windows NT 10.0.17134.0
  CLR Version: 4.0.30319.42000

Test Files
    F:\Study\Demo\JenkinsTest\JenkinsTest.Core\Jenkins.Core.Test\bin\Debug\net45\Jenkins.Core.Test.dll


Run Settings
    DisposeRunners: True
    WorkDirectory: F:\Study\Demo\JenkinsTest\JenkinsTest.Core\Jenkins.Core.Test\bin\Debug\net45
    ImageRuntimeVersion: 4.0.30319
    ImageTargetFrameworkName: .NETFramework,Version=v4.5
    ImageRequiresX86: False
    ImageRequiresDefaultAppDomainAssemblyResolver: False
    NumberOfTestWorkers: 4

Test Run Summary
  Overall result: Passed
  Test Count: 1, Passed: 1, Failed: 0, Warnings: 0, Inconclusive: 0, Skipped: 0
  Start time: 2019-01-23 08:30:03Z
    End time: 2019-01-23 08:30:04Z
    Duration: 1.114 seconds

Results (nunit3) saved as TestResult.xml

可以看到測試通過並保存了TestResutlt.xml的測試結果文件。

9.png

自動執行單元測試

現在我們希望單元測試的Jenkins.Core.TestJenkins.Core編譯完成后能自動編譯並執行。
我們在配置中新增一個編譯項。

8.png

接下里我們就需要在Jenkins中配置單元測試了

Jenkins.Core.Test編譯成功后,我們需要執行單元測試,在Build后新增一個批處理腳本,執行我們上面的語句(路徑需要換一下)。

E:\開發工具\VS開發工具\NUnit.Console-3.9.0\nunit3-console.exe Jenkins.Core.Test\bin\Release\net45\Jenkins.Core.Test.dll --work Jenkins.Core.Test\bin\Release\net45\
配置如下
10.png
保存后再次構建。

17:10:18 用於 .NET Framework 的 Microsoft (R) 生成引擎版本 15.9.21+g9802d43bc3
17:10:18 版權所有(C) Microsoft Corporation。保留所有權利。
17:10:18 
17:10:18 生成啟動時間為 2019/1/23 17:10:18。
17:10:18 項目“D:\Program Files (x86)\Jenkins\workspace\unittest\Jenkins.Core\Jenkins.Core.csproj”在節點 1 上(Build 個目標)。

...

17:10:19 已完成生成項目“D:\Program Files (x86)\Jenkins\workspace\unittest\Jenkins.Core\Jenkins.Core.csproj”(Build 個目標)的操作。
17:10:19 
17:10:19 已成功生成。
17:10:19     0 個警告
17:10:19     0 個錯誤
17:10:19 
17:10:19 已用時間 00:00:00.82
17:10:19 Path To MSBuild.exe: D:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\MSBuild.exe
17:10:19 Executing the command cmd.exe /C " "D:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\MSBuild.exe" /t:Build /p:Configuration=Release Jenkins.Core.Test/Jenkins.Core.Test.csproj " && exit %%ERRORLEVEL%% from D:\Program Files (x86)\Jenkins\workspace\unittest

...
17:10:20   Jenkins.Core.Test -> D:\Program Files (x86)\Jenkins\workspace\unittest\Jenkins.Core.Test\bin\Release\net45\Jenkins.Core.Test.dll
17:10:20 已完成生成項目“D:\Program Files (x86)\Jenkins\workspace\unittest\Jenkins.Core.Test\Jenkins.Core.Test.csproj”(Build 個目標)的操作。
17:10:20 
17:10:20 已成功生成。
17:10:20     0 個警告
17:10:20     0 個錯誤
17:10:20 
17:10:20 已用時間 00:00:01.11
17:10:20 [unittest] $ cmd /c call C:\WINDOWS\TEMP\jenkins6967806742281641251.bat
17:10:20 
17:10:20 D:\Program Files (x86)\Jenkins\workspace\unittest>E:\開發工具\VS開發工具\NUnit.Console-3.9.0\nunit3-console.exe Jenkins.Core.Test\bin\Release\net45\Jenkins.Core.Test.dll  --work Jenkins.Core.Test\bin\Release\net45\ 
17:10:21 NUnit Console Runner 3.9.0
...
17:10:22 Test Run Summary
17:10:22   Overall result: Passed
17:10:22   Test Count: 1, Passed: 1, Failed: 0, Warnings: 0, Inconclusive: 0, Skipped: 0
17:10:22   Start time: 2019-01-23 09:10:21Z
17:10:22     End time: 2019-01-23 09:10:22Z
17:10:22     Duration: 1.105 seconds
17:10:22 
17:10:22 Results (nunit3) saved as TestResult.xml
17:10:22 
17:10:22 D:\Program Files (x86)\Jenkins\workspace\unittest>exit 0 
17:10:23 Finished: SUCCESS

通過上面日志可以看到,執行了我們3個編譯步驟並且都成功了。

單元測試報告

很多時候我們希望能更直觀的看到測試的結果,這時候就需要有一個工具能夠解析Nunit測試完成生成的測試結果文件。

在插件管理中查找nunit插件,並安裝,然后重啟jenkins。

11.png

到項目中修改配置,在Post-build Actions中,添加單元測試報告

16.png

我們也可以將單元測試報告放到Build的單元測試之后。但是經過測試,由於在Build單元測試失敗時會阻止測試報告的統計執行,會造成單元測試失敗不會執行測試統計,因此我們將測試報告放到Post-build Actions,這樣就不影響了,因為測試失敗我們依然要統計失敗的數量等。

然后我們在構建一次,在左側菜單會多處一項測試結果。點進去可以看到測試的圖形化界面。
15.png

現在我們已經完成單元測試的自動執行,現在我們在項目中多添加幾條的單元測試,3條成功,1條失敗。

public class TestClass
{
    [Test]
    public void TestHelloWorld()
    {
        Assert.Pass(HelloWolrdHelper.GetString());
    }
    [Test]
    public void TestSucceeded()
    {
        Assert.IsTrue(true);
    }
    [Test]
    public void TestSucceeded2()
    {
        Assert.IsTrue(true);
    }
    [Test]
    public void TestFailed()
    {
        Assert.IsFalse(true);
    }
}

界面會會顯示單元測試的結果趨勢
17.png

同時本次測試結果會顯示詳細結果

18.png

...
21:33:54 Test Run Summary
21:33:54   Overall result: Failed
21:33:54   Test Count: 4, Passed: 3, Failed: 1, Warnings: 0, Inconclusive: 0, Skipped: 0
21:33:54     Failed Tests - Failures: 1, Errors: 0, Invalid: 0
21:33:54   Start time: 2019-01-23 13:33:53Z
21:33:54     End time: 2019-01-23 13:33:54Z
21:33:54     Duration: 1.162 seconds
21:33:54 
21:33:54 Results (nunit3) saved as TestResult.xml
21:33:54 
21:33:54 D:\Program Files (x86)\Jenkins\workspace\unittest>exit 1 
21:33:54 Build step '執行 Windows 批處理命令' marked build as failure
21:33:55 Recording NUnit tests results
21:33:55 Finished: FAILURE

測試通過后我們希望將nuget包上傳到我們的庫包服務器上。

上傳Nuget包

Publish NUnit test result report后面添加一個Publish Nuget packages

若沒有配置過會提示,需要配置
19.png
根據庫包服務的地址和密碼配置完后保存

20.png

注意這個配置要到系統設置里配置,而不是全局工具配置。
21.png
通過nuget.exe打包的nuget包會產生Jenkins.Core.0.2.0.symbols.nupkg,而通過Net Stardard是不會有這個文件,而這個文件是不能直接上傳,只需要上傳Jenkins.Core.0.2.0.nupkg即可。因此我們需要把*.symbols.nupkg文件排除掉。

配置完后再次編譯,可以看到有一個nuget的包上傳符號。
22.png

...
09:55:51 Test Run Summary
09:55:51   Overall result: Passed
09:55:51   Test Count: 3, Passed: 3, Failed: 0, Warnings: 0, Inconclusive: 0, Skipped: 0
09:55:51   Start time: 2019-01-24 01:55:50Z
09:55:51     End time: 2019-01-24 01:55:51Z
09:55:51     Duration: 1.045 seconds
09:55:51 
09:55:51 Results (nunit3) saved as TestResult.xml
09:55:51 
09:55:51 D:\Program Files (x86)\Jenkins\workspace\unittest>exit 0 
09:55:52 Recording NUnit tests results
09:55:52 Starting Publish Nuget packages publication
09:55:52 [unittest] $ E:\開發工具\VS開發工具\VS插件\NuGet.exe push Jenkins.Core\bin\Release\Jenkins.Core.0.2.0.nupkg ******** -Source http://127.0.0.1:10080/nuget -NonInteractive
09:55:53 Pushing Jenkins.Core.0.2.0.nupkg to 'http://127.0.0.1:10080/nuget'...
09:55:53   PUT http://127.0.0.1:10080/nuget/
09:55:53   Created http://127.0.0.1:10080/nuget/ 46ms
09:55:53 Your package was pushed.
09:55:53 [unittest] $ E:\開發工具\VS開發工具\VS插件\NuGet.exe push Jenkins.Core\bin\Release\Jenkins.Core.0.3.0.nupkg ******** -Source http://127.0.0.1:10080/nuget -NonInteractive
09:55:54 Pushing Jenkins.Core.0.3.0.nupkg to 'http://127.0.0.1:10080/nuget'...
09:55:54   PUT http://127.0.0.1:10080/nuget/
09:55:54   Created http://127.0.0.1:10080/nuget/ 55ms
09:55:54 Your package was pushed.
09:55:54 Ended Publish Nuget packages publication
09:55:54 Finished: SUCCESS

通過上面的日志可以看到自動上傳成功了。

需要注意的是由於我們每次編譯完,生成的nuget包都是在同一個目錄,因此自動上傳會將所有包進行上傳,而原來的包我們肯定之前上傳過,若我們的nuget的服務器配置不允許重復上傳覆蓋,<add key="allowOverrideExistingPackageOnPush" value="false" />則原來上傳過的包再次上傳會上傳失敗,此時jenkins報上傳就會認為是失敗的。因此要么我們將設置<add key="allowOverrideExistingPackageOnPush" value="true" />,可以避免這個問題,但是每次都要重復上傳包,包越來越多也會影響效率。

因此我們上傳成功后就把本地的包刪除掉,避免每次編譯重復上傳包,同時我們需要遵循每次代碼修改后的版本號都需要變更,比如我們遵循語義化版本2.0

我們添加一個腳本,處理完成后把bin下面的都刪除。
28.png
設置一下目錄或這文件名。
23.png

日志如下,上傳完就會執行Deleting project workspace

...
15:16:02 Test Run Summary
15:16:02   Overall result: Passed
15:16:02   Test Count: 3, Passed: 3, Failed: 0, Warnings: 0, Inconclusive: 0, Skipped: 0
15:16:02   Start time: 2019-01-24 07:16:00Z
15:16:02     End time: 2019-01-24 07:16:02Z
15:16:02     Duration: 1.877 seconds
15:16:02 
15:16:02 Results (nunit3) saved as TestResult.xml
15:16:02 
15:16:02 D:\Program Files (x86)\Jenkins\workspace\unittest>exit 0 
15:16:03 Recording NUnit tests results
15:16:03 Starting Publish Nuget packages publication
15:16:03 [unittest] $ E:\開發工具\VS開發工具\VS插件\NuGet.exe push Jenkins.Core\bin\Release\Jenkins.Core.0.3.0.nupkg ******** -Source http://127.0.0.1:10080/nuget -NonInteractive
15:16:04 Pushing Jenkins.Core.0.3.0.nupkg to 'http://127.0.0.1:10080/nuget'...
15:16:04   PUT http://127.0.0.1:10080/nuget/
15:16:04   Created http://127.0.0.1:10080/nuget/ 73ms
15:16:04 Your package was pushed.
15:16:04 Ended Publish Nuget packages publication
15:16:04 [WS-CLEANUP] Deleting project workspace...
15:16:04 [WS-CLEANUP] done
15:16:04 Finished: SUCCESS

目錄中bin目錄確實已經被刪除。
24.png

同時Nuget服務器上也可以看到上傳的包
25.png

優化流程

通過以上配置我們就完成了持續集成的所有主要步驟。但是還是有一個問題,由於Jenkins的Nuget上傳插件只能在Post-Build Action步驟配置,若單元測試失敗,仍然會自動上傳nuget包,這肯定不是我們希望的。當單元測試失敗時我們需要將自動生成的Nuget包刪除掉,避免自動上傳到Nuget服務器。

在單元測試后面我們添加一個條件步驟,當編譯必須為成功的時候我們才上傳nuget包,因此不滿足條件的時候我們需要把生成的nuget包刪除掉。

由於Build每個步驟異常(單元測試失敗)默認都會設置狀態為失敗,會造成Build后續不執行。我們可以手動設置為不穩定等狀態,讓后續步驟繼續執行,同時根據狀態決定后續步驟是否需要執行。
27

當單元測試失敗我希望執行腳本del Jenkins.Core\bin\Release\*.nupkg把nuget包刪除,防止自動上傳到nuget服務器。
26.png

再次構建日志如下

16:52:47 Test Run Summary
16:52:47   Overall result: Failed
16:52:47   Test Count: 4, Passed: 3, Failed: 1, Warnings: 0, Inconclusive: 0, Skipped: 0
16:52:47     Failed Tests - Failures: 1, Errors: 0, Invalid: 0
16:52:47   Start time: 2019-01-24 08:52:46Z
16:52:47     End time: 2019-01-24 08:52:47Z
16:52:47     Duration: 1.191 seconds
16:52:47 
16:52:47 Results (nunit3) saved as TestResult.xml
16:52:47 
16:52:47 D:\Program Files (x86)\Jenkins\workspace\unittest>exit 1 
16:52:47 Build step '執行 Windows 批處理命令' changed build result to UNSTABLE
16:52:47 [Current build status] check if current [UNSTABLE] is worse or equals then [ABORTED] and better or equals then [UNSTABLE]
16:52:47 Run condition [Current build status] enabling perform for step [執行 Windows 批處理命令]
16:52:47 [unittest] $ cmd /c call C:\WINDOWS\TEMP\jenkins6872476809579074167.bat
16:52:47 
16:52:47 D:\Program Files (x86)\Jenkins\workspace\unittest>del Jenkins.Core\bin\Release\*.nupkg 
16:52:47 
16:52:47 D:\Program Files (x86)\Jenkins\workspace\unittest>exit 0 
16:52:49 Recording NUnit tests results
16:52:49 Starting Publish Nuget packages publication
16:52:49 Ended Publish Nuget packages publication
16:52:49 [WS-CLEANUP] Deleting project workspace...
16:52:49 [WS-CLEANUP] done
16:52:49 Finished: UNSTABLE

可以看到單元測試失敗將狀態設置為UNSTABLE,然后觸發了刪除nuget文件的腳本。

同時圖標會變為黃色,表示編譯通過但是不穩定。
29.png

結語

最終我們的完整流程圖如下圖所示

graph LR 編譯程序集 --> |通過| 創建nuget包 編譯程序集 --> |不通過| 失敗 創建nuget包 --> 編譯單元測試程序集 編譯單元測試程序集 --> |通過| 執行單元測試 編譯單元測試程序集 --> |不通過| 失敗 執行單元測試 --> |通過| 上傳nuget包 執行單元測試 --> |不通過| 刪除nuget包 刪除nuget包 --> 清理編譯文件夾 上傳nuget包 --> 清理編譯文件夾 失敗 --> 清理編譯文件夾

30.png

  1. SVN獲取代碼
  2. 編譯程序集,編譯失敗,則失敗。
  3. 編譯成功創建nuget包。
  4. 執行單元測試
    • 單元測試通過,上傳nuget包。
    • 單元測試不通過,刪除buget包。
  5. 統計單元測試結果。
  6. 清理bin文件夾。

整個持續集成流程已經完成了,但是還是遺留了幾個問題后續在研究。

  1. 每次都需要人工手動構建,這並不夠自動。
  2. 自動在代碼提交時構建萬一出現多個人同時提交會不會有並發問題?
  3. 編譯不通過或單元測試執行不通過自動提醒。

參考文檔

  1. SDK-Style project and project.assets.json
  2. How can I use msbuild without project.assets.json or nuget restore?
  3. 項目文件中的包引用 (PackageReference)
  4. jenkin 不必要的Execute shell執行失敗,導致jenkins都失敗的解決

20191127212134.png
微信掃一掃二維碼關注訂閱號傑哥技術分享
本文地址:https://www.cnblogs.com/Jack-Blog/p/10316116.html
作者博客:傑哥很忙
歡迎轉載,請在明顯位置給出出處及鏈接


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM