Skip to content

Commit 76ff089

Browse files
committed
chore(ci): blog sync
1 parent a2ae7ba commit 76ff089

File tree

1 file changed

+153
-0
lines changed

1 file changed

+153
-0
lines changed

data/blog/post-12.mdx

Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
---
2+
title: 阿里云 centos 服务器,使用宝塔 + webHook 自动同步代码,构建部署
3+
date: 2024-08-18T08:27:30Z
4+
slug: post-12
5+
author: chaseFunny:https://github.com/chaseFunny
6+
tags: ["部署","CI/CD"]
7+
---
8+
9+
由于部署在服务器一个静态 blog:`https://mp.weixin.qq.com/s/tBxfcDsMIh_HCRS1EqBMoQ` ,希望源码变更就会自动重新部署,下面一起来实现一下
10+
11+
## 需求
12+
13+
我项目源码是在 github,通过 github issues 来存储 blog ,通过 github actions 来检查 issues 变更,自动更新代码,原本是在 vercel 部署,它可以关联 github 仓库,自动监控源码实现自动重新部署,现在因为部署在 vercel 不稳定,就迁移到 国内阿里云服务器,自己部署,那么之前的 CI/CD 就不生效了,需要自己再弄一下,要实现的话,我参考了网上的方案。我们先梳理一下我们的需求:
14+
15+
1. 每次 github 源码更新,希望 gitee 的关联源码也会自动更新(这里暂时不行,只能手动重新点击同步按钮,也不是很麻烦)
16+
2. gitee 的源码更新,会提示宝塔服务器,在宝塔服务器上重新 build ,然后部署上线
17+
18+
## 实现
19+
20+
### 安装 git
21+
22+
```bash
23+
# 安装命令
24+
yum -y install git
25+
# 然后看看是否安装成功
26+
git version
27+
# 生成秘钥
28+
ssh-keygen -t rsa
29+
# 拿到秘钥,给码云
30+
cd ~/.ssh
31+
cat id_rsa.pub
32+
```
33+
34+
git 拉取代码,成功 🎉🎉🎉
35+
36+
![img](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/1723957015510-1055824c-67e6-40d2-8716-8d7eebba90c5.png)
37+
38+
### 安装 web hook
39+
40+
去宝塔面板【软件商店】搜索,然后安装
41+
42+
![img](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/1723955575913-cf60e14a-8b9b-4eaa-9f67-7055a41065f5.png)
43+
44+
安装完毕我们点开插件选择:添加;名称随意,脚本里面先随便输入一下,晚点再写。提交后,我们可以看到列表就会有一条记录,我们点击查看密匙
45+
46+
![img](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/1723955841856-dc3ed46e-7744-4bed-ad30-7836be8c74b7.png)
47+
48+
我们复制这个完整的链接
49+
50+
![img](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/1723955910161-862e7123-0f36-4eac-8a8d-c7682ed555fd.png)
51+
52+
我们去码云去配置 webhooks (果然哪里都有“马云”)
53+
54+
![img](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/1723956118470-2571693d-5a95-4a20-babb-0e96fcf525f7.png)
55+
56+
我们点击 【添加 webHooks】然后,我们填写对应的信息和勾选对应的事情,点击确定就好了,我们会看到
57+
58+
![img](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/1723956327949-72627f3d-7090-4289-82c5-1d0d4ea96378.png)
59+
60+
然后,我们去宝塔的【webHook】配置,添加我们刚刚创建的 Hook 的脚本
61+
62+
```bash
63+
#!/bin/bash
64+
echo ""
65+
#输出当前时间
66+
date --date='0 days ago' "+%Y-%m-%d %H:%M:%S"
67+
echo "Start"
68+
#git分支名称
69+
branch="main"
70+
#git项目路径
71+
gitPath="/www/wwwroot/blog"
72+
#git 仓库地址
73+
gitHttp="[email protected]:chaseFunny/blog.git"
74+
#gitHttp="http://192.168.2.20/llh/$1.git" //多仓库的时候
75+
echo "Web站点路径:$gitPath"
76+
#判断项目路径是否存在
77+
if [ -d "$gitPath" ]; then
78+
cd $gitPath
79+
#判断是否存在git目录
80+
if [ ! -d ".git" ]; then
81+
echo "在该目录下克隆 git"
82+
sudo git clone $gitHttp gittemp
83+
sudo mv gittemp/.git .
84+
sudo rm -rf gittemp
85+
fi
86+
echo "拉取最新的项目文件"
87+
#sudo git reset --hard origin/$branch
88+
git remote add origin $gitHttp
89+
git branch --set-upstream-to=origin/$branch $branch
90+
sudo git reset --hard origin/$branch
91+
sudo git pull $gitHttp 2>&1
92+
echo "设置目录权限"
93+
sudo chown -R www:www $gitPath
94+
echo "End"
95+
exit
96+
else
97+
echo "该项目路径不存在"
98+
echo "新建项目目录"
99+
mkdir $gitPath
100+
cd $gitPath
101+
#判断是否存在git目录
102+
if [ ! -d ".git" ]; then
103+
echo "在该目录下克隆 git"
104+
sudo git clone $gitHttp gittemp
105+
sudo mv gittemp/.git .
106+
sudo rm -rf gittemp
107+
fi
108+
echo "拉取最新的项目文件"
109+
#sudo git reset --hard origin/$branch
110+
sudo git pull gitHttp 2>&1
111+
echo "设置目录权限"
112+
sudo chown -R www:www $gitPath
113+
echo "pnpm run build"
114+
sudo pnpm i && pnpm run build
115+
echo "End"
116+
exit
117+
fi
118+
```
119+
120+
我们只需要把一些配置改为自己的,最后的脚本需要改为自己实际的,简单解释一下这段代码
121+
122+
这段代码是一个Bash脚本,用于自动化部署Git项目。让我们逐步解析其功能:
123+
124+
1. 脚本开始时输出当前日期和时间
125+
2. 定义了几个变量:
126+
127+
- - `branch`: Git分支名称("mian",可能是"main"的拼写错误)
128+
- `gitPath`: Git项目的本地路径
129+
- `gitHttp`: Git仓库的远程地址
130+
131+
1. 脚本检查`$gitPath`是否存在:如果存在:
132+
133+
如果不存在:
134+
135+
- - 进入该目录
136+
- 检查是否有`.git`目录,如果没有,克隆仓库并移动`.git`目录
137+
- 更新远程仓库地址和分支跟踪
138+
- 强制重置到远程分支的最新状态
139+
- 拉取最新代码
140+
- 设置目录权限
141+
- 创建新目录
142+
- 克隆仓库
143+
- 拉取最新代码
144+
- 设置目录权限
145+
- 运行`pnpm i``pnpm run build`命令
146+
147+
1. 脚本使用`sudo`命令执行某些操作,这需要管理员权限
148+
2. 最后,脚本设置目录的所有者为"www"用户和组,这通常用于web服务器配置。
149+
150+
这个脚本的主要目的是自动化 Git 项目的部署过程,包括克隆仓库、更新代码、设置权限等步骤。它还包含了一些错误处理和条件逻辑,以适应不同的情况(如项目目录是否已存在)
151+
152+
---
153+
此文自动发布于:<a href="https://github.com/coderPerseus/blog/issues/12" target="_blank">github issues</a>

0 commit comments

Comments
 (0)