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

Terragrunt环境中TFENV_AUTO_INSTALL并发安装Terraform的竞态问题

Terragrunt+tfenv并发安装Terraform版本的竞态条件问题及解决方法

问题描述

在Terragrunt仓库中使用TFENV_AUTO_INSTALL环境变量时,多版本Terraform的并发安装会触发竞态条件,导致tfenv在并行流水线作业中安装多个Terraform版本时出现权限拒绝错误。

仓库结构示例

dev-account01
├── eu-west-1
│   ├── iam_roles
│   │    ├──  .terraform-version
│   │    ├──  main.tf
│   ├── networking
│   │    ├── .terraform-version
│   │    ├── main.tf

各模块使用不同的Terraform版本:1.6.2和1.5.5,实际环境包含更多区域、模块及账号。

错误信息

/home/user/.tfenv/lib/tfenv-exec.sh: line 43:  /home/user/.tfenv/versions/1.6.2/terraform: Permission denied
/home/user/.tfenv/lib/tfenv-exec.sh: line 43: exec: /home/user/.tfenv/versions/1.6.2/terraform: cannot execute: Permission denied

可复现场景

  • 在Terragrunt仓库中启用TFENV_AUTO_INSTALL;
  • 触发包含多个作业/计划的流水线,尝试安装多个未使用过的Terraform版本。

期望行为

TFENV_AUTO_INSTALL应能优雅处理并发安装或按顺序执行,避免竞态条件与权限拒绝错误。或提供序列化各账户Terraform模块版本安装的方法。

解决方案示例脚本

#!/bin/bash

LOCK_FILE="/tmp/tfenv-wrapper.lock"
MAX_CONCURRENT_PROCESSES=1

# 获取锁
function acquire_lock() {
  while true; do
    exec 202>"$LOCK_FILE"
    flock -n 202 && break
    echo "已有脚本实例在运行,等待其完成..."
    sleep 5
  done
}

# 释放锁
function release_lock() {
  flock -u 202
  rm -f "$LOCK_FILE"
}

# 检查正在运行的tfenv install进程数
function check_tfenv_processes() {
  pgrep -f "tfenv install" | grep -v $$ | wc -l
}

# 主循环
while true; do
  # 获取锁
  acquire_lock

  # 检查进程数
  num_processes=$(check_tfenv_processes)

  # 若进程数达到上限则等待
  while [ "$num_processes" -ge "$MAX_CONCURRENT_PROCESSES" ]; do
    echo "已达到'tfenv install'最大并发数,等待进程完成..."
    sleep 5
    num_processes=$(check_tfenv_processes)
  done

  # 此处添加实际业务逻辑
  echo "脚本正在运行..."

  # 释放锁
  release_lock
done

当前工作空间

atlantis-git-test-0:/$ ls -l /atlantis-data/repos/orga/infra-test/4
total 24
drwx--S---    5 atlantis atlantis      4096 Jan  8 10:00 default
drwx--S---    5 atlantis atlantis      4096 Jan  8 10:00 environments_eks-dev-1_09_eks
drwx--S---    5 atlantis atlantis      4096 Jan  8 10:00 environments_eks-dev-1_11_r53_zones
drwx--S---    5 atlantis atlantis      4096 Jan  8 10:00 environments_eks-dev-1_13_irsa
drwx--S---    5 atlantis atlantis      4096 Jan  8 10:00 environments_eks-dev-1_15_vault
drwx--S---    5 atlantis atlantis      4096 Jan  8 10:00 environments_eks-staging-1_11_r53_zones

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 21:30:29