From 21e1fd1fbba31f007a20ec9c9e187458c006e1b7 Mon Sep 17 00:00:00 2001 From: "3371392206@qq.com" <3371392206@qq.com> Date: Mon, 28 Sep 2026 23:30:57 +0800 Subject: [PATCH] =?UTF-8?q?ci(docker):=20=E4=BF=AE=20workflow=20=E9=9D=9E?= =?UTF-8?q?=E6=B3=95=E8=A1=A8=E8=BE=BE=E5=BC=8F,=20secrets=20=E6=94=B9?= =?UTF-8?q?=E7=BB=8F=20job=20env=20=E9=80=8F=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit GitHub Actions 拒绝加载本 workflow, 报: Invalid workflow file: .github/workflows/docker.yml#L1 (Line: 49, Col: 13): Unrecognized named-value: 'secrets'. Located at position 40 within expression: github.event_name != 'pull_request' && secrets.DOCKERHUB_USERNAME != '' 原因: secrets 上下文不允许在 step 的 if: 表达式里引用(GitHub 沙箱限制)。 secrets 只在 with: / env: / run: 等位置可用, if: 里必须走 env 中转。 修复: - 新增 job 级 env: DOCKERHUB_USERNAME / DOCKERHUB_TOKEN (值来自 secrets) - DockerHub login step: if 改 env.DOCKERHUB_USERNAME != '' - DockerHub login step: username/password 改读 env.* - metadata-action images: DockerHub 那行改 env.DOCKERHUB_USERNAME, enable 判断同样改 env 上下文 副作用: 无。secret 未配置时行为不变(跳过 login + 不渲染 DockerHub image)。 已用 js-yaml 校验 YAML 结构合法, 并扫描确认全部 step 的 if: 不含 secrets 引用。 --- .github/workflows/docker.yml | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index cb458f7..3f32791 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -25,6 +25,11 @@ jobs: permissions: contents: read packages: write + # secrets 不能在 step 的 if: 表达式里直接引用(GitHub 沙箱限制), + # 必须先经 job 级 env 透传,再用 env.XXX != '' 判断。 + env: + DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }} + DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }} steps: - name: Checkout uses: actions/checkout@v4 @@ -46,11 +51,11 @@ jobs: password: ${{ secrets.GITHUB_TOKEN }} - name: Login to DockerHub - if: github.event_name != 'pull_request' && secrets.DOCKERHUB_USERNAME != '' + if: env.DOCKERHUB_USERNAME != '' uses: docker/login-action@v3 with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} + username: ${{ env.DOCKERHUB_USERNAME }} + password: ${{ env.DOCKERHUB_TOKEN }} - name: Extract version from git id: version @@ -63,10 +68,11 @@ jobs: uses: docker/metadata-action@v5 with: # 多个 image base:metadata-action 会为每个 base 渲染完整 tag 列表。 - # DockerHub image 用 enable 保护:username secret 没设时不渲染,避免非法 image 名。 + # DockerHub image 用 enable 保护:username 未配置(secret 未设)时不渲染, + # 避免生成 "docker.io//ttshub" 这种非法 image 名导致 metadata 步骤报错。 images: | name=${{ env.REGISTRY }}/${{ github.repository }} - name=docker.io/${{ secrets.DOCKERHUB_USERNAME }}/ttshub,enable=${{ secrets.DOCKERHUB_USERNAME != '' }} + name=docker.io/${{ env.DOCKERHUB_USERNAME }}/ttshub,enable=${{ env.DOCKERHUB_USERNAME != '' }} tags: | type=semver,pattern={{version}} type=semver,pattern={{major}}.{{minor}}