Секция среды конвейера Jenkins не выполняется серийно - PullRequest
0 голосов
/ 01 мая 2020

Я сталкиваюсь с некоторыми проблемами в разделе среды jenkins при выполнении раздела среды конвейера jenkins.

import groovy.transform.Field
@Field gitScriptPath = "https://raw.github.com/Innovation/"
@Field clrInfo
@Field gitlabMem       
@Field gitSubGroupURL        
@Field clrDuration
@Field cloudProvider
@Field userSpecData
@Field slackIntMes

pipeline {
    agent { label 'master' }
    environment {
    GITHUB_TOKEN = credentials('    GITHUB_TOKEN')
    GIT_URL = 'github.com/Innovation/exp-selling-iac.git'
    PRE_PROV = 'k8s-jobs/iac_preprovision.yaml'
    OS_PROV = 'k8s-jobs/iac_openshift.yaml'
    USER_PROV = 'k8s-jobs/rhos-user-onboard-offboard.yaml'
    ISTIO_PROV = 'k8s-jobs/iac_istio.yaml'
    KAFKA_PROV = 'k8s-jobs/iac_kafka.yaml'
    MONOLITH_PROV = 'k8s-jobs/iac_monolith.yaml'
    POST_PROV = 'k8s-jobs/iac_postprovision.yaml'
    DEVOPS_PROV = 'k8s-jobs/k8s_iac_devops.yaml'
    dummy = sh ( script: '''echo "${USER_SPEC}" > userspec.yaml''', returnStdout: true )
    NAMESPACE = sh ( script: "$JENKINS_HOME/custompath/yq r userspec.yaml Cluster.Name", returnStdout: true )
    requestor = sh ( script: "$JENKINS_HOME/custompath/yq r userspec.yaml Cluster.Users.User1.ID", returnStdout: true ).trim()
    APPOPS_ROLE = 'appops-customrole-v2'
   }
     stages {
      stage('Download - Groovy Scripts'){

Здесь нам нужно получить значение NAMESPACE и requestor после выполнения фиктивной переменной. Но строка, начинающаяся с фиктивной, происходит после NAMESPACE и requestor строк. Та же самая цитата работала ранее. Если я удалю requestor = или APPOPS_ROLE =, тогда все будет хорошо. Пожалуйста, помогите понять, что здесь происходит. В процессе работы я могу настроить APPOPS_ROLE в качестве параметра в jenkins, настроив задание. Это как-то связано со случаем переменной. ie если я сделаю дурачок ---> ДУМАЙ, это будет иметь значение. Дженкинс вер. 2.204.2 на openshift 3.11

1 Ответ

1 голос
/ 01 мая 2020

Я не знаю, почему заказ не определен. Возможно, назначения сначала сохраняются в таблице ha sh, а затем перечисляется таблица ha sh, что может привести к, по-видимому, случайному порядку.

В качестве обходного пути можно переместить инициализацию среды в этап, на котором вы можете использовать блок script для обеспечения порядка выполнения:

pipeline {
    agent { label 'master' }

    stages {
        stage('Initialize') {
            steps {
                script {
                    env.dummy = sh ( script: '''echo "${USER_SPEC}" > userspec.yaml''', returnStdout: true )
                    env.NAMESPACE = sh ( script: "$JENKINS_HOME/custompath/yq r userspec.yaml Cluster.Name", returnStdout: true )
                    env.requestor = sh ( script: "$JENKINS_HOME/custompath/yq r userspec.yaml Cluster.Users.User1.ID", returnStdout: true ).trim()
                    ...
                }
            }
        }
        stage('Download - Groovy Scripts'){
            ...
        }
    }
}
...