本文档通过脚本去检查gitee仓库是否有更新
服务器上生成key
[root@iZwz9539thiyesewc0sk87Z ~]# ssh-keygen
# 然后一路回车
[root@iZwz9539thiyesewc0sk87Z ~]# cat /root/.ssh/id_rsa.pub
# 保存这个公钥,等下要使用到
gitee仓库管理你们添加公钥
按下图操作,添加公钥,其中添加时候需要添加的公钥就是上一步输出的公钥
开启gitee仓库的api授权-私人令牌
提交之后会生成一个令牌字符串,记住它只显示一次,复制下来保存它,下一步要用
服务器上编写脚本
脚本是要访问gitee仓库的api,通过获取sha值来确定是否有新的提交,如果有新的提交就根据你需要执行什么代码,比如拉去最新的代码,然后更新部署
编写脚本之前需要安装jq工具
yum install jq -y
编写脚本/root/scripts/check_repo_update.sh
#!/bin/bash
# 如果/root/scripts/last_update_time.txt文件不存在就创建该文件
if [ ! -f /root/scripts/last_update_time.txt ]; then
touch /root/scripts/last_update_time.txt
fi
# 把当前的时间格式化写到一个文件中
echo $(date +"%Y-%m-%d %H:%M:%S") " 开始执行脚本" >> /root/scripts/last_update_time.txt
# 设置Gitee访问令牌,上一步gitee生成的私人令牌
ACCESS_TOKEN="xxxxxxxxxxxxxxxxxxxxxxx"
# 设置Gitee仓库的owner和repo
OWNER="quanag_100" # gitee的用户名
REPO="src-share" # 仓库名字
cd /root/scripts/
# 获取最新的提交信息
RESPONSE=$(curl -s -H "Authorization: token $ACCESS_TOKEN" "https://gitee.com/api/v5/repos/{$OWNER}/{$REPO}/commits")
# 判断是否正常
if [[ $RESPONSE == *"Not Found"* ]]; then
echo "Gitee仓库不存在或访问令牌无效"
exit 1
fi
# 解析最新的提交SHA
LAST_COMMIT_SHA=$(echo $RESPONSE | jq -r '.[0].sha')
# 这里你需要设置一个变量来存储上一次的提交SHA,可能需要存储在文件中
if [ ! -f last_commit_sha.txt ]; then
echo $LAST_COMMIT_SHA > /root/scripts/last_commit_sha.txt
fi
# 读取上一次的提交SHA
PREVIOUS_COMMIT_SHA=$(cat /root/scripts/last_commit_sha.txt)
# 比较提交SHA,如果有新的提交
if [ "$LAST_COMMIT_SHA" != "$PREVIOUS_COMMIT_SHA" ]; then
echo "检测到新的提交: $LAST_COMMIT_SHA"
# 或者执行其他脚本
source xxx.sh
# 如果sync_book.sh执行不成功,发邮件
if [ $? -ne 0 ]; then
echo "gitee仓库提交了新的代码,代码更新<h1>失败</h1>" | mail -s "代码更新失败" xxxx@163.com
exit 1
fi
cd /root/scripts/
# 更新last_commit_sha.txt文件
echo $LAST_COMMIT_SHA > /root/scripts/last_commit_sha.txt
echo "gitee仓库提交了新的代码,代码更新成功" | mail -s "代码更新成功" xxxxx@163.com
fi
写个定时任务
[root@iZwz9539thiyesewc0sk87Z ~]# chmod +x /root/scripts/*.sh
[root@iZwz9539thiyesewc0sk87Z ~]# crontab -l
# 每30分钟执行check_repo_update.sh脚本
*/30 * * * * cd /root/scripts;/usr/bin/bash check_repo_update.sh >/dev/null 2>&1