From 863c3986b555a07eee796372d48a7b938a706cc0 Mon Sep 17 00:00:00 2001 From: msumshk Date: Thu, 5 Feb 2026 17:13:56 +0800 Subject: [PATCH] perf: build on host for faster incremental compilation --- .gitea/workflows/deploy.yml | 32 +++++++++++++--------- src/Api/TakeoutSaaS.AdminApi/Dockerfile | 36 +------------------------ 2 files changed, 21 insertions(+), 47 deletions(-) diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index 8537fc0..67c8c59 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -11,24 +11,32 @@ jobs: steps: - name: Checkout code run: | - rm -rf /opt/deploy/adminapi || true - mkdir -p /opt/deploy/adminapi + cd /opt/deploy/adminapi || mkdir -p /opt/deploy/adminapi cd /opt/deploy/adminapi - git clone --depth 1 --branch dev ssh://git@git.laosankeji.com:2222/msumshk/TakeoutSaaS.AdminApi.git . - # 手动拉取 submodules(从 Gitea 而不是 GitHub) - git submodule init - git config submodule.TakeoutSaaS.BuildingBlocks.url ssh://git@git.laosankeji.com:2222/msumshk/TakeoutSaaS.BuildingBlocks.git - git config submodule.TakeoutSaaS.Docs.url ssh://git@git.laosankeji.com:2222/msumshk/TakeoutSaaS.Docs.git - git submodule update --depth 1 + # 如果已有仓库就 pull,否则 clone + if [ -d ".git" ]; then + git fetch origin dev + git reset --hard origin/dev + git submodule update --init --recursive + else + git clone --branch dev --recurse-submodules ssh://git@git.laosankeji.com:2222/msumshk/TakeoutSaaS.AdminApi.git . + git submodule init + git config submodule.TakeoutSaaS.BuildingBlocks.url ssh://git@git.laosankeji.com:2222/msumshk/TakeoutSaaS.BuildingBlocks.git + git config submodule.TakeoutSaaS.Docs.url ssh://git@git.laosankeji.com:2222/msumshk/TakeoutSaaS.Docs.git + git submodule update + fi + + - name: Build on host + run: | + cd /opt/deploy/adminapi + dotnet restore src/Api/TakeoutSaaS.AdminApi/TakeoutSaaS.AdminApi.csproj + dotnet publish src/Api/TakeoutSaaS.AdminApi/TakeoutSaaS.AdminApi.csproj -c Release -o /opt/deploy/adminapi/publish --no-restore - name: Build Docker image run: | cd /opt/deploy/adminapi - docker buildx build \ - --build-context nuget-cache=/opt/nuget-cache/packages \ - -t takeoutsaas-adminapi:latest \ - -f src/Api/TakeoutSaaS.AdminApi/Dockerfile . + docker build -t takeoutsaas-adminapi:latest -f src/Api/TakeoutSaaS.AdminApi/Dockerfile . - name: Deploy container run: | diff --git a/src/Api/TakeoutSaaS.AdminApi/Dockerfile b/src/Api/TakeoutSaaS.AdminApi/Dockerfile index 54a1cee..e4600a6 100644 --- a/src/Api/TakeoutSaaS.AdminApi/Dockerfile +++ b/src/Api/TakeoutSaaS.AdminApi/Dockerfile @@ -1,40 +1,6 @@ -FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build -WORKDIR /src - -# 复制预先准备好的 NuGet 包缓存 -COPY --from=nuget-cache / /root/.nuget/packages/ - -# Copy only what's needed for restore first, so `dotnet restore` can be cached. -COPY ["Directory.Build.props", "./"] -COPY ["TakeoutSaaS.sln", "./"] -COPY ["stylecop.json", "./"] -COPY ["NuGet.Config", "./"] -COPY ["src/Api/TakeoutSaaS.AdminApi/TakeoutSaaS.AdminApi.csproj", "src/Api/TakeoutSaaS.AdminApi/"] -COPY ["src/Application/TakeoutSaaS.Application/TakeoutSaaS.Application.csproj", "src/Application/TakeoutSaaS.Application/"] -COPY ["TakeoutSaaS.BuildingBlocks/src/Core/TakeoutSaaS.Shared.Abstractions/TakeoutSaaS.Shared.Abstractions.csproj", "TakeoutSaaS.BuildingBlocks/src/Core/TakeoutSaaS.Shared.Abstractions/"] -COPY ["TakeoutSaaS.BuildingBlocks/src/Core/TakeoutSaaS.Shared.Kernel/TakeoutSaaS.Shared.Kernel.csproj", "TakeoutSaaS.BuildingBlocks/src/Core/TakeoutSaaS.Shared.Kernel/"] -COPY ["TakeoutSaaS.BuildingBlocks/src/Core/TakeoutSaaS.Shared.Web/TakeoutSaaS.Shared.Web.csproj", "TakeoutSaaS.BuildingBlocks/src/Core/TakeoutSaaS.Shared.Web/"] -COPY ["src/Domain/TakeoutSaaS.Domain/TakeoutSaaS.Domain.csproj", "src/Domain/TakeoutSaaS.Domain/"] -COPY ["src/Infrastructure/TakeoutSaaS.Infrastructure/TakeoutSaaS.Infrastructure.csproj", "src/Infrastructure/TakeoutSaaS.Infrastructure/"] -COPY ["src/Modules/TakeoutSaaS.Module.Authorization/TakeoutSaaS.Module.Authorization.csproj", "src/Modules/TakeoutSaaS.Module.Authorization/"] -COPY ["src/Modules/TakeoutSaaS.Module.Delivery/TakeoutSaaS.Module.Delivery.csproj", "src/Modules/TakeoutSaaS.Module.Delivery/"] -COPY ["src/Modules/TakeoutSaaS.Module.Dictionary/TakeoutSaaS.Module.Dictionary.csproj", "src/Modules/TakeoutSaaS.Module.Dictionary/"] -COPY ["src/Modules/TakeoutSaaS.Module.Messaging/TakeoutSaaS.Module.Messaging.csproj", "src/Modules/TakeoutSaaS.Module.Messaging/"] -COPY ["src/Modules/TakeoutSaaS.Module.Scheduler/TakeoutSaaS.Module.Scheduler.csproj", "src/Modules/TakeoutSaaS.Module.Scheduler/"] -COPY ["src/Modules/TakeoutSaaS.Module.Sms/TakeoutSaaS.Module.Sms.csproj", "src/Modules/TakeoutSaaS.Module.Sms/"] -COPY ["src/Modules/TakeoutSaaS.Module.Storage/TakeoutSaaS.Module.Storage.csproj", "src/Modules/TakeoutSaaS.Module.Storage/"] - -RUN dotnet restore "src/Api/TakeoutSaaS.AdminApi/TakeoutSaaS.AdminApi.csproj" - -# Copy the rest of the source after restore for best cache reuse. -COPY . . - -ARG BUILD_CONFIGURATION=Release -RUN dotnet publish "src/Api/TakeoutSaaS.AdminApi/TakeoutSaaS.AdminApi.csproj" -c $BUILD_CONFIGURATION -o /app/publish --no-restore - FROM mcr.microsoft.com/dotnet/aspnet:10.0 WORKDIR /app -COPY --from=build /app/publish . +COPY publish/ . EXPOSE 7801 ENV ASPNETCORE_URLS=http://+:7801 ENTRYPOINT ["dotnet", "TakeoutSaaS.AdminApi.dll"]