项目持续部署方案:Git + Webhook
本文介绍利用 Gitee + Webhook 持续部署项目代码
本文使用的方法是配合宝塔 Linux 服务器面板的 Webhook 插件实现的,如果您的服务器使用的不是宝塔面板,可以看文章末尾的使用 PHP 文件作为钩子的两篇文章;由于 Gayhub 国内比较慢,所以我的私有库都在国内的 Gitee,无论是 Gayhub 还是 Gitee 都是一样使用方式;
怎么部署项目代码?以前更新了代码,写了新功能如何部署到服务器?还在用FTP笨笨的挑选出修改过的文件上传到服务器?那么你就 OUT 了,本文将介绍利用 Git + Webhook 技术持续部署项目。
实现目标、原理
- 目标:当我们本机 Push 代码到代码托管平台后,服务器自动 Pull 拉取最新代码。
- 原理:通过 Git 的 Webhook 触发 PUSH 事件,执行钩子脚本自动部署。
确保如下条件
- 项目托管在 Git 平台(Gayhub、Gitee、Coding)
- 服务器安装有 Git (本文不介绍安装方法)
- 服务器安装有宝塔面板 Bt.cn (本文不介绍安装方法)
- 服务器安装有宝塔面板的 Webhook 插件。
具体实施步骤
- 安装宝塔 Webhook 插件
- 通过 Webhook 插件添加如下 Shell 命令,本 Shell 可实现一个 Hook 支持部署多个站点。
#!/bin/bash
echo ""
#输出当前时间
date --date='0 days ago' "+%Y-%m-%d %H:%M:%S"
echo "Start"
#判断宝塔WebHook参数是否存在
if [ ! -n "$1" ];
then
echo "param参数错误"
echo "End"
exit
fi
#git项目路径
gitPath="/www/wwwroot/$1"
#git 项目地址 私有项目使用ssh地址 公有项目可以直接使用 https 地址
#gitHttp="https://gitee.com/yourname/$1" 公有项目可直接使用 https地址
gitHttp="git@gitee.com:yourname/$1.git"
echo "Web站点路径:$gitPath"
#判断项目路径是否存在
if [ -d "$gitPath" ]; then
cd $gitPath
#判断是否存在git目录
if [ ! -d ".git" ]; then
echo "在该目录下克隆 git"
git clone $gitHttp gittemp
mv gittemp/.git .
rm -rf gittemp
fi
#拉取最新的项目文件
git reset --hard origin/master
git pull
#设置目录权限
chown -R www:www $gitPath
echo "End"
exit
else
echo "该项目路径不存在"
echo "End"
exit
fi
- 获取 Hook 地址,点击查看密钥,组合好最终 URL,http://面板/hook?access_key=密钥¶m=参数,其中 param 参数用来实现多站点部署,写项目名称(项目目录)便可。
- 将上一步组合好的 Url 添加到你的项目中,Gitee 项目管理 > Webhooks > 添加;添加成功后,如果是公有项目,至此你便可 Push 代码到你的仓库测试了,如无意外,当你 Push 成功的同时,服务器同时 git pull 了最新的代码下来;私有项目继续向下看。
- 由于私有项目必须要有权限,需要在服务器生成部署公钥,并添加到代码托管平台 Gitee,生成公钥命令 'ssh-keygen -t rsa -C "xxxxx@xxxxx.com" ',生成成功后将
~/.ssh/id_rsa.pub
公钥内容复制下来,添加到Gitee,找到你的项目 > 管理 > 部署公钥 > 添加公钥。至此便可 Push 代码进行测试啦。
PHP文件作为钩子的方法
用访问PHP文件作为钩子来触发部署的方式需要服务器开启 Shell 权限,个人不喜欢这种方式,如果你感兴趣,可以查看 安正超的文章 和 yangweijie的文章 。
- 上一篇: 推荐:优秀安全的国外绿色软件下载平台
- 下一篇: 阿里云对象存储OSS工具使用汇总
本站采用 DISQUS 评论系统 国内用户可能无法访问 请自备梯子