简体   繁体   English

如何在 groovy 中迭代数组参数

[英]How to iterate an array parameter in groovy

Lets say if we multiple envs like dev1, dev2, dev3, qat1, qat2, stg, prod and I have configured multiselect parameters in Jenkins Pipeline.假设我们有多个环境,如 dev1、dev2、dev3、qat1、qat2、stg、prod,并且我在 Jenkins 管道中配置了多选参数。 I have saved the selected parameters in array我已将所选参数保存在数组中

env = [ dev1, dev3, qat2] 

How do I iterate these parameters one after one in below function如何在下面的 function 中一个接一个地迭代这些参数

def DockerPush() {

def artifactory_repo_dev1 = "artifactory.dev1.com"
def artifactory_repo_dev3 = "artifactory.dev3.com"
def artifactory_repo_qat2 = "artifactory.qat2.com"


//Docker Tag
sh "docker tag " + "docker-example" + " " + "artifactory_repo_$env" + ":" + version


//Docker Push to Artifactory
    sh "docker push " + "artifactory_repo_$env" + ":" + "${version}"  
}

So that I will not have any duplication of code.这样我就不会有任何重复的代码。 Currently I'm using single select parameter and if else statements for all the selected environments which made my code about 500 lines.目前我正在使用单个 select 参数和 if else 语句用于所有选定的环境,这使我的代码大约有 500 行。 I want to minimize the code by using a for loop and iterate the selected parameters one by one.我想通过使用 for 循环来最小化代码并一一迭代选定的参数。

Don't use local vars for such a task (note, that this can be made to work, like you want, but IMHO it's way to convoluted).不要使用本地变量来完成这样的任务(注意,这可以像你想要的那样工作,但恕我直言,这是令人费解的方式)。

Instead use a map to store the relation between environment key and url.而是使用 map 来存储环境密钥和 url 之间的关系。

Eg例如

def chosenEnv = 'env1'
def envToUrl = [env1: "some.url.for.env1.com"]
def url = envToUrl[chosenEnv]

If your urls correlate directly to the env name, you can even generate the map:如果您的网址与环境名称直接相关,您甚至可以生成 map:

def envToUrl = ["env1"].collectEntries{ [it, "some.url.for.${it}.com"] }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM