说我有一个不错的git服务器(源代码回购)。我想将代码推送到50个websevers,我可以按顺序执行以下 :
#!/bin/bash
for i in {1..50}
do
ssh root@websever$i '(cd /var/www/project; git pull)'
done
问题: 有没有一种简单的方法可以将代码推送到50个并行的websevers ?感谢。
答案 0 :(得分:2)
这个similar question可能是相关的(建议使用Bash子shell或GNU并行实用程序)。
我假设您想要使用git“安装”代码以实现50个盒子,并且您可能必须在重新启动Web服务器的情况下单独“部署”该代码。
我要提出的建议是,现在看起来可能不像项目的类型,但如果这个项目增长,那么构建“发布工件”(例如版本化的tar-ball或zip文件)将会变得更有利。而不是一直从分支头上拉。优点是您可以创建表示发布工件的二进制文件,如果出现问题,您可以轻松地回滚更改。
(旁白:您可能想要使用
ssh root@webserver$i "(cd /var/www/project; git pull)"
作为一个班轮。)
答案 1 :(得分:1)
你可以制作2个剧本
dogitjob.sh:
#!/bin/bash
ssh root@webserver$1 "(cd /var/www/project; git pull)"
main.sh
#!/bin/bash
for i in {1..50}
do
bash dogitjob.sh $i &
done
这些是非常基本的脚本,仅用于展示想法
aloso有一些像dsh或pssh这样的工具,它们被描述为here
答案 2 :(得分:1)
如果要尽可能快地跨多个服务器部署软件的更改和升级,则应该查看BitTorrent以将文件分发到大量服务器。
您可以阅读Twitter对distributed, large-scale code deployment和结帐Murder的方法的简要概述