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

能否在GitHub Actions工作流启动时动态获取输入选项值?

GitHub Actions 动态生成部署输入选项的解决办法

GitHub Actions 本身要求工作流的输入参数必须在 .github/workflows 下的配置文件里静态写死,没法直接在启动工作流的UI界面里动态加载ECR的镜像标签当选项。不过可以通过拆分两步工作流的方式实现你的需求:

具体实现步骤

1. 先跑前置工作流拉取ECR标签,触发部署事件

创建一个专门用来拉取标签的工作流,手动触发它后,会自动调用AWS CLI获取ECR里的镜像标签,再通过GitHub的仓库事件把标签列表传递给部署工作流。

示例代码:

name: 拉取ECR标签并触发部署
on: 
  workflow_dispatch: # 手动触发这个前置流程

jobs:
  获取标签:
    runs-on: ubuntu-latest
    steps:
      - name: 配置AWS凭证
        uses: aws-actions/configure-aws-credentials@v4
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: us-east-1 # 替换成你的ECR区域

      - name: 拉取ECR镜像标签
        id: get-tags
        run: |
          # 过滤掉null标签,用逗号拼接成字符串
          TAGS=$(aws ecr list-images --repository-name 你的镜像仓库名 --query 'imageIds[*].imageTag' --output json | jq -r '.[] | select(. != null)' | paste -sd "," -)
          echo "tags=$TAGS" >> $GITHUB_OUTPUT

      - name: 触发部署工作流
        uses: peter-evans/repository-dispatch@v3
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
          event-type: deploy-with-tags
          client-payload: '{"tags": "${{ steps.get-tags.outputs.tags }}"}'

2. 部署工作流接收标签,提供选择(或自动处理)

部署工作流监听上面的deploy-with-tags事件,接收到标签列表后,可以做两种处理:

  • 如果需要手动选择:把标签解析出来后,通过脚本生成一个交互式选择(仅限自托管运行器,GitHub托管的机器不支持交互);
  • 如果是自动化场景:直接从标签列表中选取最新的或者指定规则的标签进行部署。

示例部署工作流片段:

name: 部署到ECS
on:
  repository_dispatch:
    types: [deploy-with-tags]

jobs:
  部署:
    runs-on: ubuntu-latest
    steps:
      - name: 解析标签列表
        id: parse-tags
        run: |
          TAGS=${{ github.event.client_payload.tags }}
          # 把逗号分隔的字符串转成数组
          echo "tag_list=($TAGS)" >> $GITHUB_OUTPUT

      - name: 选择并部署最新标签
        run: |
          # 取标签列表里的最后一个(假设是最新的)
          LATEST_TAG=${{ steps.parse-tags.outputs.tag_list[-1] }}
          echo "开始部署镜像标签: $LATEST_TAG"
          # 这里写部署到ECS的命令,比如aws ecs update-service等

核心限制要注意

GitHub官方的workflow_dispatch输入参数必须静态定义在工作流文件里,没法在启动工作流的UI界面直接展示动态生成的选项。所有动态获取的标签只能通过间接方式传递,要么靠前置工作流转递后自动选择,要么在自托管环境里做交互式选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 10:05:10