git自动化部署post-receive无效(转载至segmentfault的sowork回答)

3 篇文章 0 订阅

本人在linux服务器下搭建了gitlab,创建项目,git本地推送,都正常。但是服务器上如何才能映射到该项目?通过咨询,得知,需要Git自动化部署。
网上找了办法,几乎都是post-receive,但是设置了后也没效果。最终在思否里面一个回答者的办法试了,管用了。如下:
安装完git后,git自带有钩子脚本
比如我们的仓库是 /var/git-repository/myRepo.git
//备注:如果找不到这个仓库的位置,可以在gitlab上找到自己的项目地址的名称,比如是apple.git,然后在git服务器上find / -name apple.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 chmod +x post-receive # 添加执行权限

然后当你push的时候就会将文件检出到你指定网站目录下
在git客户端push的话可以得到反馈,如果失败,可能是权限造成的,如下图
在这里插入图片描述
解决办法为:
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用户才能操作,需要一些手段修改才行, 不推荐

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值