Jenkins groovy 动态创建变量 - 出了什么问题

问题描述 投票:0回答:1

这是 Jenkins Groovy 脚本,其中..下面正在工作..在“验证 - line0”阶段,内容被正确返回。

        stage('Read and assign value Groups') {
            steps{
                script {
                def build_properties = readProperties file: "file.txt"
                image_properties.line0 = build_properties.line0
                }
            }
        }

        stage('validating  - line0') {
            steps{
                script {
                     container("${opts.container}") {
                         println("Content: ${image_properties.line0}")

                     }
                    
                }
            }
        }

但是,我们如何让它们变得动态呢?下面这个不起作用。不起作用的是,在“validating - line0”阶段,内容打印“null”。有什么问题请指教。我们想要动态创建变量并将值分配给其他阶段。

        stage('Read and assign value Groups') {
            steps{
                script {
                TotalCountline = sh ( script: 'cat file.txt|wc -l', returnStdout: true).trim().toInteger()
                def build_properties = readProperties file: "file.txt"
                for(i=0;i<TotalCountModelGroup;i++) {
                    def var1="image_properties.line$i"
                    def var2="build_properties.line$i"
                   println (var1 + "="+ var2)
                    var1 = var2
                   
                }
                }
            }
        }

        stage('validating  - line0') {
            steps{
                script {
                     container("${opts.container}") {
                         println("line Content: ${image_properties.line0}")

                     }
                    
                }
            }
        }

并且

file.txt
包含


line0=[acme01, acme02, acme03, acme04]
line1=[acme11, acme12, acme13, acme14]
line2=[acme21, acme22, acme23, acme24]
line3=[acme31, acme32, acme33, acme34]

这是在全局声明的,位于“pipeline{}”之前

def (image_properties, branch) = [ [image_tags:[]], null ]
groovy jenkins-groovy
1个回答
0
投票

readProperties返回一个java Map(键值对) 您可以使用以下代码迭代它:

def (image_properties, branch) = [ [image_tags:[]], null ]
def build_properties = readProperties file: "file.txt"
build_properties.each{ k,v ->
    image_properties[k]=v
}

或者它可以更简单,因为 image_properties 也是一个 Map:

def (image_properties, branch) = [ [image_tags:[]], null ]
def build_properties = readProperties file: "file.txt"
image_properties.putAll(build_properties)

javadoc Map.putAll(Map)

© www.soinside.com 2019 - 2024. All rights reserved.