Конвейер Дженкинса — переменная из команды bat в label, вывод показывает полную командную строку

#jenkins #jenkins-pipeline #jenkins-groovy

#Дженкинс #дженкинс-конвейер #Дженкинс-заводной

Вопрос:

Декларативный конвейер Дженкинса версии 2.176.1, пытается получить вывод команды bat с одного этапа, чтобы установить метку агента для другого этапа,

При установке переменной из команды bat («echo% computername%») я могу довольно хорошо прочитать переменную из шагов (я получаю: V-COMP-S6-CI3, что мне и нужно.)

Мне не удается установить ее в метке агента. Когда я пытаюсь установить agent { label «$ {winCompName}» } на другом этапе, я получаю: нет узлов с меткой ‘c:jenkinsbuildworkspacenashpaz@2 >эхо V-COMP-S6-CI3 12:34:29 V-COMP-S6-CI3’

Кажется, я получаю полную командную строку вывод вместо стандартного вывода, («c:jenkinsbuildworkspacenashpaz@2 >echo V-COMP-S6-CI3» вместо просто «V-COMP-S6-CI3»)

Как я могу получить только вывод на метку агента?

мой конвейер и вывод:

     #!/usr/bin/env groovy


import org.apache.commons.lang.StringUtils
currentBuild.description = "${params.EMAIL}"
currentBuild.displayName = "${params.BRANCH_NAME}"

def call(String filter_string, int occurrence) {
    def logs = currentBuild.rawBuild.getLog(10000).join('n')
    int count = StringUtils.countMatches(logs, filter_string);
    if (count > occurrence -1) {
        currentBuild.result='UNSTABLE'
    }
}


pipeline {
    agent {
        label "winServerGroup"
    }
    options { 
       timestamps()
       timeout(time: 2, unit: 'HOURS')   // timeout on whole pipeline job
  
    }

    stages {
        stage ('Print Environment') {            
            steps {
                echo "Print Environment" 
                bat '''
                echo userprofile=%USERPROFILE%
                SET
                '''
            }
        }   
        stage ('1. set comutername to var') {
            agent { label 'winServerGroup' }
            steps {
                script {
                    winCompName = bat(script: "echo %COMPUTERNAME%", returnStdout: true).trim()
                }
                echo "${winCompName}"
            }       
        }
        stage ('1.5.print var') {
            agent { label 'winServerGroup' }
            steps {
                echo "${winCompName}"
            }
        }
        stage ('2. run on comutername') {
            agent { label "${winCompName}" }
            steps {
                bat """echo %COMPUTERNAME%"""
                echo "${winCompName}"
            }
        }

    } // end of stages
} // end of pipeline
  

вывод (усеченный):

     [Pipeline] { (1. set comutername to var)
[Pipeline] node (hide)
...
[Pipeline] echo
12:34:12  c:jenkinsbuildworkspacenashpaz@2>echo V-COMP-S6-CI3 
12:34:12  V-COMP-S6-CI3
[Pipeline] }
...
[Pipeline] stage
[Pipeline] { (1.5.print var)
[Pipeline] node
12:34:12  Running on v-comp-s6-ci3 in c:jenkinsbuildworkspacenashpaz@2
[Pipeline] {
...
[Pipeline] withEnv
[Pipeline] {
[Pipeline] echo
12:34:13  c:jenkinsbuildworkspacenashpaz@2>echo V-COMP-S6-CI3 
12:34:13  V-COMP-S6-CI3
[Pipeline] }
....
[Pipeline] stage
[Pipeline] { (2. run on comutername)
[Pipeline] node
12:34:29  Still waiting to schedule task
12:34:29  There are no nodes with the label ‘c:jenkinsbuildworkspacenashpaz@2>echo V-COMP-S6-CI3 
12:34:29  V-COMP-S6-CI3’
  

Ответ №1:

добавление .readLines().drop(1).join(» «) (ответ от https://issues.jenkins-ci.org/browse/JENKINS-44569 ) работает, но я все еще задаюсь вопросом, нет ли более простого способа:

 stage ('1. set comutername to var') {
        agent { label 'winServerGroup' }
        steps {
            script {
                winCompName = bat(script: "echo %COMPUTERNAME%", returnStdout: true).trim().readLines().drop(1).join(" ")
            }
            echo "${winCompName}"
        }       
    }

    stage ('2. run on comutername') {
        agent { label "${winCompName}" }
        steps {
            bat """echo %COMPUTERNAME%"""
            echo "${winCompName}"
        }
    }