You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向build-push-action传递多个命名Secret?

适配逗号分隔多Secret名称的修改方案

要实现支持逗号分隔的多个Secret名称传递给build-push-action,只需按以下步骤修改可复用工作流:

1. 更新工作流输入定义

将原有的单个Secret输入参数(如build_repo_secret_name)改为支持逗号分隔字符串的参数,建议更名为复数形式(如build_repo_secret_names),明确其可接受多个值:

inputs:
  build_repo_secret_names:
    description: '逗号分隔的Docker Build Secret名称列表(如A_SECRET_NAME_1,A_SECRET_NAME_2)'
    required: false
    type: string

2. 拆分并格式化Secret列表

在工作流中,使用GitHub Actions内置函数将逗号分隔的字符串拆分为数组,并转换为build-push-action所需的secrets参数格式:

  • 用split()函数拆分字符串为数组
  • 用map()函数将每个Secret名称转换为{name: 名称, value: 对应仓库Secret值}的对象结构
  • 用trim()处理可能存在的空格(避免用户输入时的空格导致错误)

3. 修改build-push-action的配置

将处理后的Secret列表传递给动作的secrets参数,完整示例如下:

jobs:
  build-and-push:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3

      - name: Login to Docker Hub
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}

      - name: Build and push
        uses: docker/build-push-action@v5
        with:
          context: .
          push: true
          tags: your-image:latest
          secrets: |
            ${{ join(map(split(inputs.build_repo_secret_names, ','), '{"name": "' + trim(item) + '", "value": "${{ secrets.' + trim(item) + ' }}"}'), '\n') }}

关键补充

如果输入为空(未提供Secret名称),split()会返回包含空字符串的数组,此时可以加条件判断避免传递无效值:

secrets: ${{ inputs.build_repo_secret_names != '' && join(map(split(inputs.build_repo_secret_names, ','), '{"name": "' + trim(item) + '", "value": "${{ secrets.' + trim(item) + ' }}"}'), '\n') || '' }}

同时要确保仓库中已存在所有指定名称的Secret,否则动作会因无法找到对应Secret而失败。

内容的提问来源于stack exchange,提问作者TaQuangTu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 05:12:06