1. 在仅安装了Git客户端的服务器上实现代码自动部署
2. 仅需一个命令, 自动创建Git仓库,自动创建项目目录,自动改写Git钩子
3. 非常适用于个人或单人开发项目的上线部署,从此彻底告别Ftp,告别文件对比上传
# 自动创建及同步处理脚本.sh
WAN_IP='111.111.111.111'
PRO_NAME=$1 #项目名称,执行脚本时传入
USER_NAME=$2 # 用户名称
# 增加输入判断,为空报错返回不继续执行
if [ -z "${PRO_NAME}" ]; then
echo "请输入项目名称"
exit 1
fi
if [ -z "${USER_NAME}" ]; then
echo "请输入用户名称"
exit 1
fi
WEB_PATH='/www/wwwroot/' # WEB根目录
GIT_PATH="/home/${USER_NAME}/" # GIT根目录
echo "GIT根目录: ${GIT_PATH}"
WEB_FULL_PATH=${WEB_PATH}${PRO_NAME}
echo "项目路径: ${WEB_FULL_PATH}"
GIT_FULL_PATH=${GIT_PATH}${PRO_NAME}.git
echo "Git路径: ${GIT_FULL_PATH}"
# 创建裸仓库,空仓库理论上来说最直接简单,但是远程提交时会出一系列问题,所以还是老老实实用裸的吧
mkdir ${GIT_FULL_PATH}
if [ $? != 0 ]; then echo "创建GIT目录失败,错误码: $?";exit;fi
git init --bare ${GIT_FULL_PATH}
if [ $? != 0 ]; then echo "创建GIT裸仓库失败,错误码: $?";exit;fi
chown -R ${USER_NAME} ${GIT_FULL_PATH} # 更改仓库目录归属用户
if [ $? != 0 ]; then echo "更改仓库目录归属用户失败,错误码: $?";exit;fi
# git仓库地址: git@服务器IP:/www/wwwroot/项目名称.git
# 修改钩子文件,在收到commit时同步代码
echo "git --work-tree=${WEB_FULL_PATH} checkout -f" > ${GIT_FULL_PATH}/hooks/post-receive
echo '钩子修改完成:'
cat ${GIT_FULL_PATH}/hooks/post-receive
echo "更改钩子文件归属人.."
chown ${USER_NAME}:git ${GIT_FULL_PATH}/hooks/post-receive # 更改钩子文件的归属人
echo "为钩子添加执行权限..."
chmod +x ${GIT_FULL_PATH}/hooks/post-receive # 为钩子添加执行权限
# 钩子完成了, 接下来要创建项目对应的WEB目录,并执行clone操作
echo "创建项目目录."
mkdir ${WEB_FULL_PATH}
if [ $? != 0 ]; then echo "创建项目目录失败,错误码: $?";exit;fi
echo "更改项目目录归属人为git"
chown ${USER_NAME}:git ${WEB_FULL_PATH} # 更改归属人/组
echo "正在克隆项目..."
git clone ${USER_NAME}@127.0.0.1:${GIT_FULL_PATH} ${WEB_FULL_PATH}
if [ $? != 0 ]; then echo "克隆本地项目失败,错误码: $?";exit;fi
# 服务端Git配置完成咯
echo "仓库地址: ${USER_NAME}@${WAN_IP}:${GIT_FULL_PATH}"
其实最近刚入职一家新公司,但是…算了, 一言难尽, 说不定某一天有人还能看到这里
这个其实最早是在2019年的时候想到的东西, 起初打算在Windows本地局域网使用git来管理项目代码,但实验到最终算是失败了,
当时的失败原因已经忘记了, 最近又有这个需求了, 不过这次是在linux服务器上进行的,
对于linux的命令, 真的是, 一天敲了几十遍都记不住. 所以从开始有这个想法, 到最终实验测试成功,真的用了太多的时间.
可能也是一个很鸡肋的东西, 但是Coder这么多, 我想总会有碰到和我一样需求的人
在这之前我在baidu上是搜不到这些相关东西的, 即使有部分代码同步的, 但也是不够完整, 有很多细节没有交代清楚, 最终就只能靠自己大量的实验,排错来一步步解决, 从linux的基本操作命令, 到用户权限/组的修改, 再到git命令的使用,再到linux用户和组的权限关系,再到最后git钩子的创建,加之最后shell脚本的语法, 怎么说呢, 就当是杂学的一种吧, 写这个可能用到的人不多, 但是对于我个人而言, 倒是从其中学到了更多其它的东西.
好歹是自己写出来的并且对于目前的我来说很实用的东西,算是来这儿感慨,记录一下吧. 不然怕是过一个月就已经忘了自己写的东西原理和使用方法了.
好了, 谢谢看到的你能浪费这么长时间来读完这些.
本身是在gitee当作代码片段直接公开了,但是不知道它最近抽什么筋,我发现搜索到的它上面的片段全都显示无权限.
正好很久没写文章了, 特此记录