使用 git 挂钩 + laravel artisan 命令创建简单的自动部署

Create simple auto deploy using git hooks + laravel artisan command

我正在尝试使用 git 挂钩 post-receive 进行简单的自动部署,我发现了这个 link。那个 link 给了我想法并自己修改了它。 当 BRANCH 变量为 "master" 时,它运行良好。但是当我将它更改为其他分支时,比如说 "phase2",当 运行 执行 artisan 命令时,它总是停留在 "master" 分支。所以我的缓存路由来自master分支。

这是我的 post-receive 挂钩文件:

#!/bin/sh
TARGET="/usr/local/apache2/htdocs/project_uat"
GIT_DIR="/home/user0001/www/project_name/.git"

BRANCH="phase2" # I want this changable to phase3,phase4 or what ever branch

while read oldrev newrev ref
do
        # only checking out the master (or whatever branch you would like to deploy)
        if [[ $ref = "refs/heads/${BRANCH}" ]];
        then
                echo "Ref $ref received. Deploying ${BRANCH} branch to UAT..."
                git --work-tree=$TARGET --git-dir=$GIT_DIR checkout -f
        else
                echo "Ref $ref received. Doing nothing: only the ${BRANCH} branch may be deployed on this server."
        fi
done

cd /usr/local/apache2/htdocs/project_uat
php artisan cache:clear
php artisan config:cache
php artisan route:cache
php artisan optimize

当我尝试导航到我的目标目录时。它停留在 phase2 分支,但是当我尝试 "git status" 时有很多变化。这些更改来自 master。

基本上,我想要的只是在每次 "git push" 从我的本地自动部署而无需登录到远程服务器只是为了 运行 以下命令:

我唯一能做到的就是通过 GIT HOOKS

如前所述,您可以在结帐后添加:

git reset --hard
git clean -f -d 

但不要忘记您还有另一种选择:multiple wortrees(每个分支一个):您可以更改文件夹(并服务器与您的分支匹配的文件夹)而不必担心清理 up/re-compiling 因为前一个分支的文件。

在@VonC 的帮助下经过一番努力后

我简单地完成了我的钩子:

#!/bin/sh
unset $(git rev-parse --local-env-vars)
cd /usr/local/apache2/htdocs/project_uat

env -i git reset --hard
env -i git clean -f -d
env -i git pull
php artisan cache:clear
php artisan config:cache
php artisan route:cache
php artisan optimize

我还不知道缺点。