From 3ae44d1015b62297834ca8e3dd17eb2a948ed788 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AF=92=E5=AF=92?= <2596194220@qq.com> Date: Sun, 10 May 2026 22:14:51 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=82=E9=85=8D=E6=9C=80=E6=96=B0=E7=9A=84?= =?UTF-8?q?=E9=A3=9F=E8=B0=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + .onedev-buildspec.yml | 40 ++++++++++++++++++++++++---------------- Dockerfile | 14 ++++++++------ 3 files changed, 33 insertions(+), 22 deletions(-) diff --git a/.gitignore b/.gitignore index e72b4d6..ad45915 100644 --- a/.gitignore +++ b/.gitignore @@ -16,6 +16,7 @@ # next.js /.next/ /out/ +.idea # production /build diff --git a/.onedev-buildspec.yml b/.onedev-buildspec.yml index d0d6f67..b88b87a 100644 --- a/.onedev-buildspec.yml +++ b/.onedev-buildspec.yml @@ -2,25 +2,33 @@ version: 43 jobs: - name: 构建项目 steps: + # 步骤1:从代码仓库拉取源代码 - type: CheckoutStep name: 拉取代码 cloneCredential: - type: DefaultCredential - withLfs: false - withSubmodules: false - checkoutPath: '@project_path@' - condition: SUCCESSFUL - optional: false + type: DefaultCredential # 使用默认凭证(当前用户权限) + withLfs: false # 不拉取 LFS 大文件 + withSubmodules: false # 不拉取子模块 + checkoutPath: '@project_path@' # 检出到项目路径变量指定的位置 + condition: SUCCESSFUL # 当前置步骤成功时执行 + optional: false # 此步骤不可跳过 + + # 步骤2:构建并推送 Docker 镜像 - type: BuildImageStep name: 构建docker镜像 - buildPath: '@project_path@' + buildPath: '@project_path@' # 构建上下文路径(项目根目录) output: - type: RegistryOutput - tags: latest - condition: SUCCESSFUL - optional: false - jobExecutor: docker - retryCondition: never - maxRetries: 3 - retryDelay: 30 - timeout: 14400 + type: RegistryOutput # 输出类型:推送到镜像仓库 + tags: '@server@/recipe_tool/recipe_tool:latest' # 镜像标签格式:服务器地址/项目名/镜像名:版本 + registryLogins: # 镜像仓库登录配置 + - registryUrl: https://git.hanhan.ltd # 仓库地址(带协议) + userName: '@job_token@' # 用户名使用内置任务令牌 + passwordSecret: docker-push # 密码使用自定义密钥(需提前在 Job Secrets 中创建) + condition: SUCCESSFUL # 当前置步骤成功时执行 + optional: false # 此步骤不可跳过 + + jobExecutor: docker # 使用 Docker 执行器运行此任务 + retryCondition: never # 失败时不自动重试 + maxRetries: 3 # 最大重试次数(因 retryCondition: never 实际无效) + retryDelay: 30 # 重试间隔时间(秒) + timeout: 14400 # 任务超时时间(4小时) \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index d71a70f..ce289d8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,17 +7,21 @@ WORKDIR /app # 国内镜像加速 RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories +# 安装 pnpm(不使用 corepack) +RUN npm install -g pnpm + COPY package.json pnpm-lock.yaml ./ -# 国内源 + 快速启用 pnpm -RUN corepack enable && \ - npm config set registry https://registry.npmmirror.com && \ +# 设置国内镜像源 +RUN npm config set registry https://registry.npmmirror.com && \ pnpm config set registry https://registry.npmmirror.com +# 安装依赖 RUN pnpm install --frozen-lockfile COPY . . +# 构建项目 RUN pnpm build # Stage 2: Runner @@ -39,13 +43,11 @@ COPY --from=builder /app/public ./public COPY --from=builder /app/.next/standalone ./ COPY --from=builder /app/.next/static ./.next/static -# ===================== 修复权限错误 ===================== -# 复制项目根目录的配置文件 +# 复制配置文件 COPY --from=builder /app/config.json ./ # 给 nextjs 用户授权整个目录 RUN chown -R nextjs:nodejs /app -# ======================================================== USER nextjs