From a18204397099be57a3cd1773f6238b2120d6d0e1 Mon Sep 17 00:00:00 2001 From: JustMe Date: Fri, 2 Oct 2026 11:51:56 +0800 Subject: [PATCH] ci: cache native image build dependencies --- .woodpecker/release-backend.yml | 4 ++++ docs/deployment.md | 2 +- server/Dockerfile | 7 +++++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/.woodpecker/release-backend.yml b/.woodpecker/release-backend.yml index 8143144..ca28b44 100644 --- a/.woodpecker/release-backend.yml +++ b/.woodpecker/release-backend.yml @@ -46,6 +46,10 @@ steps: - set -euo pipefail - release_tag="${CI_COMMIT_TAG:-${RELEASE_TAG:-}}" - test -n "$release_tag" + - ': "${WOODPECKER_BACKEND_LOCAL_TEMP_DIR:=$HOME/woodpecker/work}"' + - buildah_store="$(dirname "$WOODPECKER_BACKEND_LOCAL_TEMP_DIR")/buildah-cache/webdrop" + - mkdir -p "$buildah_store/storage" "$buildah_store/run" + - 'buildah() { command buildah --root "$buildah_store/storage" --runroot "$buildah_store/run" "$@"; }' - printf '%s' "$ZOT_PASSWORD" | buildah login --tls-verify=false "$ZOT_REGISTRY" --username "$ZOT_USERNAME" --password-stdin - trap 'buildah logout "$ZOT_REGISTRY" >/dev/null 2>&1 || true' EXIT - image="$ZOT_REGISTRY/justme/webdrop-api:$release_tag" diff --git a/docs/deployment.md b/docs/deployment.md index 1f6c860..6e7cc45 100644 --- a/docs/deployment.md +++ b/docs/deployment.md @@ -36,7 +36,7 @@ CAPTCHA_SECRET= `.woodpecker/ci.yml` 在 push 和手动运行时执行 API 契约、Core、Web、服务端检查;每次 push 都会构建前端。`.woodpecker/release-backend.yml` 响应 `vMAJOR.MINOR.PATCH` SemVer tag;也可手动运行并传入 `RELEASE_TAG`(例如 `v0.1.0`)。测试通过后用 Linux native agent 的 Buildah 构建并推送同名后端镜像 tag。两者都通过 Woodpecker secret `gitea_clone_webdrop` 从 `https://git.oeo.one` 克隆公开仓库。 -两条流水线固定到 `ci: domain-linux-native` 的 `linux/amd64` Agent;该主机需要 Node 24、.NET 10 和 Buildah。Gitea webhook 走同 Docker 网络中的 `woodpecker-server:8000`,代码 clone 走公网 Git 域名。 +两条流水线固定到 `ci: domain-linux-native` 的 `linux/amd64` Agent;该主机需要 Node 24、.NET 10 和 Buildah。release job 在 `WOODPECKER_BACKEND_LOCAL_TEMP_DIR` 对应的持久目录缓存 Buildah 层,Dockerfile 单独缓存 NuGet restore 层。Gitea webhook 走同 Docker 网络中的 `woodpecker-server:8000`,代码 clone 走公网 Git 域名。 后端镜像发布到 `zot.oeo.one/justme/webdrop-api`。Woodpecker Linux agent 通过内网 `192.168.2.162:5000` 访问同一 Zot 仓库,发布需要 Buildah 与 tag/manual 事件可用的 secrets `registry_username`、`registry_password`。使用已发布镜像时,在 `.env` 中设置 `WEBDROP_IMAGE_TAG`,仓库名已填入 `.env.example`。 diff --git a/server/Dockerfile b/server/Dockerfile index 121f71e..d971db7 100644 --- a/server/Dockerfile +++ b/server/Dockerfile @@ -3,11 +3,18 @@ WORKDIR /src RUN apt-get update \ && apt-get install -y --no-install-recommends clang zlib1g-dev \ && rm -rf /var/lib/apt/lists/* +COPY server/Directory.Build.props ./server/ +COPY server/src/WebDrop.Api/WebDrop.Api.csproj ./server/src/WebDrop.Api/ +COPY server/src/WebDrop.Core/WebDrop.Core.csproj ./server/src/WebDrop.Core/ +COPY server/src/WebDrop.Storage/WebDrop.Storage.csproj ./server/src/WebDrop.Storage/ +RUN dotnet restore server/src/WebDrop.Api/WebDrop.Api.csproj \ + --runtime linux-x64 COPY server/ ./server/ RUN dotnet publish server/src/WebDrop.Api/WebDrop.Api.csproj \ --configuration Release \ --runtime linux-x64 \ --self-contained true \ + --no-restore \ --output /out RUN find /root/.nuget/packages/sqlitepclraw.lib.e_sqlite3 -path '*/runtimes/linux-x64/native/libe_sqlite3.so' \ -exec cp {} /out/libe_sqlite3.so \; \