自动部署使用Git和Rails,它是如何工作的?(Auto deployment with Git

2019-09-17 23:47发布

我有一个到位桶Git仓库和另一个我的生活轨道的服务器上,我怎样才能使它所以每当我推到它到位桶,直播服务器从到位桶拉呢?

我发现这个片段在网上,我把它放在我的直播服务器的git的钩子post-receive ,但我不知道下一步该怎么做:

#!/bin/sh
name=$1
if [ -z "$name" ] ; then
        echo "need to give name of checkout dir on command line"
        exit 1
fi

dir=/srv/web/$name
if [ ! -d $dir ] ; then
        echo "the directory $dir does not exist"
        exit 1
fi

cd $dir
env -i git pull
rake db:migrate
touch $dir/tmp/restart.txt

任何人都可以指出我应该怎么做才能做到这一点? 我见过的到位桶(类似于github上)支柱钩子,但我不知道该怎么办。

Answer 1:

分析

到位桶有许多服务挂钩 ,但没有我所使用的那些是明确触发部署脚本。 你可以角色自己使用到位桶经纪人API ,但这通常是不应该做的事情。

普遍的看法是,从持续集成使用部署脚本,让你只部署成功的基础之上。 请注意,我说的“部署”,而不是“推”,因为你不能推到一个资源库和工作树。

然而,这当然有可能触发没有持续集成一个Rails更新后收到钩,或诸如部署工具Capistrano的 。 轮询是一个替代方案。

虽然后收到或服务挂钩可以触发提交任意行动,以最简单的做法就是从你的Web服务器轮询的Git。 例如,你可以运行一个cron作业每分钟当前主分支拉进工作树下Web根。

首先,安装和测试脚本投票。 我一般用的这种变化:

#!/bin/bash
# Script:
#     git_poll.sh <appname>
# Purpose:
#     Poll your Rails repository for changes.

set -e

WEBROOT='/var/www'
MY_RAILS_APPNAME="$1"
shift

# Use the flock(1) utility to guard against long-running fetch or merge
# operations using the flock(2) system call. On Debian-based systems,
# this tool is found in the util-linux package.
(
    flock -n 9 

    cd "$WEBROOT/$MY_RAILS_APPNAME"
    git fetch origin master

    # Check if heads point to the same commit.
    if ! cmp --quiet <(git rev-parse master) <(git rev-parse origin/master)
    then
        git pull --force origin master
        touch "$WEBROOT/$MY_RAILS_APPNAME/tmp/restart.txt"
    fi
) 9> "/var/lock/polling4${MY_RAILS_APPNAME}"

这个脚本假设你正在使用的Phusion客运 。 如果你使用别的东西,你可能需要修改脚本的Git从远程仓库拉后采取一些其他动作。

接下来,确保脚本是可执行的。 chmod 755 /usr/local/bin/git_poll.sh应该这样做。

最后,更新你的Rails用户或系统的crontab类似下面的内容:

* * * * * /usr/local/bin/git_poll.sh example_app

由于我们在脚本中,轮询采用独家锁定每分钟应该罚款。 如果你不使用锁定,或者要减少系统上的负载,然后在crontab设置较长的轮询间隔。

而已! 现在,当您从开发或QA推到原点 ,你的Rails服务器会在一分钟左右的时间内进行自我更新。 这通常在大多数情况下足够,希望你也是如此。



Answer 2:

如果你想,当你推到位桶,我认为你需要使用他们发生的事情经纪人支持莫名其妙。 也许发表您的服务器上更新裁判的一些服务,拉,复位等。

但是,如果你直接推送到自己的服务器,你可以使用标准的git后收到钩。



文章来源: Auto deployment with Git and Rails, How does it work?