zoukankan      html  css  js  c++  java
  • 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 Studio2017EnterpriseMSBuild15.0BinMSBuild.exe

    创建一个新项目取名为unittest。
    2.png

    为了简单起见,暂时只编译Jenkins.Core.csproj。
    7.png
    设置完成后尝试构建,但是报错了

    6.png

    错误提示没有objproject.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.CoreJenkins.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 Studio2017EnterpriseMSBuild15.0BinRoslyn
    15:47:24 CopyFilesToOutputDirectory:
    15:47:24   正在将文件从“objRelease
    et45Jenkins.Core.dll”复制到“binRelease
    et45Jenkins.Core.dll”。
    15:47:24   Jenkins.Core -> D:Program Files (x86)JenkinsworkspaceunittestJenkins.CoreinRelease
    et45Jenkins.Core.dll
    15:47:24   正在将文件从“objRelease
    et45Jenkins.Core.pdb”复制到“binRelease
    et45Jenkins.Core.pdb”。
    15:47:24 GenerateNuspec:
    15:47:24   Successfully created package 'D:Program Files (x86)JenkinsworkspaceunittestJenkins.CoreinReleaseJenkins.Core.0.3.0.nupkg'.
    15:47:24 已完成生成项目“D:Program Files (x86)JenkinsworkspaceunittestJenkins.CoreJenkins.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:StudyDemoJenkinsTestJenkinsTest.CoreJenkins.Core.TestinDebug
    et45Jenkins.Core.Test.dll  --work F:StudyDemoJenkinsTestJenkinsTest.CoreJenkins.Core.TestinDebug
    et45
    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:StudyDemoJenkinsTestJenkinsTest.CoreJenkins.Core.TestinDebug
    et45Jenkins.Core.Test.dll
    
    
    Run Settings
        DisposeRunners: True
        WorkDirectory: F:StudyDemoJenkinsTestJenkinsTest.CoreJenkins.Core.TestinDebug
    et45
        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 unit3-console.exe Jenkins.Core.TestinRelease et45Jenkins.Core.Test.dll --work Jenkins.Core.TestinRelease et45
    配置如下
    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)JenkinsworkspaceunittestJenkins.CoreJenkins.Core.csproj”在节点 1 上(Build 个目标)。
    
    ...
    
    17:10:19 已完成生成项目“D:Program Files (x86)JenkinsworkspaceunittestJenkins.CoreJenkins.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 Studio2017EnterpriseMSBuild15.0BinMSBuild.exe
    17:10:19 Executing the command cmd.exe /C " "D:Program Files (x86)Microsoft Visual Studio2017EnterpriseMSBuild15.0BinMSBuild.exe" /t:Build /p:Configuration=Release Jenkins.Core.Test/Jenkins.Core.Test.csproj " && exit %%ERRORLEVEL%% from D:Program Files (x86)Jenkinsworkspaceunittest
    
    ...
    17:10:20   Jenkins.Core.Test -> D:Program Files (x86)JenkinsworkspaceunittestJenkins.Core.TestinRelease
    et45Jenkins.Core.Test.dll
    17:10:20 已完成生成项目“D:Program Files (x86)JenkinsworkspaceunittestJenkins.Core.TestJenkins.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:WINDOWSTEMPjenkins6967806742281641251.bat
    17:10:20 
    17:10:20 D:Program Files (x86)Jenkinsworkspaceunittest>E:开发工具VS开发工具NUnit.Console-3.9.0
    unit3-console.exe Jenkins.Core.TestinRelease
    et45Jenkins.Core.Test.dll  --work Jenkins.Core.TestinRelease
    et45 
    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)Jenkinsworkspaceunittest>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)Jenkinsworkspaceunittest>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)Jenkinsworkspaceunittest>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.CoreinReleaseJenkins.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.CoreinReleaseJenkins.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)Jenkinsworkspaceunittest>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.CoreinReleaseJenkins.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.CoreinRelease*.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)Jenkinsworkspaceunittest>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:WINDOWSTEMPjenkins6872476809579074167.bat
    16:52:47 
    16:52:47 D:Program Files (x86)Jenkinsworkspaceunittest>del Jenkins.CoreinRelease*.nupkg 
    16:52:47 
    16:52:47 D:Program Files (x86)Jenkinsworkspaceunittest>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
    作者博客:杰哥很忙
    欢迎转载,请在明显位置给出出处及链接

  • 相关阅读:
    UVa532 Dungeon Master 三维迷宫
    6.4.2 走迷宫
    UVA 439 Knight Moves
    UVa784 Maze Exploration
    UVa657 The die is cast
    UVa572 Oil Deposits DFS求连通块
    UVa10562 Undraw the Trees
    UVa839 Not so Mobile
    327
    UVa699 The Falling Leaves
  • 原文地址:https://www.cnblogs.com/Jack-Blog/p/10316116.html
Copyright © 2011-2022 走看看