【问题标题】:Azure Jenkins Pipeline: Bad Pack Header Build Failures During Azure Web App Publish StageAzure Jenkins Pipeline:Azure Web App 发布阶段的错误包标头构建失败
【发布时间】:2020-02-05 16:27:22
【问题描述】:

情况
我使用 Microsoft 提供的解决方案模板安装了 Jenkins,并在 Azure 上创建了一个相当基本的 Jenkins 管道作业。该作业目前从我在 GitHub 上的个人 Git 存储库中获取代码,执行一些简单的操作,压缩一些构建文件,尝试将 zip 文件部署到我的 WebApp。

我已确保 zip 文件中包含完全相同的文件集,因此 zip 文件的大小始终保持几乎相同。

准备发布时,它会使用 Azure 所需的所有正确参数调用 azureWebAppPublish 函数(Azure 应用服务的一部分:https://plugins.jenkins.io/azure-app-service)。对于一些工作运行,一切正常,我可以通过 SSH 连接到我的 Web 应用程序并查看我的 zip 文件 - 很棒。但是,一段时间后,它开始变慢并最终中断。

azureWebAppPublish 调用期间,以下内容作为标准记录到控制台。

Starting Azure Web App Deployment
Cloning repository https://<my-web-app-name>.scm.azurewebsites.net:443/<my-web-app-name>.git
 > git init /var/lib/jenkins/workspace/<my-jenkins-pipeline-name>/.azure-deploy # timeout=30
Fetching upstream changes from https://<my-web-app-name>.scm.azurewebsites.net:443/<my-web-app-name>.git
 > git --version # timeout=30
using GIT_ASKPASS to set credentials 
 > git fetch --tags --progress https://<my-web-app-name>.scm.azurewebsites.net:443/<my-web-app-name>.git +refs/heads/*:refs/remotes/origin/* # timeout=30

问题
在相对较新的 WebApp(即之前没有部署)上,上述代码 sn-p 的最后一行中看到的 git fetch --tags 操作运行得相当快。但是,在多次部署到同一个 WebApp 之后,每次都开始花费越来越长的时间。在我完成的其他测试中,这已经持续了 30 分钟,这显然是不可取的。

问题 1: 为什么git fetch --tags 每次执行都需要更长的时间,这可以防止吗?我假设这是由于 Azure 为非 Java 应用程序执行的 Git 部署,但它真的会导致时间大幅增加吗?

以下是支持这一点的一些结果。

部署 1:2m 25s(由于创建 WebApp 导致冷启动,假设一次性)
部署 2:1m 26s
部署 3:1m 37s
部署 4:1m 58s
部署 5:2m 13s
部署 6:2m 49s
部署 7:3m 17s
部署 8:6m 56s
部署 9:8m 3s (失败)
部署 10:9m 3s (失败)

如上图,有两个失败。任何在 Deployment 10 之后运行的作业也会导致相同的错误以及不断增加的执行时间。全部失败并显示相同的错误消息:

hudson.plugins.git.GitException: Command "git fetch --tags --progress https://<my-web-app-name>.scm.azurewebsites.net:443/<my-web-app-name>.git +refs/heads/*:refs/remotes/origin/*" returned status code 128:
...
remote: Compressing objects: n% (x/y)
...
fatal: The remote end hung up unexpectedly
fatal: protocol error: bad pack header

问题 2:为什么随着git fetch --tags 调用所用时间的增加,这个坏包头错误会频繁发生?

感谢任何和所有关于此的帮助/解释,因为我对 Azure/DevOps 很陌生。非常感谢!

到目前为止我已经尝试过什么

  • 将标准 git 操作的超时时间从 10m 增加到 30m (org.jenkinsci.plugins.gitclient.Git.timeOut)
  • 增加了克隆操作的超时时间(高级克隆行为)并增加了检出操作的超时时间(高级检出行为)
  • 将浅克隆设置为真,深度为 1
  • 在我的 Jenkins VM 中添加了以下 git 配置设置:Git pull fails with bad pack header error
  • 在 git fetch (git tag | wc -l) 的结果后检查 Jenkins 管道工作区中的标签数量,它报告只有 9 个

【问题讨论】:

    标签: git azure jenkins jenkins-pipeline azure-web-app-service


    【解决方案1】:

    TL;DR - 快速回答
    这对我来说是通过升级(扩大)我的应用服务计划来解决的(请参阅:https://azure.microsoft.com/en-gb/pricing/details/app-service/linux/)。原来是在B1,升级到B3,问题就消失了。

    更长的答案
    Azure 网络聊天非常有用,发现我的 WebApp 的平均负载很高,建议我同时升级 Jenkins VM 和应用服务计划。

    两者都做完后,部署速度立即下降。现在,部署一直在工作,每次只需要多花 10 秒,这很棒。我决定进一步测试,发现 Jenkins VM 升级与 App Service Plan 升级相比影响不大。此后,我缩减了 Jenkins VM 以使用 B1ms 计划(1 个 vCPU 和 2GB 的 RAM)并且它运行良好。

    根据这次经验,由于每个作业的运行时间越来越长。我建议将标准 git 操作的超时时间从 10m 增加到更大的值(通过设置 org.jenkinsci.plugins.gitclient.Git.timeOut 完成),如上所述。我无法评论我上面列出的任何其他项目是否有很大的影响,但如果您遇到类似的问题,请尝试一下。

    非常感谢 Azure 支持团队的 Prem

    【讨论】:

      猜你喜欢
      • 2016-08-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-11
      • 2019-01-02
      • 2015-06-16
      • 2022-10-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多