我正在使用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。什么可以随机阻止与这些服务的连接?
有什么建议吗?
[编辑]
澄清
答案 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