Как вернуть в виде списка только числа из вывода команды в Jenkinsfile / Groovy? - PullRequest
1 голос
/ 07 ноября 2019

Нам нужно вернуть в качестве опции в этом Jenkinsfile только номер ревизии из наших приложений k8s, но команда возвращает весь вывод, и все мои регулярные выражения и экранированные команды не работали над ним. Вот код:

                    choiceType: 'PT_SINGLE_SELECT', 
                    description: 'Revision of the application on kubernetes', 
                    name: 'revision', 
                    omitValueField: false, 
                    randomName: 'choice-parameter-5633384460832177', 
                    referencedParameters: 'namespaces,deployment', 
                    script: [
                        $class: 'GroovyScript', 
                        script: [
                            classpath: [],
                            sandbox: true,
                            script: """
                                if (namespaces.equals("Select")){
                                    return["Nothing to do - Select your deployment"]
                                } else {
                                    def revResult = null
                                    def kubecmd0 = "kubectl rollout history deploy --kubeconfig=${kubefilePrd} -n " + namespaces + " " + deployment + " "
                                    def kubecmd1 = kubecmd0.execute().in.text.split().toList()
                                    return kubecmd1

                                }
                            """

                        ]

На работе Дженкинса:

printscreen

Есть ли какая-нибудь функция или магическое регулярное выражение, которое могло бы решить эту проблему?

1 Ответ

0 голосов
/ 08 ноября 2019

Проблема решена:

[$class: 'CascadeChoiceParameter', 
    choiceType: 'PT_SINGLE_SELECT', 
    description: 'Revision of the application on kubernetes', 
    name: 'revision', 
    randomName: 'choice-parameter-5633384460832177', 
    referencedParameters: 'namespaces,deployment', 
    script: [
        $class: 'GroovyScript', 
        script: [
            classpath: [],
            sandbox: true,
            script: """
                if (namespaces.equals("Select")){
                    return["Nothing to do - Select your deployment"]
                } else {
                    def command = "kubectl rollout history deploy --kubeconfig=${kubefilePrd} -n " + namespaces + " " + deployment  + "| grep -v REVISION | grep -v deployment | cut -f1 -d' '"
                    def output = ['bash', '-c', command].execute().in.text
                    return output.split().toList()

                }
            """

        ]

По сути, необходимо вызывать bash, а не использовать groovy напрямую. Работает для меня. :)

...