加速CI/CD中Terraform制品传输的方案咨询
加速GitHub Actions中Terraform Plan制品上传/下载的方法
在保留「PR阶段生成plan、合并后复用该plan执行apply」流程的前提下,核心优化方向是大幅缩小上传的制品体积,以下是具体可行的方案:
1. 仅上传Terraform Plan文件本身(最有效)
当前配置上传了整个目录(除部分排除项),但实际上terraform apply只需要terraform plan -out生成的单个plan文件——其他文件(如Terraform配置、模块等)在主分支的apply Job中已经存在,完全不需要上传。
修改plan.yaml的上传路径,直接指向生成的plan文件:
- name: "Upload Plan" uses: actions/upload-artifact@v3 with: name: terraform-plan if-no-files-found: error # 改为error,确保plan文件存在才上传,避免无效制品 path: plan # 替换为你的plan文件实际路径,比如${{ steps.terraform.outputs.upload-base-path }}/plan compression-level: 9 # 启用最高压缩进一步缩小体积
对应的apply.yaml下载后,直接用该文件执行apply:
- name: "Download Artifact" uses: actions/download-artifact@v3 with: name: terraform-plan path: ./ # 下载到当前目录,方便直接执行terraform apply plan
这样上传的文件体积从仓库级降到KB/MB级别,上传下载时间会从20分钟缩短到几秒。
2. 优化制品上传的压缩策略
如果确实需要上传少量额外文件,可通过compression-level参数启用最高压缩,进一步减少传输体积。如上面的示例,添加compression-level: 9即可,这是actions/upload-artifact@v3支持的参数,能显著压缩文本类文件的体积。
3. 排除更多冗余文件(可选)
若因特殊原因必须上传目录,检查当前排除规则是否足够,可额外排除:
- 日志文件(
*.log) - 临时文件(
*.tmp) - 本地配置文件(
.terraformrc、terraform.rc) - 文档类文件(
README.md、docs/目录)
修改plan.yaml的path规则:
path: | ${{ steps.terraform.outputs.upload-base-path }} !.git !${{ inputs.environment-name }}/.terraform/providers !*.log !*.tmp !.terraformrc !docs/
但仍优先推荐方案1,这是从根源解决体积过大问题的最优解。
内容的提问来源于stack exchange,提问作者jipot
相关产品推荐
相关产品推荐

