欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Linux|Git|客户端|代码自动部署Shell脚本

程序员文章站 2022-03-04 08:46:20
...

Linux|Git|客户端|代码自动部署Shell脚本

功能描述

1. 在仅安装了Git客户端的服务器上实现代码自动部署
2. 仅需一个命令, 自动创建Git仓库,自动创建项目目录,自动改写Git钩子
3. 非常适用于个人或单人开发项目的上线部署,从此彻底告别Ftp,告别文件对比上传

使用说明

  1. 搭建lnmp环境(嗯.可以省去,不过我是开发php的)
  2. 安装git (服务器,客户端必备)
  3. 创建用户 (服务器创建Git要使用的用户)
  4. 将用户加入www和git组内
  5. 将本脚本加入到已有环境变量路径内(echo $PATH; 可查看现有环境变量) | 或者放入自己顺手的路径内,之后进入该路径执行此脚本
  6. 更改脚本权限, 使其可执行
  7. 脚本使用方法: autoGit.sh 项目名称 用户名
  8. git仓库生成路径: /home/用户名/项目名.git
  9. 项目目录生成路径: /www/wwwroot/项目名
  10. 在本地使用git clone本项目, 需要输入该用户密码
  11. 免密配置可搜索git RSA免密配置
  12. 未配置免密可能无法使用vscode插件进行提交,需要使用git bash输入密码提交
  13. 配置nginx虚拟域名指向
  14. 访问搭建好的项目,如果有提示权限不足, 请将程序会改写文件的目录增加可执行权限,例如thinkphp的runtime目录,具体请自查或遇到错误时进行具体配置
  15. 本脚本建立由于是在git客户端的机制上进行创造,受linux环境的用户权限影响, 故仅适用于单项目单账号使用,也就是仅适用于单人开发部署使用,当然如果不考虑权限等问题,也可多人共用一个账号使用
  16. 请另存新开用户的账号密码备用,因为每次执行脚本都需要输入该用户密码才可进行本地clone,暂未找到可配置本地免密的方法

autoGit.sh 脚本源码

# 自动创建及同步处理脚本.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仓库地址: [email protected]服务器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当作代码片段直接公开了,但是不知道它最近抽什么筋,我发现搜索到的它上面的片段全都显示无权限.
正好很久没写文章了, 特此记录