升级Terraform至1.8.1后Jenkins容器中执行Terraform命令报错
问题原因及解决方案
核心原因
这个Exec format error几乎100%是Terraform二进制文件的CPU架构和Jenkins容器的架构不匹配导致的。比如你在M系列Mac(arm64架构)上下载了arm64版本的Terraform,但你的Jenkins容器是基于amd64(x86_64)的Linux镜像;或者反过来,容器是arm64,但你装了amd64的Terraform。
排查步骤
确认Jenkins容器的架构:
进入容器执行:uname -m输出
x86_64对应amd64架构,aarch64对应arm64架构。检查现有Terraform二进制的架构:
在容器里执行:file /usr/local/bin/terraform看输出里的架构描述,比如
ELF 64-bit LSB executable, x86-64或ELF 64-bit LSB executable, ARM aarch64,对比和容器架构是否一致。
解决方案
临时修复(直接在运行的容器中操作)
- 删除容器里的错误Terraform二进制:
rm /usr/local/bin/terraform - 去HashiCorp Terraform官方发布页面,下载对应容器架构的Linux版本Terraform 1.8.1:
- 容器是amd64架构:下载
terraform_1.8.1_linux_amd64.zip - 容器是arm64架构:下载
terraform_1.8.1_linux_arm64.zip
- 容器是amd64架构:下载
- 把下载好的zip文件传到Jenkins容器里:
docker cp /本地下载路径/terraform_1.8.1_linux_xxx.zip 你的Jenkins容器名:/tmp/ - 进入容器,解压并安装:
cd /tmp unzip terraform_1.8.1_linux_*.zip mv terraform /usr/local/bin/ chmod +x /usr/local/bin/terraform - 验证:
正常会输出Terraform 1.8.1的版本信息。terraform --version
永久修复(优化Jenkins镜像构建过程)
以后构建自定义Jenkins镜像时,自动匹配架构下载Terraform,避免手动出错。在Dockerfile中添加以下内容:
# 自动获取当前镜像的架构 ARG ARCH=$(dpkg --print-architecture) # 根据架构选择对应版本的Terraform下载包 RUN case ${ARCH} in \ amd64) TERRAFORM_PACKAGE="terraform_1.8.1_linux_amd64.zip" ;; \ arm64) TERRAFORM_PACKAGE="terraform_1.8.1_linux_arm64.zip" ;; \ *) echo "Unsupported architecture: ${ARCH}" && exit 1 ;; \ esac && \ wget https://releases.hashicorp.com/terraform/1.8.1/${TERRAFORM_PACKAGE} && \ unzip ${TERRAFORM_PACKAGE} && \ mv terraform /usr/local/bin/ && \ rm ${TERRAFORM_PACKAGE} && \ chmod +x /usr/local/bin/terraform
内容的提问来源于stack exchange,提问作者Assaf
相关产品推荐
相关产品推荐

