ci(docker): 修 workflow 非法表达式, secrets 改经 job env 透传
Docker Publish / build-and-push (push) Canceled after 0s
Docker Publish / build-and-push (push) Canceled after 0s
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 引用。
This commit is contained in:
@@ -25,6 +25,11 @@ jobs:
|
|||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
packages: write
|
packages: write
|
||||||
|
# secrets 不能在 step 的 if: 表达式里直接引用(GitHub 沙箱限制),
|
||||||
|
# 必须先经 job 级 env 透传,再用 env.XXX != '' 判断。
|
||||||
|
env:
|
||||||
|
DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||||
|
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
@@ -46,11 +51,11 @@ jobs:
|
|||||||
password: ${{ secrets.GITHUB_TOKEN }}
|
password: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
- name: Login to DockerHub
|
- name: Login to DockerHub
|
||||||
if: github.event_name != 'pull_request' && secrets.DOCKERHUB_USERNAME != ''
|
if: env.DOCKERHUB_USERNAME != ''
|
||||||
uses: docker/login-action@v3
|
uses: docker/login-action@v3
|
||||||
with:
|
with:
|
||||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
username: ${{ env.DOCKERHUB_USERNAME }}
|
||||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
password: ${{ env.DOCKERHUB_TOKEN }}
|
||||||
|
|
||||||
- name: Extract version from git
|
- name: Extract version from git
|
||||||
id: version
|
id: version
|
||||||
@@ -63,10 +68,11 @@ jobs:
|
|||||||
uses: docker/metadata-action@v5
|
uses: docker/metadata-action@v5
|
||||||
with:
|
with:
|
||||||
# 多个 image base:metadata-action 会为每个 base 渲染完整 tag 列表。
|
# 多个 image base:metadata-action 会为每个 base 渲染完整 tag 列表。
|
||||||
# DockerHub image 用 enable 保护:username secret 没设时不渲染,避免非法 image 名。
|
# DockerHub image 用 enable 保护:username 未配置(secret 未设)时不渲染,
|
||||||
|
# 避免生成 "docker.io//ttshub" 这种非法 image 名导致 metadata 步骤报错。
|
||||||
images: |
|
images: |
|
||||||
name=${{ env.REGISTRY }}/${{ github.repository }}
|
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: |
|
tags: |
|
||||||
type=semver,pattern={{version}}
|
type=semver,pattern={{version}}
|
||||||
type=semver,pattern={{major}}.{{minor}}
|
type=semver,pattern={{major}}.{{minor}}
|
||||||
|
|||||||
Reference in New Issue
Block a user