簡體   English   中英

在 Jenkins 共享庫中定義全局變量

[英]Define global variable in Jenkins Shared Library

我在 /vars 中創建了一個包含許多功能的 Jenkins 共享庫。 其中,有一個devopsProperties.groovy有很多屬性:

class devopsProperties {

    //HOSTS & SLAVES
    final String delivery_host = "****"
    final String yamale_slave = "****"

    //GIT
    final Map<String,String> git_orga_by_project = [
        "project1" : "orga1",
        "project2" : "orga2",
        "project3" : "orga3"
    ]
    ...
}

我的共享庫中的其他函數使用這些參數。 例如, gitGetOrga.groovy

def call(String project_name) {
    devopsProperties.git_orga_by_project.each{
        if (project_name.startsWith(it.key)){
            orga_found = it.value
        }
    }
    return orga_found
}

但是現在,由於我們有很多環境,我們需要在管道的開頭加載 devopsProperties。 我在資源中創建屬性文件:

+-resources
 +-properties
  +-properties-dev.yaml
  +-properties-val.yaml
  +-properties-prod.yaml

並創建一個函數來加載它:

def call(String environment="PROD") {
    // load the specific environment properties file
    switch(environment.toUpperCase()) { 
        case "DEV": 
            def propsText = libraryResource 'properties/properties-dev.yaml'
            devopsProperties = readYaml text:propsText
            print "INFO : DEV properties loaded" 
            break
        case "VAL":
            def propsText = libraryResource 'properties/properties-val.yaml'
            devopsProperties = readYaml text:propsText
            print "INFO : VAl properties loaded" 
            break
        case "PROD": 
            def propsText = libraryResource 'properties/properties-prod.yaml'
            devopsProperties = readYaml text:propsText
            print "INFO : PROD properties loaded" 
            break
        default:
            print "ERROR : environment unkown, choose between DEV, VAL or PROD"
            break
    }
    return devopsProperties
}

但是當我嘗試在管道中使用它時:

@Library('Jenkins-SharedLibraries')_

devopsProperties = initProperties("DEV")

pipeline {
    agent none
    stages {
        stage("SLAVE JENKINS") {
            agent {
                node {
                    label ***
                }
            }
            stages{
                stage('Test') {
                    steps {
                        script {
                            print devopsProperties.delivery_host // THIS IS OK
                            print devopsProperties.git_orga_by_project["project1"] // THIS IS OK
                            print gitGetOrga("project1") //THIS IS NOT OK
                        }
                    }
                }
            }
        }
    }
}

最后一次打印產生錯誤: groovy.lang.MissingPropertyException: No such property: devopsProperties for class: gitGetOrga

如何在我的所有 Jenkins 共享庫函數中使用全局變量? 如果可能的話,我寧願不在所有函數的參數中傳遞它。

您需要在gitGetOrga.groovy中導入您的課程

import path/to/devopsProperties.groovy;

def call(String project_name) {
    devopsProperties.git_orga_by_project.each{
        if (project_name.startsWith(it.key)){
            orga_found = it.value
        }
    }
    return orga_found
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM