在持续集成期间失去连接

时间:2016-01-27 10:03:53

标签: jenkins ssh continuous-integration digital-ocean connection-timeout

我正在使用DigitalOcean水滴进行持续集成。

每当有人在我们的Github存储库上推送某些东西时,就会创建一个Droplet。然后Jenkins(在一个独立的Droplet上)通过ssh连接到新创建的droplet并启动一个shell脚本来构建和测试项目。

Github更改 - >詹金斯(在液滴A上) - >构建/测试(在新的Droplet X上)

Github更改 - >詹金斯(在液滴A上) - >构建/测试(在新的水滴Y上)

Github更改 - >詹金斯(在液滴A上) - >构建/测试(在新的液滴Z上)

问题是随机地,新创建的Droplet正在失去与构建期间尝试连接的任何内容的连接。例如,具有相同内容的2/10个小滴在使用此消息的“git pull”命令期间将失败:

"ssh: connect to host github.com port 22: Connection timed out"

"[ComposerDownloaderTransportException] The "https://api.github.com/repos/symfony/symfony/zipball/d3646cc6875c214d211001e0673ec9e91b5f2da7" file could not be downloaded: failed to open stream: Connection timed out "

没有iptables规则,并且没有在这些飞沫上启用UFW。什么可以随机阻止与这些服务的连接?

有什么建议吗?

[编辑]

澄清

  • 它在构建期间随机发生,第一个'git clone'命令可能成功,但另一个'git clone'可能在2分钟后失败。

1 个答案:

答案 0 :(得分:0)

我的git repos遇到了同样的问题。如果任何git命令失败,我创建了一个最多尝试5次的脚本。

下面是我的脚本git_retry 示例:

git_retry clone <clone_url>

脚本:

#!/bin/bash

MAX_RETRY_COUNTER=5
RETRY_SLEEP=10

try_number=0

while ! git $@
do
  if try_number=`expr $try_number + 1` && [ "$try_number" -lt $MAX_RETRY_COUNTER ];
  then
    echo "Warning: Issue during git operation. Try $try_number. Retrying in $RETRY_SLEEP seconds..."
    sleep $RETRY_SLEEP
    echo
  else
    echo "Error: Issue during git operation. Try $try_number..."
    echo
    exit 1
  fi
done