所以,我知道git钩子,并将在下一步,但要编写一个简单的bash脚本,通过cron运行,以保持远程服务器上的回购最新。 我想像这样工作:
我目前有这样的工作作为一个cron任务,看起来像:
*/1 * * * * cd /my/sites/staging && git pull -q origin master && grunt production
我试图避免运行我的咕build生成,如果没有任何改变。 我想这一切都归结为我怎么能告诉如果git拉实际拉什么东西,并使用它作为运行我的咕噜生成的条件。 Ubuntu服务器,密钥安装在github上,所有这些好东西。 谢谢你的帮助!
这两个问题(自动处理你的部署和避免无用的工作,例如,如果没有改变运行一个grunt任务)是什么git钩子是什么。
所以我的build议是完全摆脱cron任务,并尽快通过钩子切换到pipe理你的仓库。
通常这样做的方式在这里详细描述,基本上需要你有一个bare仓库(一个中心仓库)推/拉和从一个相同的回购(一个现场回购)的签出版本位于例如/srv/www/html 。
我喜欢使用gitolite3来处理集线器回购,但这不是必需的,但是如果需要的话,将精细的访问控制绑定到您select的LDAP是相当方便的。
通过sudo限制gitolite3用户的function也是一个好习惯,并且通过sudo调用来处理钩子。 这是一个使用gitolite3钩子的工作示例(随意调整它们,或者增强/修复它们以满足您的需求):
枢纽回购post-update挂钩:
#!/bin/sh echo "****" echo "**** Calling publisher-hub2live script [Hub's post-update hook]" echo "****" sudo /usr/local/sbin/publisher-hub2live "/srv/www/html" "root:apache" "2750" "640" exit 0
publisher-hub2live脚本:
#!/bin/sh echo "****" echo "**** Pulling changes into Live [publisher-hub2live]" echo "****" cd "$1" || exit umask 0022 unset GIT_DIR /usr/bin/git pull hub master # custom actions here # eg call grunt tasks /bin/chown -R "$2" "$1" /bin/find "$1" -type d -exec chmod "$3" {} + /bin/find "$1" -type f -exec chmod "$4" {} + /bin/chmod u+x "$1"/.git/hooks/post-commit /sbin/restorecon -R -v "$1" exec /usr/bin/git update-server-info exit 0
如果您在活动仓库的检出工作树中进行更改并想同步集线器,那么活动仓库post-commit钩子也可以使用。
这个基础设施需要在你的sudoers文件中有下列条目(或相当的条目):
Cmnd_Alias GITOLITE_CMDS = /usr/bin/git, /bin/chown, /bin/find, /bin/chmod, /sbin/restorecon, /usr/local/sbin/publisher-hub2live Defaults:gitolite3 !requiretty Defaults:gitolite3 lecture=never gitolite3 ALL = (root)NOPASSWD: GITOLITE_CMDS
此外,根据您在机器中pipe理身份的方式,您的sshd_config的Match块将会很有用:
Match Group gitolite3 Banner /etc/issue.empty RequiredAuthentications2 publickey
有了这一切,推到枢纽回购触发post-update挂钩,确保您的自定义操作只有当有新的东西时执行。
我想你可以简单地解决这个问题:
*/1 * * * * cd /my/sites/staging && git pull -q origin master|grep -v "up-to-date" && grunt production
虽然我没有使用它从我的puppet http://puppetlabs.com/理解你可以做到这一点。
每次当木偶运行的时候,如果有东西发生变化,就会根据黄金图像自动推送到其他服务器上。 如果您创build黄金映像后有大量服务器,则可以在另一台服务器上创build一个基本安装puppet,新服务器将从主服务器获取configuration的其余部分。