Jenkins 将数组和ArrayList追加到ArrayList

Jenkins 将数组和ArrayList追加到ArrayList,jenkins,groovy,jenkins-pipeline,Jenkins,Groovy,Jenkins Pipeline,使用Jenkins管道,我们有自己的构建脚本。此外,我们所有的项目都有一个耙子,这是我们用来做很多建设步骤。我们典型的jenkins构建执行3个rake任务,但我们确实有一些例外,当我们有一个角度的网站,我们试图用它来构建 我将管道配置为: buildGitProject { repository='https://anonymous.visualstudio.com/Project/_git/my-csharp-project-with-angular' branchName=

使用Jenkins管道,我们有自己的构建脚本。此外,我们所有的项目都有一个耙子,这是我们用来做很多建设步骤。我们典型的jenkins构建执行3个rake任务,但我们确实有一些例外,当我们有一个角度的网站,我们试图用它来构建

我将管道配置为:

buildGitProject {
    repository='https://anonymous.visualstudio.com/Project/_git/my-csharp-project-with-angular'
    branchName= 'master'
    solutionName='MyCSharpSolution.sln'
    emailTo='someone@aol.com'
    preRakeCommands=['install_npm_dependencies', 'ng_build']
}
这取决于我们的构建脚本,即:

def call(body) {
    def args= [:]
    body.resolveStrategy = Closure.DELEGATE_FIRST
    body.delegate = args
    body()

    def agentName = "windows && ${args.branchName}"
    def remoteConfig = org.pg.RemoteConfigFactory.create(args.repository);

    pipeline {
        agent none
        options {
            buildDiscarder(logRotator(numToKeepStr: org.pg.Settings.BUILDS_TO_KEEP))
            skipStagesAfterUnstable()
            timestamps()
        }
        stages {
            stage("checkout") {
                agent any
                steps {
                    checkoutFromGit(remoteConfig, args.branchName)
                }
            }
            stage('build') {
                agent{node{ label agentName as String}}
                steps {
                    buildSolution(args.solutionName, args.get('preRakeCommands', []), args.get('postRakeCommands', []))
                }
            }
            stage('test') {
                agent{node{ label agentName as String}}
                steps {
                    testSolution(args.solutionName)
                }
            }
        }
    }
}
在构建阶段失败。 buildSolution.groovy

def call(String solutionName, ArrayList preRakeCommands, ArrayList postRakeCommands) {
    unstash 'ws'
    String[] rakeCommands = [
        "build_solution[${solutionName}, Release, Any CPU]",
        "copy_to_deployment_folder",
        "execute_dev_dropkick"
    ]
    String[] combinedRakeCommand = (preRakeCommands.plus(rakeCommands).plus(postRakeCommands)) as String[]
    executeRake( combinedRakeCommand )
    stash name: 'deployment', includes: 'deployment/**/*'
}
def call(String... rakeTasks) {
    def safeRakeTasks = rakeTasks.collect{ "\"$it\"" }.join(' ');
    bat script: "rake ${safeRakeTasks}"
}
executeRake.groovy

def call(String solutionName, ArrayList preRakeCommands, ArrayList postRakeCommands) {
    unstash 'ws'
    String[] rakeCommands = [
        "build_solution[${solutionName}, Release, Any CPU]",
        "copy_to_deployment_folder",
        "execute_dev_dropkick"
    ]
    String[] combinedRakeCommand = (preRakeCommands.plus(rakeCommands).plus(postRakeCommands)) as String[]
    executeRake( combinedRakeCommand )
    stash name: 'deployment', includes: 'deployment/**/*'
}
def call(String... rakeTasks) {
    def safeRakeTasks = rakeTasks.collect{ "\"$it\"" }.join(' ');
    bat script: "rake ${safeRakeTasks}"
}
在jenkins构建日志中,它说:

08:43:09 C:\jenkins_repos\Project\my-csharp-project-with-angular>rake "install_npm_dependencies" "ng_build" "[Ljava.lang.String;@11bd466" 
我不知道它是如何或为什么使用字符串指针的,因为我认为
plus
concated数组和ArrayList。。。加上詹金斯身上有这种感觉,所以测试起来很痛苦

List a = ['a1','a2','a3']
String [] s = ['s1','s2','s3']
List b = ['b1','b2','b3']

println a.plus(s as List).plus(b)
输出:

[a1, a2, a3, s1, s2, s3, b1, b2, b3]
输出:

[a1, a2, a3, s1, s2, s3, b1, b2, b3]
另一种方法:

List a = ['a1','a2','a3']
String[] s = ['s1','s2','s3']
List b = ['b1','b2','b3']

println ([*a,*s,*b])
或者

println a + [*s] + b
另一种方法是,哪一种应该表现得更好

List a = ['a1','a2','a3']
String[] s = ['s1','s2','s3']
List b = ['b1','b2','b3']

println ([*a,*s,*b])
或者

println a + [*s] + b

哪个性能更好

修复了它。。我真傻。我应该使用
ArrayList.addAll
。愚蠢的C#habbits解决了这个问题。。我真傻。我应该使用
ArrayList.addAll
。愚蠢的C#habbitsi使用了一种稍有不同的方法,但这种方法也会奏效。谢谢。我用了一个稍微不同的方法,但这个方法也会奏效。非常感谢。