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 做者博客:杰哥很忙 欢迎转载,请在明显位置给出出处及连接

相关文章
相关标签/搜索