通过 git 提交代码自动部署到演示站这样的功能, 之前粗略的查了下资料了解了大概, 今天偶然需要用到这个功能, 网上查了下资料, 实现了下.
一开始想 "客户端提交 ->web 目录" 这样实现, 但是发现 git 仓库文件貌似不是直接储存的, 网上找了些资料几乎都是 "客户端提交 -> 远程仓库触发 hook->web 目录下再拉取一次" 这样的方法.
首先安装 git 创建 git 用户, 然后再设置一个远程仓库, 这样一个 git 仓库, 然后切换到 web 目录内 clone 一下远程仓库的代码
首先安装 git 创建 git 用户, 然后再设置一个远程仓库, 这样一个 git 仓库, 然后切换到 web 目录内 clone 一下远程仓库的代码
apt-get install git -y #安装git
#创建git用户,写公钥文件到git用户
adduser git
su - git
mkdir .ssh
echo "你的公钥" > authorized_keys
#创建仓库
mkdir yaf.git && cd yaf
git --bare init
#至此一个仓库就建好了
#换个文件夹尝试克隆仓库
cd ~ && git clone yaf.git #这步无错误就说明此仓库可以正常使用了
然后将刚刚克隆的目录内的所有文件复制到你的 web 目录下, 这样会有代码冲突, 解决的方法我也不知道, 我是新建的一个目录, 代码克隆之后直接用的新目录作为 web 目录
下面是关键了, 网上查询资料发现每次提交代码时会触发 hook 目录下 post-receive 文件, 先尝试在里面写
下面是关键了, 网上查询资料发现每次提交代码时会触发 hook 目录下 post-receive 文件, 先尝试在里面写
#/bin/bash
cd /data/wwwroot/yaf && git pull origin/master
结果发现不会正常执行, 里面加入
echo "1234445" > /home/git/123.txt
发现 1234445 可以被正常写出到文件手动执行 post-receive 却可以正常拉取文件, 一开始怀疑权限问题, 仔细检查每个目录和文件的权限均无异常, 最后网上找来各种说明和示例, 大部分不可用, 最后在 csdn 上找到了一个脚本可以正常执行看起来作者是 embbnux, 但估计被 copy 了无数次, 不一定是真正作者, 总之能用就行.#/bin/sh
IS_BARE=$(git rev-parse --is-bare-repository)
if [ -z "$IS_BARE" ]; then
echo >&2 "fatal: post-receive: IS_NOT_BARE"
exit 1
fi
unset GIT_DIR
DeployPath="/var/web" #你的web目录,绝对路径
echo "==============================================="
cd $DeployPath
echo "deploying the test web"
git fetch --all
git reset --hard origin/master
time=`date`
echo "web server pull at webserver at time: $time."
echo "================================================"
这个脚本我第一次跑没成功的, 原因是第一次 web 目录还没有克隆过远程仓库, 没有远程仓库的地址, web 目录需要克隆下远程仓库或者添加远程仓库的地址为 origin 才可以.
注意权限问题, post-receive 需要设置成 www 用户, 如果你不需要直接修改 web 目录下的文件则使用 git 用户便可.
另外说下其他机器提交代码时仓库地址,
注意权限问题, post-receive 需要设置成 www 用户, 如果你不需要直接修改 web 目录下的文件则使用 git 用户便可.
另外说下其他机器提交代码时仓库地址,
git@192.168.10.127:yaf.git
,git 就是刚才创建的 git 用户, 192.168.10.127 就是服务器的 ip, 换成域名也行, yaf.git 则是路径, git 用户的目录是 / home/git, 仓库的目录是 / home/git/yaf.git, 所以这里的: yaf.git 换成:/home/git/yaf.git 也可以.
No comments:
Post a Comment