本文档通过脚本去检查gitee仓库是否有更新

服务器上生成key

[root@iZwz9539thiyesewc0sk87Z ~]# ssh-keygen
# 然后一路回车
[root@iZwz9539thiyesewc0sk87Z ~]# cat /root/.ssh/id_rsa.pub
# 保存这个公钥,等下要使用到

gitee仓库管理你们添加公钥

按下图操作,添加公钥,其中添加时候需要添加的公钥就是上一步输出的公钥 alt text

开启gitee仓库的api授权-私人令牌

alt text

alt text

alt text

提交之后会生成一个令牌字符串,记住它只显示一次,复制下来保存它,下一步要用

服务器上编写脚本

脚本是要访问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

results matching ""

    No results matching ""