【问题标题】:Jenkins Intermittent Hangs on git clone/checkout from github on pipeline jobsJenkins 间歇性挂起 git clone/checkout 从 github 进行管道作业
【发布时间】:2017-09-01 19:15:51
【问题描述】:

你有没有看到这个问题的解决方案或调查想法:

  • 使用来自 GitHub SCM 的 Pipeline 的 jenkins 管道作业在克隆/结帐时间歇性挂起
  • jenkins 日志中没有任何关于这种情况的报告
  • 似乎只在我们有大量活动时才会发生(通常在 sprint 演示之前)
  • 一段时间后清除 - 尚未检测到太多模式

    签出 git git@github.com:MyTeam/myproject 到 /var/lib/jenkins/jobs/myproject-dev-deploy/workspace@script 读取 deploy/dev-Jenkinsfile git rev-parse --is-inside-work-tree # timeout=10 从远程 Git 存储库获取更改 git config remote.origin.url git@github.com:MyTeam/myproject # timeout=10 从 git@github.com:MyTeam/myproject 获取上游更改 git --version # timeout=10 使用 GIT_SSH 为 myproject 设置凭据部署密钥 git fetch --tags --progress git@github.com:MyTeam/myproject +refs/heads/:refs/remotes/origin/```

【问题讨论】:

    标签: github jenkins-pipeline


    【解决方案1】:

    Java 应用程序中出现可怕的间歇性问题?到我们去的JVM设置。幸运的是 CloudBees 写了一篇很棒的文章 Tuning Jenkins GC For Responsiveness and Stability with Large Instances

    原来这不是主要因素。真正的原因是网络配置和备份作业对饱和度的影响。不过,一篇很棒的文章。

    这是我们调试它的方式:

    `

    #!/usr/bin/env bash
    
    echo Clearing Previous Run
    rm -rf /tmp/debug-repo-http
    rm -rf /tmp/debug-repo-ssh
    
    echo clone1: `date`
    time git clone https://github.com/github/debug-repo /tmp/debug-repo-http
    
    echo clone2: `date`
    time git clone git@github.com:github/debug-repo /tmp/debug-repo-ssh
    
    echo Ping: `date`
    time ping -c 10 github.com
    
    #echo traceroute: `date`
    #traceroute github.com
    
    • 设置 jenkins 作业以尝试结帐,如果花费超过 30 秒则失败并报告 - 一次通过管道 + 插件,一次通过 shell 脚本

    • 开始运行各种测试:转储所有 docker 镜像并重新拉取、s3 拉取备份、s3 推送备份等。

    • 在另一个网络区域重复测试并比较结果

    【讨论】:

    • 问题在于git clone 与scm checkout 的代码并不完全相同。我相信我们尝试过测试,虽然原生还可以,但管道结帐却不行。
    【解决方案2】:

    我通过 git clone 命令遇到了这个问题,我花了 2 天时间解决了这个问题。 如果你在 jenkins 上通过 windows shell/batch 运行 git 命令,可能是 git ssh key issue...

    Jenkins windows shell 或 batch command 将使用 'system' 帐户来处理 git 命令,其 ssh 密钥设置与您的 gerrit 不同插件或登录帐户。


    A.不同的 git ssh 密钥路径

    “system”帐户的 git ssh 密钥设置在以下路径:

    • C:\Windows\System32\config\systemprofile\.ssh
    • C:\Windows\SysWOW64\config\systemprofile\.ssh

    您可以在这些路径中检查系统帐户的 ssh 密钥。


    B.在 know_host 文件中注册密钥

    Jenkins 不会自动将已知主机的新密钥导入到您的 know_host 文件中。 您可以通过以下步骤手动完成:

    1. 在 Windows 中登录您的本地帐户
    2. SSH这个git远程路径直接ssh <git remote web site> -p <port>,输入yes注册key

    3. 复制本地账户know_host(C:\Users\.ssh)注册的密钥,你会看到文件底部喜欢:

    [gerrit.cartography.com]:29168,[10.25.174.78]:29418 SSH-RSA AAAAB3NzaC1yc2EAASSSSAQABAAAAgQDPHbDKCHL3oPbzDn3qaVZR8S1EZx / rb500Th / fjQYg5jrJ7PBMVVUyNTpJ2moje5hLYjNsVtXtcoNEZjImGul2dl3f + eHrCB27X5198jr8Wj66I / xsQCLEngd7l3velsdfgd3432fsdDiFaE9INjDjgngfNzlFA + CYpFsnaorZ6XSPQ == P>

    1. 粘贴到“系统”know_host文件。

      • C:\Windows\System32\config\systemprofile\.ssh
      • C:\Windows\SysWOW64\config\systemprofile\.ssh

    我想你现在会解决你的问题! 尽情享受吧!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-28
      • 2012-02-03
      • 1970-01-01
      • 2012-03-23
      • 1970-01-01
      • 2017-09-16
      • 1970-01-01
      • 2016-09-03
      相关资源
      最近更新 更多