Лучшая практика для если еще условие Groovy - PullRequest
0 голосов
/ 31 октября 2019

Я новичок в groovy, и я написал этот сценарий для конвейерного задания Jenkins , которое работает. Сценарий действует как планировщик, поэтому он проверяет файлы, которые были изменены в последнем коммите, а затем сравниваетс заранее заданными путями, так что ut будет планировать другую работу для этого конкретного компонента.

Но я думаю, что он будет расти все больше и больше, и я почти уверен, что это не самый эффективный способ сделатьит.

stage("check file paths that changed in this build") {
    ChangedFilesList = gitfunction.getChangedFilesList(changedFiles)
    ChangedFilesList.each {
        println "Changes in file: ${it}"
        def file = "${it}"
        if (file ==~ /(?s).*component\/.*/ || file ==~ /(?s).*component0\/.*/){
            print "scheduling component tests for component0"
            build job: "Component_test_CI", parameters: [[$class: 'StringParameterValue', name: "SERVICE_NAME", value: "component0"]]
            description =  "component0"
        } else if (file ==~ /(?s).*component1\/.*/){
            print "scheduling component tests for component1"
            build job: "Component_test_CI", parameters: [[$class: 'StringParameterValue', name: "SERVICE_NAME", value: "component1"]]
            description =  "component1"
        } else if (file ==~ /(?s).*component1\/.*/){
            print "scheduling component tests for component1"
            build job: "Component_test_CI", parameters: [[$class: 'StringParameterValue', name: "SERVICE_NAME", value: "component1"]]
            description =  "component1"
        } else if (file ==~ /(?s).*component2\/.*/){
            print "scheduling component tests for component2"
            build job: "Component_test_CI", parameters: [[$class: 'StringParameterValue', name: "SERVICE_NAME", value: "component2"]]
            description =  "component2"
        } else if (file ==~ /(?s).*component3\/.*/){
            print "scheduling component tests for component3"
            build job: "Component_test_CI", parameters: [[$class: 'StringParameterValue', name: "SERVICE_NAME", value: "component3"]]
            description =  "component3"
        } else if (file ==~ /(?s).*component4\/.*/){
            print "scheduling component tests for component4"
            build job: "Component_test_CI", parameters: [[$class: 'StringParameterValue', name: "SERVICE_NAME", value: "component4"]]
            description =  "component4"
        } else if (file ==~ /(?s).*component5\/.*/){
            print "scheduling component tests for component5"
            build job: "Component_test_CI", parameters: [[$class: 'StringParameterValue', name: "SERVICE_NAME", value: "component5"]]
            description =  "component5"
        } else {
            sh "printf \"\\e[95m----------------- no specific module was changed - Will not trigger Component_test_CI job --------------------\\e[0m\\n\""
        }
    }
}

Ответы [ 2 ]

1 голос
/ 31 октября 2019
//define mapping pattern - component name
//it's possible to store this in some config like yaml or json
def path2component = [
    /(?s).*component\/.*/  : "component0",
    /(?s).*component0\/.*/ : "component0",
    /(?s).*component1\/.*/ : "component1",

]
//iterate pattern
path2component.find{pattern,cname->
    if(file.find(pattern)){
        println "scheduling component tests for ${cname}"
        build job: "Component_test_CI", parameters: [[$class: 'StringParameterValue', name: "SERVICE_NAME", value: cname]]
        description=cname
        return true //found
    }else {
        return false //continue searching
    }
}
0 голосов
/ 31 октября 2019

Небольшое исправление ответа @daggett:

String cname
file.eachMatch(/(component)(\d?)/){ cname = it[ 1 ] + ( it[2] ?: '0' ) }
if(cname){
    print "scheduling component tests for ${cname}"
    build job: "Component_test_CI", parameters: [[$class: 'StringParameterValue', name: "SERVICE_NAME", value: cname]]
    description =  cname
}
...