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問題彙總git

前言

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

目標

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

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

使用 .Net Stardard

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

1.png

在TestClass新增一個測試方法c#

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

如今Jenkins.Core項目結構以下windows

│  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包後,若這個項目的其餘程序集編譯的時候會錯誤。bash

這個項目在編譯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都失敗的解決

本文地址:http://www.javashuo.com/article/p-aopwmyux-dn.html 做者博客:傑哥很忙 歡迎轉載,請在明顯位置給出出處及連接

相關文章
相關標籤/搜索