使用 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" 从我的本地自动部署而无需登录到远程服务器只是为了 运行 以下命令:
- cd to/project/path
- git拉原点phase2
- php artisan cache:clear
- php artisan config:cache
- php artisan route:cache
- php artisan 优化
我唯一能做到的就是通过 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
我还不知道缺点。
我正在尝试使用 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" 从我的本地自动部署而无需登录到远程服务器只是为了 运行 以下命令:
- cd to/project/path
- git拉原点phase2
- php artisan cache:clear
- php artisan config:cache
- php artisan route:cache
- php artisan 优化
我唯一能做到的就是通过 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
我还不知道缺点。