From 2f2156089ec9f23bf5ff129a3c9b127aa70447f3 Mon Sep 17 00:00:00 2001 From: cqh963852 Date: Fri, 9 Oct 2026 00:35:44 +0800 Subject: [PATCH] =?UTF-8?q?ci:=20=E9=80=82=E9=85=8D=20ephemerd=E2=80=94?= =?UTF-8?q?=E2=80=94job=20=E5=AE=B9=E5=99=A8=E6=97=A0=E7=89=B9=E6=9D=83?= =?UTF-8?q?=E4=B8=94=E5=81=87=20socket=20=E4=B8=8D=E6=94=AF=E6=8C=81=20bui?= =?UTF-8?q?ld,=E5=BC=83=20buildah=20=E6=94=B9=E4=B8=BA=20job=20=E5=86=85?= =?UTF-8?q?=E7=9B=B4=E6=8E=A5=20yarn=20=E6=9E=84=E5=BB=BA(ubuntu-24.04=20?= =?UTF-8?q?=E9=95=9C=E5=83=8F,node=20=E9=A2=84=E8=A3=85);runner=20?= =?UTF-8?q?=E7=94=B1=20idealjs=20=E4=BB=93=20ephemerd=20=E9=83=A8=E7=BD=B2?= =?UTF-8?q?=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitea/workflows/build-tutorial.yml | 45 +++++++---------------------- 1 file changed, 11 insertions(+), 34 deletions(-) diff --git a/.gitea/workflows/build-tutorial.yml b/.gitea/workflows/build-tutorial.yml index 4638c99..766f59d 100644 --- a/.gitea/workflows/build-tutorial.yml +++ b/.gitea/workflows/build-tutorial.yml @@ -1,9 +1,10 @@ name: Build Tutorial -# 主仓库 gitea.idealjs.com/idealjs/stack 的 CI:打包新教程站。 -# 构建环境全部封装在仓库根 Dockerfile(node24-bookworm-slim + yarn4 + npmmirror), -# runner 用 buildah 无 daemon 执行——不依赖 runner 宿主的 node/docker,也不碰 github.com。 -# 源码:gitea API tarball(同机房);产物留在镜像 stack-tutorial:ci 内(/repo/apps/tutorial/dist) +# 主仓库 gitea.idealjs.com/idealjs/stack 的 CI:构建校验新教程站。 +# runner 由 ephemerd 管理(每 job 一次性容器,跑完即毁;部署配置见 idealjs 仓 packages/ephemerd)。 +# job 跑在 gitea/runner-images:ubuntu-24.04 内(node 预装);依赖与构建直接在 job 内执行—— +# ephemerd 的 job 容器无特权且假 docker socket 暂不支持 build,buildah/docker 构建交由部署侧完成。 +# 源码:gitea API tarball(同机房) on: push: branches: [main] @@ -13,44 +14,20 @@ on: env: YARN_NPM_REGISTRY_SERVER: https://registry.npmmirror.com API: https://gitea.idealjs.com/api/v1/repos/idealjs/stack - # runner 是套娃容器——buildah 的 OCI runtime(runc/crun)在内部过不了 cgroup 关,钉死 chroot 隔离 - BUILDAH_ISOLATION: chroot jobs: build: - name: Build @stack/tutorial (buildah) + name: Build @stack/tutorial (ephemerd) runs-on: ubuntu-latest steps: - name: 拉源码(gitea tarball) run: | wget -q "$API/archive/$GITHUB_SHA.tar.gz" -O /tmp/src.tgz tar -xzf /tmp/src.tgz --strip-components=1 - ls Dockerfile + ls package.json - - name: 装 buildah(runner 无 docker;buildah 无 daemon 即可构建) - run: | - command -v buildah >/dev/null && exit 0 - # 服务器在阿里云——apk 走阿里镜像源(dl-cdn 直连极慢) - sed -i 's#https://dl-cdn.alpinelinux.org#https://mirrors.aliyun.com#g' /etc/apk/repositories - # netavark: buildah 配容器网络的助手,alpine 不会随 buildah 自动装 - apk add --no-cache buildah netavark + - name: 安装依赖(yarn4 经 yarnPath 直调,不经 corepack) + run: node .yarn/releases/yarn-4.9.2.cjs install --immutable - - name: buildah 登录阿里云镜像仓(基座为私有 idealjs/node) - env: - ALIYUN_DOCKER_USERNAME: ${{ secrets.ALIYUN_DOCKER_USERNAME }} - ALIYUN_DOCKER_PASSWORD: ${{ secrets.ALIYUN_DOCKER_PASSWORD }} - run: | - printf '%s' "$ALIYUN_DOCKER_PASSWORD" | buildah login --username "$ALIYUN_DOCKER_USERNAME" --password-stdin registry.cn-hangzhou.aliyuncs.com - # authfile 按域名区分——构建走 VPC 端点,需单独 login(凭据相同) - printf '%s' "$ALIYUN_DOCKER_PASSWORD" | buildah login --username "$ALIYUN_DOCKER_USERNAME" --password-stdin registry-vpc.cn-hangzhou.aliyuncs.com - - - name: buildah 构建镜像(环境封装在 Dockerfile) - run: | - # runner 与镜像仓同 region(杭州)——基座走 VPC 内网端点,快且不占公网带宽 - buildah build --storage-driver=vfs --build-arg BASE_REGISTRY=registry-vpc.cn-hangzhou.aliyuncs.com -f Dockerfile -t stack-tutorial:ci . - - - name: buildah 登出(清掉 runner 上 auth.json 里的凭据;长驻 runner 不留凭据) - if: always() - run: | - buildah logout registry.cn-hangzhou.aliyuncs.com || true - buildah logout registry-vpc.cn-hangzhou.aliyuncs.com || true + - name: 构建 + run: node .yarn/releases/yarn-4.9.2.cjs workspace @stack/tutorial build