git自动化部署post-receive无效

  1. 本来我搭建了一个git环境,可以实现代码上传提交,同时我提交的时候能够部署到网站目录下,google说需要执行post-receive脚本,但是我写了貌似也没被触发不知道什么情况
    具体情况如下:

hooks下面的脚本文件,没有自带post-reveive.sample文件,我自己写的
clipboard.png

脚本的内容
clipboard.png

git用户配置

clipboard.png

网站目录对git用户的权限使用setfacl -m d:u:git:rwx配置的

clipboard.png

我在本地使用phpstrom进行git push上传,上传成功了

clipboard.png

现在不知道怎么回事,求指点,谢谢!!

阅读 8.1k
2 个回答

安装完git后,git自带有钩子脚本
比如我们的仓库是 /var/git-repository/myRepo.git
那么在/var/git-repository/myRepo.git/hooks目录下有很多脚本文件的示例
查看post-receive.sample文件是否存在如果存在
cp post-receive.sample post-receive
不存在
touch post-receive
sudo vi post-receive # 写入下面脚本

!/bin/bash

指定我的代码检出目录

DIR=/home/wwwroot/sowork/readingopen
git --work-tree=${DIR} clean -fd

直接强制检出

git --work-tree=${DIR} checkout --force

修改该文件所有者为git用户(上面安装git创建的用户)
sudo chown git:git post-receive
sudo chomd +x post-receive # 添加执行权限

然后当你push的时候就会将文件检出到你指定网站目录下
在git客户端push的话可以得到反馈,如果失败,可能是权限造成的

clipboard.png

clipboard.png

sudo setfacl -m u:git:rwx /home/wwwroot/sowork/readingopen # 添加git用户对网站目录下的写权限
当网站检出到网站目录下时,代码归属为git用户,假设我们的网站目录是www用户所管,那么他下面的所有目录没有权限去删除
如果想管理的话,可以
sudo usermod -a -G git www # 将www用户加入git组,同时git 组权限 能够有rwx 权限即可

不过一般不会有这种操作,因为每次代码检出都会覆盖网站,所以一般不建议在服务器上修改代码,只能由本地提交

有一些特殊的配置文件git可能不会提交,但是push的时候可能会将网站目录下的配置文件默认删除掉,所以我们将自定义的文件锁定掉或者本地和服务器上代码保持一致
sudo chattr +i /home/wwwroot/sowork/readingopen/.env # 锁定网站配置文件 当检出时不会被删除
修改时
sudo chattr -i /home/wwwroot/sowork/readingopen/.env #解除锁定
sudo vi /home/wwwroot/sowork/readingopen/.env #编辑,记住编辑完以后继续执行锁定操作,下面提交才不会被覆盖掉
还有一种办法是,在脚本里将生成的文件所有者修改为www,但是chown只有root用户才能操作,需要一些手段修改才行, 不推荐

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进