如何在Jenkins管道(旧工作流)中使用VSTest结果和其他.NET插件?

如何在Jenkins管道(旧工作流)中使用VSTest结果和其他.NET插件?,jenkins,groovy,jenkins-pipeline,jenkins-job-dsl,Jenkins,Groovy,Jenkins Pipeline,Jenkins Job Dsl,由于公司的一些变化,我们不得不改用Jenkins作为CI工具。尽管这看起来并不是一个坏主意,但由于缺乏对非Java应用程序的支持,特别是对管道(旧工作流)插件的支持,以及我们缺乏Jenkins知识(目前还没有),我们遇到了很多麻烦 节点(“主节点”) { 尝试 { 阶段('签出、恢复、生成') { //从存储库签出代码 git分支:“”,凭据ID:“”,url:“” //吉特清洁 bat returnStatus:true,脚本:“git clean-fdx” //执行dotnet还原和nuge

由于公司的一些变化,我们不得不改用Jenkins作为CI工具。尽管这看起来并不是一个坏主意,但由于缺乏对非Java应用程序的支持,特别是对管道(旧工作流)插件的支持,以及我们缺乏Jenkins知识(目前还没有),我们遇到了很多麻烦

节点(“主节点”)
{
尝试
{
阶段('签出、恢复、生成')
{
//从存储库签出代码
git分支:“”,凭据ID:“”,url:“”
//吉特清洁
bat returnStatus:true,脚本:“git clean-fdx”
//执行dotnet还原和nuget还原
bat returnStatus:true,脚本:“”“for/f”标记=*“%%a在(\'dir project.json/b/s\')中执行dotnet还原“%%a”
“C:\\Users\\Administrator\\.jenkins\\workspace\\nuget.exe”还原“C:\\Users\\Administrator\\.jenkins\\workspace\\CI\\.sln”“””
//构建解决方案
bat returnStatus:true,脚本:““C:\\Program Files(x86)\\MSBuild\\14.0\\Bin\\MSBuild.exe”/p:DebugType=full/p:platform=x64/p:configuration=release/p:VisualStudioVersion=14.0”
}
}捕捉(错误)
{
currentBuild.result='失败'
}
jobDsl(${env.JOB_NAME}){
台阶{
bat returnStatus:true,脚本:““C:\\Program Files(x86)\\Microsoft Visual Studio 14.0\\Common7\\IDE\\CommonExtensions\\Microsoft\\TestWindow\\vstest.console.exe”“C:\\Users\\Administrator\\\.jenkins\\workspace\\CI\\\\”/TestCaseFilter:“TestCategory=UnitTestTest | TestCategory=ContinuousTest”/EnableCodeOverage/Platform:x64/logger:trx”
}
出版者{
档案馆{
msTest{
模式(“'C:\\Users\\Administrator\\.jenkins\\workspace\\CI\\TestResults”“)
}
}
}
}
}
但是我得到了
作业DSL的错误:

java.lang.IllegalArgumentException:应为命名参数,但得到 [CI,org.jenkinsci.plugins.workflow.cps。CpsClosure2@1a706730]在 org.jenkinsci.plugins.workflow.cps.DSL.parseArgs(DSL.java:442)位于 org.jenkinsci.plugins.workflow.cps.DSL.invokeDescribable(DSL.java:251) 位于org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.java:129) 在 org.jenkinsci.plugins.workflow.cps.CpsScript.invokeMethod(CpsScript.java:108) 在groovy.lang.GroovyObject$invokeMethod.call(未知源)处 org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48) 在 org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113) 位于org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:151) 在 org.kohsuke.groovy.sandbox.GroovyInterceptor.onMethodCall(GroovyInterceptor.java:21) 在 org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.sandboxiterceptor.onMethodCall(sandboxiterceptor.java:115) 在 org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.sandboxiterceptor.onMethodCall(sandboxiterceptor.java:103) 位于org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:149) 在 org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:146) 在 com.cloudbees.groovy.cps.sandbox.sandboxivoker.methodCall(sandboxivoker.java:16) 在WorkflowScript.run(WorkflowScript:1)处 cps.transform(本机方法)位于com.cloudbees.groovy.cps.impl.ContinuationGroup.methodCall(ContinuationGroup.java:57) 在 com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.DispatcherArg(FunctionCallBlock.java:109) 在 com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.fixArg(FunctionCallBlock.java:82) at sun.reflect.GeneratedMethodAccessor295.invoke(未知源)at sun.reflect.DelegatingMethodAccessorImpl.invoke(未知源)位于 java.lang.reflect.Method.invoke(未知源代码)位于 com.cloudbees.groovy.cps.impl.ContinuationPtr$ContinuationImpl.receive(ContinuationPtr.java:72) 在 com.cloudbees.groovy.cps.impl.ClosureBlock.eval(ClosureBlock.java:46) 位于com.cloudbees.groovy.cps.Next.step(Next.java:74) com.cloudbees.groovy.cps.Continuable.run0(Continuable.java:154)位于 org.jenkinsci.plugins.workflow.cps.SandboxContinuable.access$001(SandboxContinuable.java:18) 在 org.jenkinsci.plugins.workflow.cps.SandboxContinuable$1.call(SandboxContinuable.java:33) 在 org.jenkinsci.plugins.workflow.cps.SandboxContinuable$1.call(SandboxContinuable.java:30) 在 org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.GroovySandbox.runInSandbox(GroovySandbox.java:108) 在 org.jenkinsci.plugins.workflow.cps.SandboxContinuable.run0(SandboxContinuable.java:30) 在 org.jenkinsci.plugins.workflow.cps.CpsThread.runNextChunk(CpsThread.java:165) 在 org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.run(CpsThreadGroup.java:328) 在 org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.access$100(CpsThreadGroup.java:80) 在 org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:240) 在 org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:228) 在 org.jenkinsci.plugins.workflow.cps.cpsvmecutorservice$2.call(cpsvmecutorservice.java:64) 位于java.util.concurrent.FutureTask.run(未知源代码) hudson.remoting.SingleLaneExecutorService$1.run(SingleLaneExecutorService.java:112) 在 jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.java:28) 位于java.util.concurrent.Executors$RunnableAdapter.call(未知 在java.util.concurrent.FutureTask.run(未知源代码)处 位于的java.util.concurrent.ThreadPoolExecutor.runWorker(未知源) java.util.concurrent.ThreadPoolExecutor$Worker.run(未知源代码)位于 java.lang.Thread.run(未知源)

这真的让我觉得这不是真的
node('master') 
{
    try 
    {
        stage('Checkout, restore, build') 
        {
            //Checkout the code from the repository
            git branch: '<branch_name>', credentialsId: '<credentials_ID>', url: '<repo_URL>'    

            //git clean
            bat returnStatus: true, script: 'git clean -fdx'

            //Perform dotnet restore and nuget restore
            bat returnStatus: true, script: '''for /f "tokens=*" %%a in (\'dir project.json /b /s\') do dotnet restore "%%a"
            "C:\\Users\\Administrator\\.jenkins\\workspace\\nuget.exe" restore "C:\\Users\\Administrator\\.jenkins\\workspace\\CI\\<solution_name>.sln"'''

            //Build the solution
            bat returnStatus: true, script: '"C:\\Program Files (x86)\\MSBuild\\14.0\\Bin\\msbuild.exe" /p:DebugType=full /p:platform=x64 /p:configuration=release /p:VisualStudioVersion=14.0 '
        }
    } catch(err)
    {
        currentBuild.result = 'FAILURE'
    }

    jobDsl("${env.JOB_NAME}") {
        steps {
            bat returnStatus: true, script: '"C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\Common7\\IDE\\CommonExtensions\\Microsoft\\TestWindow\\vstest.console.exe" "C:\\Users\\Administrator\\.jenkins\\workspace\\CI\\<path_to_tests_dll>"  /TestCaseFilter:"TestCategory=UnitTest|TestCategory=ContinuousTest" /EnableCodeCoverage /Platform:x64 /logger:trx'
        }
        publishers {
            archiveXUnit {
                msTest {
                    pattern('"C:\\Users\\Administrator\\.jenkins\\workspace\\CI\\TestResults"')
                }
            }
        }
    }
}