簡體   English   中英

如何將數組分配給Jenkinsfile中的Env變量

[英]How to assign an array to a Env variable in Jenkinsfile

我正在嘗試運行具有多個服務器的管道。 選擇選擇參數時,我想一次在多個服務器中執行一些操作。 我的想法是 select 選擇參數“應用程序”並在 4 個不同的服務器上順序執行一些操作(一次一個服務器)。 我正在嘗試將分配服務器值的環境變量放在一個數組中,然后要求環境變量執行操作。

pipeline {
    agent {
        node {
            label 'master'
        }
    }

    environment {

        APPLICATION = ['veappprdl001','veappprdl002','veappprdl003','veappprdl004']
        ROUTER = ['verouprdl001','verouprdl002']

    }

        parameters {
        choice(name: 'SERVER_NAME', choices: ['APPLICATION','ROUTER'], description: 'Select Server to Test' )
    }

    stages {

         stage ('Application Sync') {

            steps {
                script {                                
                    
                        if (env.SERVER_NAME == 'APPLICATION') { 
    
                
                sh """

                    curl --location --request GET 'http://${SERVER_NAME}//configuration-api/localMemory/update/ACTION'

                """
                        }
                }
            }
         }
    } }

如果在“使用參數構建”中選擇了“APPLICATION”參數,我想在“APPLICATION”變量的所有服務器上執行該操作。

任何幫助將不勝感激。

謝謝

您不能在環境變量中存儲數組類型的值。 無論您嘗試分配給 env 變量,都會自動轉換為字符串類型。 (我在下面的博客文章或這個視頻中更詳細地解釋了它。)所以當你嘗試分配一個數組時,你分配的是它的toString()表示。

但是,您可以以不同的方式解決此問題。 您可以使用公共分隔符存儲一串值(例如,例如),而不是嘗試分配數組。然后在期望使用元素列表的部分中,您只需調用tokenize(",")方法生成字符串元素列表。 有了它,您就可以迭代並按順序做事。

請考慮以下示例,該示例說明了此替代解決方案。

pipeline {
    agent any

    environment {
        APPLICATION = "veappprdl001,veappprdl002,veappprdl003,veappprdl004"
    }
    
    stages {
        stage("Application Sync") {
            steps {
                script {
                    env.APPLICATION.tokenize(",").each { server ->
                        echo "Server is $server"
                    }
                }
            }
        }
    }
}

當你運行這樣的管道時,你會得到這樣的東西:

在此處輸入圖像描述

暫無
暫無

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

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