阿里云 centos 服务器,使用宝塔 + webHook 自动同步代码,构建部署

3 分钟
部署CI/CD

由于部署在服务器一个静态 blog:https://mp.weixin.qq.com/s/tBxfcDsMIh_HCRS1EqBMoQ ,希望源码变更就会自动重新部署,下面一起来实现一下

需求

我项目源码是在 github,通过 github issues 来存储 blog ,通过 github actions 来检查 issues 变更,自动更新代码,原本是在 vercel 部署,它可以关联 github 仓库,自动监控源码实现自动重新部署,现在因为部署在 vercel 不稳定,就迁移到 国内阿里云服务器,自己部署,那么之前的 CI/CD 就不生效了,需要自己再弄一下,要实现的话,我参考了网上的方案。我们先梳理一下我们的需求:

  1. 每次 github 源码更新,希望 gitee 的关联源码也会自动更新(这里暂时不行,只能手动重新点击同步按钮,也不是很麻烦)
  2. gitee 的源码更新,会提示宝塔服务器,在宝塔服务器上重新 build ,然后部署上线

实现

安装 git

# 安装命令
yum -y install git
# 然后看看是否安装成功
git version
# 生成秘钥
ssh-keygen -t rsa
# 拿到秘钥,给码云
cd ~/.ssh
cat id_rsa.pub

git 拉取代码,成功 🎉🎉🎉

安装 web hook

去宝塔面板【软件商店】搜索,然后安装

安装完毕我们点开插件选择:添加;名称随意,脚本里面先随便输入一下,晚点再写。提交后,我们可以看到列表就会有一条记录,我们点击查看密匙

我们复制这个完整的链接

我们去码云去配置 webhooks (果然哪里都有“马云”)

我们点击 【添加 webHooks】然后,我们填写对应的信息和勾选对应的事情,点击确定就好了,我们会看到

然后,我们去宝塔的【webHook】配置,添加我们刚刚创建的 Hook 的脚本

#!/bin/bash
echo ""
#输出当前时间
date --date='0 days ago' "+%Y-%m-%d %H:%M:%S"
echo "Start"
#git分支名称
branch="main"
#git项目路径
gitPath="/www/wwwroot/blog"
#git 仓库地址
gitHttp="git@gitee.com:chaseFunny/blog.git"
#gitHttp="http://192.168.2.20/llh/$1.git" //多仓库的时候
echo "Web站点路径:$gitPath"
#判断项目路径是否存在
if [ -d "$gitPath" ]; then
cd $gitPath
#判断是否存在git目录
if [ ! -d ".git" ]; then
echo "在该目录下克隆 git"
sudo git clone $gitHttp gittemp
sudo mv gittemp/.git .
sudo rm -rf gittemp
fi
echo "拉取最新的项目文件"
#sudo git reset --hard origin/$branch
git remote add origin $gitHttp
git branch --set-upstream-to=origin/$branch $branch
sudo git reset --hard origin/$branch
sudo git pull $gitHttp 2>&1
echo "设置目录权限"
sudo chown -R www:www $gitPath
echo "End"
exit
else
echo "该项目路径不存在"
echo "新建项目目录"
mkdir $gitPath
cd $gitPath
#判断是否存在git目录
if [ ! -d ".git" ]; then
echo "在该目录下克隆 git"
sudo git clone $gitHttp gittemp
sudo mv gittemp/.git .
sudo rm -rf gittemp
fi
echo "拉取最新的项目文件"
#sudo git reset --hard origin/$branch
sudo git pull gitHttp 2>&1
echo "设置目录权限"
sudo chown -R www:www $gitPath
echo "pnpm run build"
sudo pnpm i &&  pnpm run build
echo "End"
exit
fi

我们只需要把一些配置改为自己的,最后的脚本需要改为自己实际的,简单解释一下这段代码

这段代码是一个Bash脚本,用于自动化部署Git项目。让我们逐步解析其功能:

  1. 脚本开始时输出当前日期和时间
  2. 定义了几个变量:
    • branch: Git分支名称("mian",可能是"main"的拼写错误)
    • gitPath: Git项目的本地路径
    • gitHttp: Git仓库的远程地址
  1. 脚本检查$gitPath是否存在:如果存在:

如果不存在:

    • 进入该目录
    • 检查是否有.git目录,如果没有,克隆仓库并移动.git目录
    • 更新远程仓库地址和分支跟踪
    • 强制重置到远程分支的最新状态
    • 拉取最新代码
    • 设置目录权限
    • 创建新目录
    • 克隆仓库
    • 拉取最新代码
    • 设置目录权限
    • 运行pnpm ipnpm run build命令
  1. 脚本使用sudo命令执行某些操作,这需要管理员权限
  2. 最后,脚本设置目录的所有者为"www"用户和组,这通常用于web服务器配置。

这个脚本的主要目的是自动化 Git 项目的部署过程,包括克隆仓库、更新代码、设置权限等步骤。它还包含了一些错误处理和条件逻辑,以适应不同的情况(如项目目录是否已存在)


此文自动发布于:github issues