如何解决具有Terraform映射变量的Jenkins参数化作业
我正在尝试将用户定义的参数从Jenkins输入到运行terraform的作业中。我有一组简单的键/值变量,我将其传递给Terraform,如下所示:
sh "terraform plan -var 'var1=${params.Var1}' -var 'var2=${params.Var2}' ...."
但是,我也有一个地图变量:
tags = {
Cluster = "mycluster"
Environment = "myenv"
Owner = "owner"
Product = "myproduct"
}
,我想将一些String参数输入此映射变量中。看来我需要定义一个普通的地图,然后将该地图呈现为JSON,这样我才能拥有terraform -var 'tags={"Cluster":"mycluster","Environment":"dev"...}
我的工作目前为以下形式:
pipeline {
agent {
...
}
options {
...
}
environment {
...
}
stages {
stage('MyStage') {
steps {
script {
sh "terraform ..."
}
}
}
}
}
我对Jenkinsfiles还是很陌生,所以如果需要的话,我应该在哪里定义地图??
解决方法
您在问题中的尝试接近完成,但是Groovy中的Maps是用[:]
构建的。因此,您可以使用JSON构造Jenkins Pipeline Map类型的输出,以将其传递给Terraform Map类型,如下所示:
terraform -var "tags=${JsonOutput.toJson(['Cluster':'mycluster','Environment':'dev'...])}"
鉴于您使用上面的sh
步骤方法,您还需要转义引号,以正确地正确转换字符串。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。