【问题标题】:How to iterate an array parameter in groovy如何在groovy中迭代数组参数
【发布时间】:2019-10-15 07:23:35
【问题描述】:

假设我们有多个环境,例如 dev1、dev2、dev3、qat1、qat2、stg、prod,并且我已经在 J​​enkins Pipeline 中配置了多选参数。 我已将所选参数保存在数组中

env = [ dev1, dev3, qat2] 

如何在下面的函数中一个接一个地迭代这些参数

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}"  
}

这样我就不会有任何重复的代码。 目前我对所有选定的环境使用单个选择参数和 if else 语句,这使我的代码大约有 500 行。我想通过使用 for 循环来最小化代码并一一迭代选定的参数。

【问题讨论】:

  • 您可以使用 groovy 迭代技术来迭代数组

标签: arrays loops groovy jenkins-pipeline devops


【解决方案1】:

不要将本地变量用于此类任务(请注意,这可以按照您的意愿工作,但恕我直言,这是一种令人费解的方式)。

改为使用映射来存储环境键和 url 之间的关系。

例如

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

如果您的网址与环境名称直接相关,您甚至可以生成地图:

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

【讨论】:

  • 应该def url = envs[env]def url = envs['env1'](注意单引号和env1env)?
  • OP 的第一句与第一行代码让我选择了一个“更好的命名”。我会澄清的
  • 您所做的更改使代码现在可以工作。原来的代码不会。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-26
  • 1970-01-01
  • 2011-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多