You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为目录列表并行执行Terraform命令?

实现Terraform目录操作的并行执行

你可以通过在script块内构建并行任务映射来实现多目录Terraform操作的并行执行,Jenkins的parallel函数支持在script块中使用,核心是把每个目录的操作封装为独立闭包,再交给parallel调度。

修改后的完整流水线代码

pipeline {
    agent {
        docker { 
            image 'hashicorp/terraform:latest' 
            args '--entrypoint="" --platform linux/amd64'
        }
    }             
    stages {
        stage('Parallel Terraform Validate') {
            steps {
                script {
                    // 获取modules下的一级目录名称列表
                    def directories = getDirectories("${WORKSPACE}/modules/")
                    // 构建并行任务映射
                    def parallelTasks = [:]
                    
                    directories.each { dirName ->
                        parallelTasks["Process ${dirName}"] = {
                            dir(dirName) {
                                sh 'terraform init'
                                sh 'terraform validate'
                            }
                        }
                    }
                    
                    // 执行所有并行任务
                    parallel parallelTasks
                }
            }
        }
    }
}

@NonCPS
def getDirectories(path) {
    def dir = new File(path)
    def dirNames = []
    dir.traverse(type: groovy.io.FileType.DIRECTORIES, maxDepth: 0) { d ->
        dirNames.add(d.name) 
    }
    return dirNames
}

关键调整说明

  • 并行任务构建:创建parallelTasks映射,键是任务名称(方便流水线UI识别),值是包含目录操作的闭包
  • 目录名称传递:修改getDirectories返回目录名称字符串,而非File对象,避免Jenkins序列化问题
  • 移除无用参数:原docker args中的-d是后台启动容器,Jenkins docker agent会自己管理容器生命周期,无需该参数

额外注意事项

  • 如果每个目录的Terraform操作资源占用较高,可考虑将agent配置移到并行任务内部,让每个任务使用独立容器(需要调整流水线结构为agent none,然后在闭包内定义agent)
  • 并行任务数量受Jenkins节点的CPU/内存限制,可根据实际资源调整,避免节点过载

内容的提问来源于stack exchange,提问作者EV20

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 11:17:20