Невозможно передать параметр из одного конвейерного задания в другое - PullRequest
0 голосов
/ 11 марта 2020

Редактирование вопроса: я пытаюсь запустить простое конвейерное задание, которое запускает другое конвейерное задание и отправляет значения параметров. Я попробовал упрощенный вариант использования в приведенном ниже примере

Piepeline - Parent

pipeline{
agent any
options {
    buildDiscarder logRotator(artifactDaysToKeepStr: '', artifactNumToKeepStr: '', daysToKeepStr: '', numToKeepStr: '5')
}
stages {
    stage('Invoke sample_pipleline') {
        steps {
                CommitID = 'e2b6cdf1e8018560b3ba51cbf253de4f33647b5a'
                Branch = "master"
            input id: 'Environment', message: 'Approval', parameters: [choice(choices: ['FRST', 'QA', 'PROD'], description: '', name: 'depServer')], submitter: 'FCMIS-SFTP-LBAAS', submitterParameter: 'user'
            build job: 'simple_child', 
        parameters: [string(name: 'CommitID', value: 'e2b6cdf1e8018560b3ba51cbf253de4f33647b5a'),string(name: 'Environment', value: depServer), string(name: 'Branch', value: 'master')], 
                quietPeriod: 1
        }
    }
}

}

Pipeline - child

pipeline{
agent any
parameters {
    string defaultValue: '', description: 'K', name: 'depServer'
}
options {
    buildDiscarder logRotator(artifactDaysToKeepStr: '', artifactNumToKeepStr: '', daysToKeepStr: '', numToKeepStr: '5')
}
stages {
    stage('CodePull') {
        steps {
            echo "Testing"
            echo "${depServer}"
        }
    }
}

}

Когда я запускаю родительский конвейер, он не запускает дочерний конвейер, но выдает ошибку.

    Started by user ARAV
    Running in Durability level: MAX_SURVIVABILITY
    [Pipeline] Start of Pipeline
    [Pipeline] node
    Running on Windows_aubale in                 C:\Users\arav\Documents\Proj\Automation\Jenkins\Jenkins_slave_root_directory\workspace\sample_parent2
    [Pipeline] {
    [Pipeline] stage
    [Pipeline] { (Invoke sample_pipleline)
    [Pipeline] input
    Input requested
    Approved by ARAV
    [Pipeline] }
    [Pipeline] // stage
    [Pipeline] }
    [Pipeline] // node
    [Pipeline] End of Pipeline
    groovy.lang.MissingPropertyException: No such property: depServer for class: groovy.lang.Binding

После внесения предложенных изменений и с некоторыми изменениями родительское задание запускает дочернее задание, но дочерний журнал показывает, что оно не получает переданный параметр.

    Started by upstream project "sample_parent" build number 46
    originally caused by:
    Started by user ARAV
    Running in Durability level: MAX_SURVIVABILITY
    [Pipeline] Start of Pipeline
    [Pipeline] node
    Running on Jenkins in /var/jenkins_home/workspace/simple_child
    [Pipeline] {
    [Pipeline] stage
    [Pipeline] { (CodePull)
    [Pipeline] echo
    Testing
    [Pipeline] echo

    [Pipeline] }
    [Pipeline] // stage
    [Pipeline] }
    [Pipeline] // node
    [Pipeline] End of Pipeline
    Finished: SUCCESS

Пожалуйста, помогите мне понять, что я здесь делаю неправильно. Ценю вашу помощь !!

Ответы [ 3 ]

0 голосов
/ 12 марта 2020

Если ваш дочерний конвейер имеет параметр с именем «depServer»:

parameters {
    string name: 'depServer', defaultValue: '', description: ''
}

Вы должны предоставить значение для него:

build job: 'simple_child', 
    parameters: [string(name: 'depServer', value: 'SOMETHING'] 

Наконец, вы должны обратиться к нему:

        steps {
            echo "Testing"
            echo "${params.depServer}"
        }
0 голосов
/ 12 марта 2020

Огромное спасибо zett42 и Марату C! Итак, наконец, работающий код выглядит следующим образом (объединяя оба ответа):

Родительский скрипт:

pipeline{
    agent any
    options {
        buildDiscarder logRotator(artifactDaysToKeepStr: '', artifactNumToKeepStr: '', daysToKeepStr: '', numToKeepStr: '5')
    }
    stages {
        stage('Invoke sample_pipleline') {
            steps {
                script{
                    def CommitID
                    def depServer
                    def Branch
                    CommitID = 'e2b6cdf1e8018560b3ba51cbf253de4f33647b5a'
                    Branch = "master"
                userip = input id: 'Environment', message: 'Approval', parameters: [choice(choices: ['FRST', 'QA', 'PROD'], description: '', name: 'input_env')], submitter: 'FCMIS-SFTP-LBAAS', submitterParameter: 'user'
                depServer = userip.input_env
                echo "${depServer}"
                build job: 'simple_child', 
            parameters: [string(name: 'CommitID', value: "${CommitID}"),
                         string(name: 'Environment', value: "${depServer}"), 
                         string(name: 'Branch', value: "${Branch}")], 
                    quietPeriod: 1
                }
            }
        }
    }
}

Дочерний скрипт:

pipeline{
    agent any
    parameters {
        string defaultValue: '', description: 'K', name: 'Environment'
    }
    options {
        buildDiscarder logRotator(artifactDaysToKeepStr: '', artifactNumToKeepStr: '', daysToKeepStr: '', numToKeepStr: '5')
    }
    stages {
        stage('CodePull') {
            steps {
                echo "Testing"
                echo "${params.Environment}"
            }
        }
    }
}
0 голосов
/ 11 марта 2020

groovy .lang.MissingPropertyException: Нет такого свойства: depServer для класса: groovy .lang.Binding

Это означает, что вы не определили переменную depServer.

Исправьте это, присвоив результат шага input переменной depServer:

steps {
    script {
        def input_env = input id: 'Environment', message: 'Approval', parameters: [choice(choices: ['FRST', 'QA', 'PROD'], description: '', name: 'depServer')], submitter: 'FCMIS-SFTP-LBAAS', submitterParameter: 'user'

        build job: 'simple_child', 
            parameters: [string(name: 'CommitID', value: 'aa21a592d1039cbce043e5cefea421efeb5446a5'),string(name: 'Environment', value: input_env.depServer), string(name: 'Branch', value: "master")], 
            quietPeriod: 1
    }
}

Я добавил блок script, чтобы иметь возможность создавать и назначать переменная.

На самом деле input возвращает HashMap, который выглядит следующим образом:

[depServer:QA, user:someUser]

Вот почему мы должны написать input_env.depServer в качестве аргумента для задания сборки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...