当我在GitHub上推送HCL(Terraform)时遇到了挂起错误

事件或现象

    • これまでTerraformのHCLファイルをAzure Reposでコード管理していたが、チームの意向でGitHubで管理することになった。

 

    ReposのコードをそのままGitHubにpushすると、Hung upのエラーが出てpushできなかった。
$ git push origin main
warning: auto-detection of host provider took too long (>2000ms)
warning: see https://aka.ms/gcm/autodetect for more information.
Enumerating objects: 76, done.
Counting objects: 100% (76/76), done.
Delta compression using up to 8 threads
Compressing objects: 100% (63/63), done.
error: RPC failed; curl 55 Send failure: Connection was reset
send-pack: unexpected disconnect while reading sideband packet
Writing objects: 100% (76/76), 81.75 MiB | 2.82 MiB/s, done.
Total 76 (delta 13), reused 0 (delta 0), pack-reused 0
fatal: the remote end hung up unexpectedly
Everything up-to-date

警告:自动检测主机提供商花费的时间过长 (>2000ms),导致误以为是网络问题而耽误了故障排除所需的时间…

得出结论

    • .terraform\providers の配下に保存されるプロバイダーのプラグインのサイズが大きすぎることが原因だった。

 

    .gitignoreで上記のディレクトリを例外にすることで解決した。

故障排除

更改缓冲区大小

暫時先搜索錯誤訊息,看起來在複製/推送大文件時可能出現緩衝區大小不足的情況,所以將大小調整為500MB。

 

$ git config http.postBuffer 524288000
$ git push origin master    
    (省略)
remote: error: File envs/dev/.terraform/providers/registry.terraform.io/hashicorp/azurerm/3.75.0/windows_amd64/terraform-provider-azurerm_v3.75.0_x5.exe is 194.77 MB; this exceeds GitHub's file size limit of 100.00 MB
remote: error: File envs/prod/.terraform/providers/registry.terraform.io/hashicorp/azurerm/3.65.0/windows_amd64/terraform-provider-azurerm_v3.65.0_x5.exe is 187.37 MB; this exceeds GitHub's file size limit of 100.00 MB
    (省略)

虽然还有错误出现,但是它告诉我,我正在推送的文件超过了GitHub的文件大小限制。根据官方文档,似乎超过100MiB的文件会被阻止!

在GitHub上,存储库有文件大小限制。如果想要添加或更新超过50 MiB的文件,Git会显示警告。更改将继续成功推送到存储库,但可能考虑删除提交以尽量减少对性能的影响。有关详细信息,请参阅”从存储库历史记录中删除文件”。

GitHub会阻止超过100 MiB的文件。

 

编辑.gitignore

使用Git LFS可以在GitHub上处理超过100MiB大小的文件,但是文件大小已经超过了限制,这些文件属于供应商插件,不需要进行Git管理,所以我在.gitignore中添加以下内容解决了这个问题。

**/.terraform/*

要跟踪超过此限制的文件,需要使用Git Large File Storage (Git LFS)。请参考”有关Git Large File Storage的信息”以获取详细说明。

由于Azure Repos中的提供商可以进行推送,因此单个文件的大小限制似乎不会是100MiB(虽然也不是无限制的…)。据Microsoft Learn上的说明,目前仓库大小限制为250 GB,推送大小限制为5 GB。(截止到2023年12月6日)

需要将存储库的大小限制在250 GB以下。要获取存储库的大小,请在命令提示符下运行”git count-objects -vH”命令,并查找名为”size-pack”的条目。

在大规模推动过程中,会使用大量的资源,导致服务的其他部分被阻塞或变慢。这种推动通常不能映射到常规的软件开发活动中。例如,有可能有人错误地提交了构建输出或VM映像。基于这样的原因,推动被限制在每次最多5GB。

 

总结

    Azure ReposからそのままGitHubに移行したらサイズ制限ではまった。

备考

在创建存储库时,如果选择使用.gitignore模板来排除Terraform,则无需考虑它,因为它已经被设置为例外项。

# Local .terraform directories
**/.terraform/*

# .tfstate files
*.tfstate
*.tfstate.*

# Crash log files
crash.log
crash.*.log

# Exclude all .tfvars files, which are likely to contain sensitive data, such as
# password, private keys, and other secrets. These should not be part of version 
# control as they are data points which are potentially sensitive and subject 
# to change depending on the environment.
*.tfvars
*.tfvars.json

# Ignore override files as they are usually used to override resources locally and so
# are not checked in
override.tf
override.tf.json
*_override.tf
*_override.tf.json

# Include override files you do wish to add to version control using negated pattern
# !example_override.tf

# Include tfplan files to ignore the plan output of command: terraform plan -out=tfplan
# example: *tfplan*

# Ignore CLI configuration files
.terraformrc
terraform.rc

可以在中国的主页上找到有关此问题的信息。

下面对提供商进行了详细解释。

 

广告
将在 10 秒后关闭
bannerAds