簡體   English   中英

java.lang.NoSuchMethodError:在步驟中找不到此類 DSL 方法“階段”

[英]java.lang.NoSuchMethodError: No such DSL method 'stages' found among steps

當我運行下面的腳本時,出現錯誤“ java.lang.NoSuchMethodError: No such DSL method stages found among steps ”。

有人可以告訴我為什么以及如何解決這個問題嗎?

基本上我需要為我的每個階段做,並且它必須並行運行。 我們可以在聲明式管道上做嗎?

def services = ["A", "B", "C"]
 
def parallelStagesMap = services.collectEntries {
    ["${it}" : generateStage(it)]
}

def generateStage(service) {
    return {
        stage("${service}") {
            agent { label 'dotnet-agent' }
            environment {
                PROJECT = "myProject.${service}"
                ARTIFACT_NAME = "${GIT_COMMIT}-${service}.zip"
            }
            stages {
                stage('Build-${service}') {
                    steps {
                        include 'automation/jenkins/${service}/buildAndArtifact'
                    }
                }

                stage('Test-${service}') {
                    steps {
                        dir("src/${PROJECT}.Tests") {
                            sh("dotnet test ${PROJECT}.Tests.csproj -c ${ASPNETCORE_ENVIRONMENT}")
                        }
                    }
                }
                stage('Deploy-${service}') {
                    steps {
                        include 'automation/jenkins/${service}/deploy'
                    }
                }
            }
        }
    }
}

pipeline {
    agent { label 'dotnet-agent' }
    stages {
        stage('Set credentials') {
            stages {
                stage('Build') {
                    steps {
                        script {
                            parallel parallelStagesMap
                        }
                     }
                }           
            }
        }
    }
}

我不知道您是否可以像您嘗試做的那樣擁有嵌套階段。

這似乎有效:

def services = ["A", "B", "C"]
 
def parallelStagesMap = services.collectEntries {
    ["${it}" : generateStage(it)]
}

def generateStage(service) {
    return {
        echo "build $service"
        echo "test $service"
        echo "deploy $service"
    }    
}

pipeline {
    agent any 
    environment {
        PROJECT = "myProject.${service}"
        ARTIFACT_NAME = "${GIT_COMMIT}-${service}.zip"
    }
    stages {
        stage('Build') {
            steps {
                script {
                    parallel parallelStagesMap
                }
             }
        }   
    }
}

Output:

[Pipeline] {
[Pipeline] withEnv
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Build)
[Pipeline] script
[Pipeline] {
[Pipeline] parallel
[Pipeline] { (Branch: A)
[Pipeline] { (Branch: B)
[Pipeline] { (Branch: C)
[Pipeline] echo
build A
[Pipeline] echo
test A
[Pipeline] echo
deploy A
[Pipeline] }
[Pipeline] echo
build B
[Pipeline] echo
test B
[Pipeline] echo
deploy B
[Pipeline] }
[Pipeline] echo
build C
[Pipeline] echo
test C
[Pipeline] echo
deploy C
[Pipeline] }
[Pipeline] // parallel
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM