feat: 最终 CI/CD 方案 - 手动克隆 + 自动部署
## 方案说明 由于 Gitea Runner 在 Docker 容器中无法访问宿主机文件系统和网络, 采用一次性手动配置 + 自动部署的方案 ## 配置步骤(一次性) 1. SSH 登录服务器 2. 手动克隆代码到 /www/dk_project/dk_app/rent 3. 配置 Git 凭证(SSH 或 Token) ## 工作流程 1. 开发者 git push 2. CI/CD 自动触发 3. git pull 拉取最新代码 4. docker-compose build 构建 5. docker-compose up 部署 ## 新增文档 - CICD_SETUP.md - 完整配置指南 ## 优点 - 简单可靠 - 不依赖复杂的网络配置 - 代码在宿主机上,构建速度快 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
+10
-46
@@ -8,60 +8,24 @@ on:
|
|||||||
|
|
||||||
env:
|
env:
|
||||||
NODE_ENV: production
|
NODE_ENV: production
|
||||||
|
# 服务器上代码的路径(需要先手动克隆一次)
|
||||||
|
PROJECT_PATH: /www/dk_project/dk_app/rent
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
deploy:
|
deploy:
|
||||||
runs-on: [self-hosted, rent-deploy]
|
runs-on: [self-hosted, rent-deploy]
|
||||||
steps:
|
steps:
|
||||||
- name: Prepare code
|
- name: Update code
|
||||||
run: |
|
run: |
|
||||||
WORK_DIR="/tmp/rent-deploy"
|
echo "更新代码..."
|
||||||
|
cd ${PROJECT_PATH}
|
||||||
|
|
||||||
echo "准备代码目录..."
|
# 拉取最新代码
|
||||||
echo "查找 Gitea 仓库路径..."
|
|
||||||
|
|
||||||
# 查找可能的 Gitea 仓库路径
|
|
||||||
POSSIBLE_PATHS=(
|
|
||||||
"/www/dk_project/dk_app/gitea/gitea_P4dS/data/gitea/repositories/xiaoquan/rent.git"
|
|
||||||
"/www/dk_project/dk_app/gitea/gitea_P4dS/gitea/data/git/repositories/xiaoquan/rent.git"
|
|
||||||
"/var/lib/docker/volumes/gitea_data/_data/git/repositories/xiaoquan/rent.git"
|
|
||||||
)
|
|
||||||
|
|
||||||
GITEA_REPO=""
|
|
||||||
for path in "${POSSIBLE_PATHS[@]}"; do
|
|
||||||
if [ -d "$path" ]; then
|
|
||||||
GITEA_REPO="$path"
|
|
||||||
echo "✅ 找到仓库: $path"
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ -z "$GITEA_REPO" ]; then
|
|
||||||
echo "❌ 未找到 Gitea 仓库,尝试查找..."
|
|
||||||
find /www/dk_project/dk_app/gitea -name "rent.git" -type d 2>/dev/null || true
|
|
||||||
find /var/lib/docker/volumes -name "rent.git" -type d 2>/dev/null || true
|
|
||||||
echo "请检查上面的输出,找到正确的仓库路径"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -d "$WORK_DIR/.git" ]; then
|
|
||||||
echo "代码目录已存在,更新代码..."
|
|
||||||
cd $WORK_DIR
|
|
||||||
git fetch origin
|
git fetch origin
|
||||||
git checkout ${{ github.ref_name }}
|
git checkout ${{ github.ref_name }}
|
||||||
git reset --hard origin/${{ github.ref_name }}
|
git pull origin ${{ github.ref_name }}
|
||||||
else
|
|
||||||
echo "首次初始化代码..."
|
|
||||||
rm -rf $WORK_DIR
|
|
||||||
mkdir -p $WORK_DIR
|
|
||||||
cd $WORK_DIR
|
|
||||||
git init
|
|
||||||
git remote add origin $GITEA_REPO
|
|
||||||
git fetch origin
|
|
||||||
git checkout -b ${{ github.ref_name }} origin/${{ github.ref_name }}
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "✅ 代码准备完成"
|
echo "✅ 代码更新完成"
|
||||||
echo "当前分支: $(git branch --show-current)"
|
echo "当前分支: $(git branch --show-current)"
|
||||||
echo "最新提交: $(git log -1 --oneline)"
|
echo "最新提交: $(git log -1 --oneline)"
|
||||||
|
|
||||||
@@ -69,7 +33,7 @@ jobs:
|
|||||||
if: github.ref == 'refs/heads/test'
|
if: github.ref == 'refs/heads/test'
|
||||||
run: |
|
run: |
|
||||||
echo "部署到测试环境..."
|
echo "部署到测试环境..."
|
||||||
cd /tmp/rent-deploy/deploy/docker
|
cd ${PROJECT_PATH}/deploy/docker
|
||||||
|
|
||||||
export TEST_DB_PASSWORD="${{ secrets.TEST_DB_PASSWORD }}"
|
export TEST_DB_PASSWORD="${{ secrets.TEST_DB_PASSWORD }}"
|
||||||
export TEST_JWT_SECRET="${{ secrets.TEST_JWT_SECRET }}"
|
export TEST_JWT_SECRET="${{ secrets.TEST_JWT_SECRET }}"
|
||||||
@@ -89,7 +53,7 @@ jobs:
|
|||||||
if: github.ref == 'refs/heads/prod'
|
if: github.ref == 'refs/heads/prod'
|
||||||
run: |
|
run: |
|
||||||
echo "部署到生产环境..."
|
echo "部署到生产环境..."
|
||||||
cd /tmp/rent-deploy/deploy/docker
|
cd ${PROJECT_PATH}/deploy/docker
|
||||||
|
|
||||||
export PROD_DB_PASSWORD="${{ secrets.PROD_DB_PASSWORD }}"
|
export PROD_DB_PASSWORD="${{ secrets.PROD_DB_PASSWORD }}"
|
||||||
export PROD_JWT_SECRET="${{ secrets.PROD_JWT_SECRET }}"
|
export PROD_JWT_SECRET="${{ secrets.PROD_JWT_SECRET }}"
|
||||||
|
|||||||
@@ -0,0 +1,114 @@
|
|||||||
|
# CI/CD 部署配置指南
|
||||||
|
|
||||||
|
由于 Gitea Runner 运行在 Docker 容器中,无法直接访问宿主机文件系统和网络,我们采用以下方案:
|
||||||
|
|
||||||
|
## 📋 一次性配置步骤
|
||||||
|
|
||||||
|
### 1. 在服务器上手动克隆代码
|
||||||
|
|
||||||
|
SSH 登录服务器后执行:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 进入项目目录
|
||||||
|
cd /www/dk_project/dk_app
|
||||||
|
|
||||||
|
# 克隆代码(使用服务器本地 Gitea 端口)
|
||||||
|
git clone http://127.0.0.1:10082/xiaoquan/rent.git
|
||||||
|
|
||||||
|
# 验证
|
||||||
|
cd rent
|
||||||
|
ls -la
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. 配置 Git 凭证(避免每次输入密码)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /www/dk_project/dk_app/rent
|
||||||
|
|
||||||
|
# 方法1:使用 Gitea Token
|
||||||
|
git config credential.helper store
|
||||||
|
git pull # 第一次会要求输入用户名和 token
|
||||||
|
|
||||||
|
# 方法2:使用 SSH(推荐)
|
||||||
|
# 在 Gitea 中添加服务器的 SSH 公钥
|
||||||
|
ssh-keygen -t rsa -b 4096
|
||||||
|
cat ~/.ssh/id_rsa.pub
|
||||||
|
# 复制公钥,在 Gitea 个人设置 -> SSH密钥 中添加
|
||||||
|
|
||||||
|
# 修改 remote 为 SSH
|
||||||
|
git remote set-url origin git@127.0.0.1:xiaoquan/rent.git
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. 验证自动拉取
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /www/dk_project/dk_app/rent
|
||||||
|
git pull origin test
|
||||||
|
```
|
||||||
|
|
||||||
|
应该能够无密码拉取成功。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔄 CI/CD 工作流程
|
||||||
|
|
||||||
|
配置完成后,工作流程为:
|
||||||
|
|
||||||
|
1. **开发** → 修改代码
|
||||||
|
2. **git push origin test** → 推送到 Gitea
|
||||||
|
3. **CI/CD 自动触发** →
|
||||||
|
- SSH 到服务器
|
||||||
|
- git pull 拉取最新代码
|
||||||
|
- docker-compose build 构建
|
||||||
|
- docker-compose up 部署
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🚀 使用方式
|
||||||
|
|
||||||
|
### 推送到测试环境
|
||||||
|
```bash
|
||||||
|
git push origin test
|
||||||
|
```
|
||||||
|
|
||||||
|
### 推送到生产环境
|
||||||
|
```bash
|
||||||
|
git push origin prod
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📝 注意事项
|
||||||
|
|
||||||
|
1. **首次配置**:必须在服务器上手动克隆一次代码
|
||||||
|
2. **Git 凭证**:配置后才能自动 git pull
|
||||||
|
3. **路径固定**:代码路径为 `/www/dk_project/dk_app/rent`
|
||||||
|
4. **权限**:确保 Docker 有权限访问代码目录
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔧 故障排查
|
||||||
|
|
||||||
|
### 问题:CI/CD 提示找不到代码目录
|
||||||
|
|
||||||
|
**解决**:检查服务器上是否已克隆代码
|
||||||
|
```bash
|
||||||
|
ls -la /www/dk_project/dk_app/rent
|
||||||
|
```
|
||||||
|
|
||||||
|
### 问题:git pull 需要密码
|
||||||
|
|
||||||
|
**解决**:配置 Git 凭证(见上面步骤2)
|
||||||
|
|
||||||
|
### 问题:Docker 构建失败
|
||||||
|
|
||||||
|
**解决**:检查 Dockerfile 和依赖
|
||||||
|
```bash
|
||||||
|
cd /www/dk_project/dk_app/rent/deploy/docker
|
||||||
|
docker-compose -f docker-compose.test.yml build
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**维护者**:开发团队
|
||||||
|
**最后更新**:2026-06-10
|
||||||
Reference in New Issue
Block a user