这个解决方案建立在 E_p 的想法之上。E_p 说问题是你需要在某个地方维护一个服务器列表,以便告诉每个服务器拉新的更新。如果是我,我会在 ec2 中使用标签来帮助识别一组服务器(例如“Role=WebServer”)。这样您就可以使用 ec2 命令行界面列出实例并在每个实例上运行 pull 命令。
for i in \
`ec2din --filter "tag-value=WebServer" --region us-east-1 \
| grep "running" \
| cut -f17`\
; do ssh $i "cd /var/www/html && git pull origin"; done
注意:我已经测试了获取所有标记实例的 IP 地址并通过 ssh 连接到它们的代码,但没有测试特定git pull
命令。
您需要将亚马逊 cli 工具安装在您希望它运行的任何位置,以及为您尝试更新的服务器安装的 ssh 密钥。不确定 bitbucket 的功能是什么,但我猜这段代码将无法在那里运行。您要么需要按照 E_p 的建议进行操作,并将更新推送到单独的管理实例,然后将此代码包含在您的 post-commit 挂钩中,或者如果您想避免头痛,您可以像我所做的那样只安装本地计算机上的 CLI 工具,并在您想要部署更新时手动运行它。
感谢 AdamK 对另一个问题的回答,这使得从ec2din
输出中提取 ip 地址并迭代结果变得很容易:如何从命令行中终止我的所有 EC2 实例?
EC2 CLI 工具参考:http ://docs.aws.amazon.com/AWSEC2/latest/CommandLineReference/Welcome.html