【发布时间】: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