GitLab CI流水线中Terraform安装的unzip报错问题
GitLab CI中unzip Terraform包报错的解决思路
问题根源
报错unzip: 'terraform' exists but is not a regular file的核心原因是:GitLab CI会默认将项目仓库挂载到Job的工作目录中,如果你的仓库里已经存在名为terraform的非文件对象(比如目录、符号链接),unzip命令尝试覆盖它时就会失败。而本地执行正常是因为本地工作目录是干净的,没有同名冲突对象。
具体解决方法
提前清理冲突对象:在unzip前强制移除可能存在的
terraform对象,确保解压路径干净:- rm -rf terraform - unzip terraform_1.2.8_linux_amd64.zip - mv terraform /usr/bin/terraform - terraform version指定解压到临时目录:避免和工作目录的现有文件冲突,先解压到临时文件夹再移动二进制文件:
- wget https://releases.hashicorp.com/terraform/1.2.8/terraform_1.2.8_linux_amd64.zip - unzip terraform_1.2.8_linux_amd64.zip -d tf_temp_dir - mv tf_temp_dir/terraform /usr/bin/terraform - rm -rf tf_temp_dir terraform_1.2.8_linux_amd64.zip - terraform version改用Alpine包管理器安装:跳过手动下载解压的步骤,直接用apk安装指定版本的Terraform,更稳定且避免文件冲突:
step_1: stage: stage_x image: alpine/doctl:latest script: - apk add --no-cache terraform=1.2.8-r0 - terraform version清理仓库中的冲突对象:检查你的Git项目仓库,如果存在名为
terraform的目录或符号链接,直接删除该对象并推送到远程仓库,从根源消除冲突。
内容的提问来源于stack exchange,提问作者Deoxyseia
相关产品推荐
相关产品推荐

