如何向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
相关产品推荐
相关产品推荐

