Files
junhong_cmp_fiber/.gitea/workflows/deploy.yaml
huang 90ecfce8c5
Some checks failed
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Failing after 3m54s
优化 Docker Compose 下载:添加多个国内镜像源备份
- 添加 5 个国内镜像源自动切换(ghproxy.net、gh-proxy.com 等)
- 每个源 15 秒连接超时、60 秒下载超时
- 循环尝试,任一成功即停止
- 所有国内源失败后才使用官方源(300 秒超时)
- 显示每个源的尝试状态,便于调试
2026-01-20 09:59:55 +08:00

154 lines
6.0 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
name: 构建并部署到测试环境(无 SSH
on:
push:
branches:
- main
- dev
- test
env:
REGISTRY: registry.boss160.cn
API_IMAGE: registry.boss160.cn/junhong/cmp-fiber-api
WORKER_IMAGE: registry.boss160.cn/junhong/cmp-fiber-worker
DEPLOY_DIR: /home/qycard001/app/junhong_cmp
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: 安装 Docker Compose 插件
run: |
# 检查是否已安装
if docker compose version &> /dev/null; then
echo "✅ Docker Compose 已安装"
docker compose version
else
echo "📦 安装 Docker Compose 插件..."
# 创建插件目录
mkdir -p ~/.docker/cli-plugins/
# 定义多个国内镜像源(按顺序尝试)
MIRRORS=(
"https://ghproxy.net/https://github.com/docker/compose/releases/download/v2.24.5/docker-compose-linux-x86_64"
"https://gh-proxy.com/https://github.com/docker/compose/releases/download/v2.24.5/docker-compose-linux-x86_64"
"https://ghps.cc/https://github.com/docker/compose/releases/download/v2.24.5/docker-compose-linux-x86_64"
"https://github.moeyy.xyz/https://github.com/docker/compose/releases/download/v2.24.5/docker-compose-linux-x86_64"
"https://mirror.ghproxy.com/https://github.com/docker/compose/releases/download/v2.24.5/docker-compose-linux-x86_64"
)
DOWNLOADED=false
for MIRROR in "${MIRRORS[@]}"; do
echo "🔄 尝试: $(echo $MIRROR | cut -d'/' -f3)"
if curl -fSL --connect-timeout 15 --max-time 60 "$MIRROR" -o ~/.docker/cli-plugins/docker-compose 2>/dev/null; then
echo "✅ 下载成功"
DOWNLOADED=true
break
else
echo "❌ 失败,尝试下一个..."
fi
done
# 如果所有国内镜像都失败,尝试官方源
if [ "$DOWNLOADED" = false ]; then
echo "⚠️ 所有国内镜像失败,尝试官方源(可能较慢)..."
curl -fSL --connect-timeout 30 --max-time 300 https://github.com/docker/compose/releases/download/v2.24.5/docker-compose-linux-x86_64 -o ~/.docker/cli-plugins/docker-compose
fi
chmod +x ~/.docker/cli-plugins/docker-compose
# 验证安装
if docker compose version; then
echo "✅ Docker Compose 安装成功"
else
echo "❌ Docker Compose 安装失败"
exit 1
fi
fi
- name: 检出代码
run: |
git clone https://git.boss160.cn/csxj2026/junhong_cmp_fiber.git .
git checkout ${{ github.sha }}
- name: 设置镜像标签
id: tag
run: |
if [ "${{ github.ref }}" = "refs/heads/main" ]; then
echo "tag=latest" >> $GITHUB_OUTPUT
elif [ "${{ github.ref }}" = "refs/heads/dev" ]; then
echo "tag=dev" >> $GITHUB_OUTPUT
elif [ "${{ github.ref }}" = "refs/heads/test" ]; then
echo "tag=test" >> $GITHUB_OUTPUT
else
echo "tag=unknown" >> $GITHUB_OUTPUT
fi
- name: 登录 Docker Registry
run: |
echo "${{ secrets.REGISTRY_PASSWORD }}" | docker login "${{ env.REGISTRY }}" --username "${{ secrets.REGISTRY_USERNAME }}" --password-stdin
- name: 构建 API 镜像
run: |
docker build -f Dockerfile.api -t ${{ env.API_IMAGE }}:${{ steps.tag.outputs.tag }} .
docker tag ${{ env.API_IMAGE }}:${{ steps.tag.outputs.tag }} ${{ env.API_IMAGE }}:${{ github.sha }}
- name: 构建 Worker 镜像
run: |
docker build -f Dockerfile.worker -t ${{ env.WORKER_IMAGE }}:${{ steps.tag.outputs.tag }} .
docker tag ${{ env.WORKER_IMAGE }}:${{ steps.tag.outputs.tag }} ${{ env.WORKER_IMAGE }}:${{ github.sha }}
- name: 推送镜像到 Registry
run: |
docker push ${{ env.API_IMAGE }}:${{ steps.tag.outputs.tag }}
docker push ${{ env.API_IMAGE }}:${{ github.sha }}
docker push ${{ env.WORKER_IMAGE }}:${{ steps.tag.outputs.tag }}
docker push ${{ env.WORKER_IMAGE }}:${{ github.sha }}
- name: 部署到本地(仅 main 分支)
if: github.ref == 'refs/heads/main'
run: |
# 确保部署目录存在
mkdir -p ${{ env.DEPLOY_DIR }}
# 复制必要的文件和目录到部署目录
cp docker-compose.prod.yml ${{ env.DEPLOY_DIR }}/
cp -r configs ${{ env.DEPLOY_DIR }}/
mkdir -p ${{ env.DEPLOY_DIR }}/logs
cd ${{ env.DEPLOY_DIR }}
echo "📋 当前部署目录: $(pwd)"
echo "🔍 验证 Docker Compose..."
docker compose version
echo "📥 拉取最新镜像..."
docker compose -f docker-compose.prod.yml pull
echo "🚀 执行滚动更新..."
docker compose -f docker-compose.prod.yml up -d --no-deps
echo "⏳ 等待服务健康检查..."
sleep 10
echo "🧹 清理旧镜像(保留最近 3 个版本)..."
docker images ${{ env.API_IMAGE }} --format "{{.ID}}" | tail -n +4 | xargs -r docker rmi -f || true
docker images ${{ env.WORKER_IMAGE }} --format "{{.ID}}" | tail -n +4 | xargs -r docker rmi -f || true
echo "🧹 清理悬空镜像..."
docker image prune -f
echo "✅ 部署完成!"
docker compose -f docker-compose.prod.yml ps
- name: 构建结果通知
if: always()
run: |
if [ "${{ job.status }}" = "success" ]; then
echo "✅ 构建成功: ${{ steps.tag.outputs.tag }}"
echo "📦 镜像标签: ${{ github.sha }}"
else
echo "❌ 构建失败"
fi