Jenkins-是否可以在jenkins文件中使用两种不同版本的terraform

时间:2019-12-18 08:14:59

标签: jenkins jenkins-pipeline terraform

当前,我们正在使用terraform 11,但我们想开始迁移到12。这个想法是逐个模块移动,这意味着某些模块将使用terraform版本11,而那些可以在12上运行的模块将使用版本12。 。 现在我的问题是,在我们的Jenkins文件中,我们有一个下载terraform 11的阶段,然后在不同阶段运行terraform,是否也可以下载terraform 12并有一些阶段然后使用11,而另一些使用12? / p>

stage('Download Terraform') {
      steps{
        sh "wget path/terraform/0.11.8/terraform-0.11.8.zip"
        sh "unzip -o terraform-0.11.8.zip"
        sh "rm terraform-0.11.8.zip"
      }
    }

stage('Create .terraformrc') {
      steps {
        sh "echo ~"
        writeFile file: "/home/user/.terraformrc", text: """
        credentials "" {
          token = ""
        }
  """
      }
    }

stage('Enable CloudTrail') {
      steps {
        {code}
        }
    }

stage('Create Automation Lambdas') {
      steps {
        {code}
        }
    }

在上面的示例中,我希望“启用Cloudtrail”阶段运行terraform 12,而“创建自动化Lambdas”阶段运行与terraform 11。

2 个答案:

答案 0 :(得分:0)

可以通过阶段级代理部分进行。在来自官方文档的声明式管道的示例示例中,“示例构建”阶段将完全在其自己的代理程序/环境中发生,而“示例测试”阶段将在其自身中完全发生:

pipeline {
    agent none 
    stages {
        stage('Example Build') {
            agent { docker 'maven:3-alpine' } 
            steps {
                echo 'Hello, Maven'
                sh 'mvn --version'
            }
        }
        stage('Example Test') {
            agent { docker 'openjdk:8-jre' } 
            steps {
                echo 'Hello, JDK'
                sh 'java -version'
            }
        }
    }
}

您可能拥有一个或多个低于v12的地形代理人/环境,而其他代理商/环境> = v12

答案 1 :(得分:0)

这就是我解决这个问题的方法(抱歉,如果这不是您所需要的):

  1. 安装terraform plugin

  2. 在 jenkins UI > 全局工具配置中添加多个 terraform 安装并以一致、可预测的方式命名它们:

enter image description here

  1. 在您的管道中,您现在可以“选择”要使用的版本:

    pipeline {
       agent { label terraformdevagent }
       environment {
         TF_HOME = tool('terraform-0.14.4')
         PATH = "$TF_HOME:$PATH"
     }}
    
    

You can make an optional parameter and a function that returns the parameter if not null and a hardcoded value if the parameter is null.

This way you can have hundreds of jobs under one TF version and still test in isolation the new version.

It can also let you handle exceptions and not block your rollouts because of a handful of projects that need to be refactored for the new version.

TF_HOME = tool( "${params.newTerraformVersion}?:'terraform-0.14.4'")