【问题标题】:Can I pass variables from the Jenkins into the terraform vars.tf?我可以将变量从 Jenkins 传递到 terraform vars.tf 吗?
【发布时间】:2020-10-13 07:49:10
【问题描述】:

我在阶段有一个 Terraform 代码,同样的代码也应该部署在另一个环境中。

问题是我正在传递 VPC ID、子网 ID、负载均衡器 DNS 以及侦听器 ARN、Route53 区域 ID 等。我已将所有这些作为变量从 vars.tf 传递。当相同的 Terraform 代码部署在另一个环境(在另一个 AWS 账户中)VPC ID、子网、负载均衡器......以及区域 ID 时,一切都会改变。但我只需要使用一个 Terraform 代码。

有什么方法可以在部署时将这些变量从 Jenkins 传递到我的 Terraform 中?

【问题讨论】:

  • 至少你能用你的 jenkinsfile 或 sn-p 吗?

标签: amazon-web-services variables jenkins jenkins-pipeline terraform


【解决方案1】:

您可以为此使用不同的变量文件 (.tfvars)。例如,这可能是您的用例的有效布局:

├── Makefile
├── README.md
├── route53.tf
├── iam.tf
├── ec2.tf
├── ...
├── env
│   ├── dev
│   │   └── us-east-1
│   │       └── variables.tfvars
│   ├── pro
│   │   └── us-east-1
│   │       └── variables.tfvars
│   └── tst
│       └── us-east-1
│           └── variables.tfvars

使用该结构只需根据您在 Jenkins 管道中部署的环境指定 .tfvars 目录,例如:

terraform plan --var-file=./env/${environment}/${region}/variables.tfvars

environmentregion 是您可以根据所需条件在 Jenkinsfile 中设置的变量,例如分支名称或其他内容。

【讨论】:

    【解决方案2】:

    根据我的个人经验。我会尽可能避免对 tfvar 进行硬编码,并通过变量驱动工作流。所以我遵循的模式是

    将所有称为它们的 terraform 资源模块化,例如。 “infra-modules”将它们放入 git repo。

    1. VPC、子网、nat 网关、internet 网关 -> 网络模块
    2. EC2 -> ec2 模块
    3. ECS -> ecs 模块
    4. Lambda -> lambda 模块

    创建了另一个名为“infra”的 git repo,并在该 repo 中为项目创建了一个文件夹,并在项目下为每个资源创建了 tf 文件。如下所示。

    - my-project (folder)
         - main.tf -> will have provider details and back-end details
         - network.tf -> will call network module
         - ec2.tf -> will call ec2 module
         - lambda.tf -> will call lambda module
     - backend.tfvars
     - jenkinfile  : In jenkinsfile I created map for my account config and pass the variable to terrform plan through TF_VAR. 
    
    TF_VAR_aws_account_id = "${myConfig[myEnv].accountId}"
    

    而 terraform 调用将是

    terraform plan -var="env=$myEnv" -out=".$myEnv.plan"
    

    这种模式的好处是,通过 tfvars 对变量的硬编码在模块和资源中是最小的,变量在一个地方(jenkinsfile)进行管理,并且可以跨不同项目和帐户重用 terraform 资源。

    【讨论】:

      猜你喜欢
      • 2020-11-21
      • 1970-01-01
      • 2021-06-20
      • 2019-11-22
      • 2021-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多