使用Git的hook实现代码的自动部署
这个功能非常的好用,可以省去诸多麻烦!我自己也是摸索了好久,才完全掌握的。希望能对大家有所帮助!
1,首先在我的阿里云服务器上已经创建好了一个代码远程的管理仓库,/srv/cmp.git
2, 在服务器上建立一个普通Git仓库用于存放网站的源代码。(web服务器上的另一个本地仓库)
mkdir /var/web cd /var/web git clone /srv/cmp.git
这样服务器上的普通仓库便和远程仓库建立的联系,所以说这一步很关键
3,配置Git Hook
进入到/srv/cmp.git/hooks文件夹,使用vim post-receive创建一个脚本,当你在本地仓库执行git push后就会触发post-receive。
post-receive的内容如下:
#!/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" echo "===============================================" cd $DeployPath echo "deploying the test web" #git stash #git pull origin master git fetch --all git reset --hard origin/master
time=`date` echo "web server pull at webserver at time: $time." echo "================================================"
保存后赋予可执行权限,
1 | chmod +x /srv/cmp.git/hooks/post-receive |
4,这个文件创建好了之后,可以直接运行的,排除运行中出现的问题
./post-receive
确保这个脚本可以正确执行,这一点也非常关键。
5,配置ssh,注意:这里要先切换到git用户,然后生成公钥和私钥,然后把git用户的公钥粘贴到/home/git/.ssh/authorized中
6,再次执行./post-receive
Shell脚本报错:-bash: ./switch.sh: /bin/bash^M: bad interpreter: No such file or directory
主要原因是switch.sh是我在Windows下通过Sublime Text编辑后,在linux系统里执行的。.sh文件的格式为dos格式。而linux只能执行格式为unix格式的脚本。
我们可以通过vi编辑器来查看文件的format格式。步骤如下:
1:首先用vi命令打开当前的shell脚本文件
2:在vi命令模式中使用 :set ff 命令
3:解决方法有两个
①直接当下输入命令
:set ff=unix
②返回文件当下目录执行命令
dos2unix switch.sh
如果当前系统没有dos2unix命令,还需要去网上下载安装包解压,到此为止。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
2016-10-30 iOS原生和H5的相互调用