3
Some checks failed
Next.js CI/CD 流水线 / build (push) Failing after 1m8s
Next.js CI/CD 流水线 / deploy (push) Has been skipped

This commit is contained in:
2025-06-05 23:51:24 +08:00
parent dfe2ae586a
commit a205f957f3

View File

@@ -1,104 +1,108 @@
name: 部署 Next.js 站点到 Gitea
name: Next.js CI/CD 流水线
# 定义触发工作流程的条件
on:
push:
# 当推送到 "main" 分支时触发工作流程
branches: ["main"]
# 手动触发工作流程
workflow_dispatch:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
#permissions:
# contents: read
# pages: write
# id-token: write
# 设置工作流程中所需的权限
# 设置权限
permissions:
# 只读权限用于读取仓库内容
contents: read
pages: write
id-token: write
#concurrency:
# group: "pages"
# cancel-in-progress: false
# 设置工作流的并发控制
concurrency:
group: "deploy" # 定义并发组名称为 "deploy"
cancel-in-progress: false # 不取消正在运行的工作流
# 定义作业和环境变量
env:
DB_HOST: ${{ secrets.DB_HOST }}
DB_PORT: ${{ secrets.DB_PORT }}
DB_USER: ${{ secrets.DB_USER }}
DB_PASSWORD: ${{ secrets.DB_PASSWORD }}
DB_DATABASE: ${{ secrets.DB_DATABASE }}
DB_ADMIN_USER: ${{ secrets.DB_ADMIN_USER }}
DB_ADMIN_PASSWORD: ${{ secrets.DB_ADMIN_PASSWORD }}
jobs:
deploy:
# 指定在最新的 Ubuntu 环境下运行
# 构建作业
build:
runs-on: ubuntu-latest
# 主要执行的步骤
steps:
# 第一步检出checkout代码
# 检出代码
- name: 检出代码
# 使用 GitHub 官方的 actions/checkout@v4
#uses: actions/checkout@v4
uses: https://git.aoun.ltd/actions/checkout@v4
uses: actions/checkout@v4
# 第二步:将代码通过 SCP 传输到群晖服务器上
- name: 🚚 将项目文件复制到目标服务器
# 使用 appleboy 的 SCP 动作传输文件到远程服务器
#uses: appleboy/scp-action@v0.1.7
uses: https://git.aoun.ltd/298977887/scp-action@v0.1.7
# 配置 Node.js
- name: 配置 Node.js
uses: actions/setup-node@v4
with:
host: ${{ secrets.SYNOLOGY_HOST }}
username: ${{ secrets.SYNOLOGY_USERNAME }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
port: ${{ secrets.SYNOLOGY_SSH_PORT }}
source: "."
target: "/volume2/docker/aounsaas/"
node-version: '20'
- name: 🛠️ 在群晖上构建并运行Docker镜像
#uses: appleboy/ssh-action@master
# 使用 appleboy 的 SSH 动作来连接服务器并运行命令
#uses: appleboy/ssh-action@v1.0.3
#使用自定义的 SSH 动作
uses: https://git.aoun.ltd/298977887/ssh-action@v1.0.3
# 安装依赖
- name: 安装依赖
run: npm install --frozen-lockfile
# 构建应用
- name: 构建应用
run: npm run build
# 上传构建产物
- name: 上传构建产物
uses: actions/upload-artifact@v4
with:
host: ${{ secrets.SYNOLOGY_HOST }}
username: ${{ secrets.SYNOLOGY_USERNAME }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
port: ${{ secrets.SYNOLOGY_SSH_PORT }}
name: build-output
path: |
.next
public
package.json
npm-lock.yaml
next.config.ts
# 部署作业
deploy:
needs: build
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main'
steps:
# 下载构建产物
- name: 下载构建产物
uses: actions/download-artifact@v4
with:
name: build-output
# 配置 Node.js
- name: 配置 Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
# 安装生产依赖
- name: 安装生产依赖
run: npm install --prod
# 构建 Docker 镜像并推送
- name: 登录到 Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: 构建并推送 Docker 镜像
uses: docker/build-push-action@v5
with:
context: .
push: true
tags: ${{ secrets.DOCKER_USERNAME }}/saas-app:latest
# 可选: 部署到服务器
- name: 部署到服务器
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USERNAME }}
key: ${{ secrets.SERVER_SSH_KEY }}
script: |
# 通过 set -e 使脚本在遇到错误时立即停止
set -e
echo "🚀 开始执行部署..."
#cd /volume1/docker/aounsaas
cd /volume2/docker/aounsaas
echo "🔧 正在构建临时镜像..."
#/usr/local/bin/docker build -t aounsaas-temp .
if /usr/local/bin/docker build -t aounsaas-temp .; then
echo "✅ 镜像构建成功,开始更新容器..."
echo "🔧 正在停止旧容器..."
/usr/local/bin/docker stop aounsaas || true
echo "🔧 正在删除旧容器..."
/usr/local/bin/docker rm aounsaas || true
echo "🔧 正在删除旧镜像..."
/usr/local/bin/docker rmi aounsaas || true
echo "🔧 重命名新镜像..."
/usr/local/bin/docker tag aounsaas-temp aounsaas
/usr/local/bin/docker rmi aounsaas-temp
echo "🚀 正在运行新容器..."
#/usr/local/bin/docker run -d -p 3300:3000 --name aounsaas -e TZ=Asia/Shanghai aounsaas
# 启动新的容器,使用指定的环境变量和端口映射,并设置自动重启功能
# 容器名称为 aounsaas镜像名称为 aounsaas
# 自动重启容器,除非手动停止
# 将本地 3300 端口映射到容器的 3000 端口
# 设置时区为上海
# 设置 API 地址,最后一行没有反斜杠
# 使用 aounsaas 镜像运行容器
/usr/local/bin/docker run -d \
--name aounsaas \
--restart unless-stopped \
-p 3300:3000 \
-e TZ=Asia/Shanghai \
-e NEXT_PUBLIC_API=https://emoji.aoun.ltd/ \
aounsaas
echo "🎉 部署完成!"
else
echo "❌ 镜像构建失败!,保留旧容器运行。"
fi
cd /path/to/deployment
docker-compose pull
docker-compose up -d