Jenkins管道环境部分未串行执行



在执行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和requester的值。但以dummy开头的行发生在NAMESPACE请求者行之后。同样的话早些时候也起作用了。如果我删除requester=或APPOPS_ROLE=,那么一切都会好起来。请帮忙了解这里发生了什么。当我工作时,我可以通过配置作业将APPOPS_ROLE作为jenkins中的一个参数。这也与变量的情况有关。如果我做假人--->假人会有不同的。Jenkins版本2.204.2关于openshift 3.11

我不知道为什么排序没有定义。也许赋值首先存储在哈希表中,然后枚举哈希表,这将导致看似随机的顺序。

作为一种变通方法,您可以将环境初始化转移到一个阶段,在那里您可以使用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'){
...
}
}
}

最新更新