在持续集成和持续交付(CI/CD)工作流中,GitHub Actions 是一个非常强大且灵活的工具。它让开发者能够自动化构建、测试和部署流程。然而,在某些情况下,我们希望能够在每次手动触发工作流时动态地设置一些参数,而不是在每次运行时都修改硬编码的值。本文,我们将介绍如何通过 workflow_dispatch
事件来实现这一功能,从而使得每次执行时可以手动修改命令行参数。
通常,GitHub Actions 会通过事件触发(例如推送代码、PR 合并等)来执行工作流。在工作流配置文件中,我们可以为每个步骤指定静态的参数。然而,有时候我们希望在手动运行工作流时提供灵活的参数设置。GitHub 提供了 workflow_dispatch
事件,可以让我们在手动触发工作流时,指定自定义的输入参数。
为了在每次运行 GitHub Actions 时灵活地设置参数,我们可以通过 workflow_dispatch
来定义可自定义的输入(inputs
),并在工作流的执行过程中引用这些输入。
以下是实现手动设置命令参数的步骤:
在你的工作流配置文件中(通常是 .github/workflows
目录下的 YAML 文件),使用 workflow_dispatch
事件来允许手动触发工作流,并在其中定义自定义的输入参数。
name: Custom Parameters Workflow
on:
workflow_dispatch:
inputs:
parameter1:
description: "输入参数1"
required: true
default: "默认值1"
parameter2:
description: "输入参数2"
required: true
default: "默认值2"
parameter3:
description: "输入参数3"
required: true
default: "默认值3"
jobs:
runJob:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Run with custom parameters
run: |
echo "Running with parameter1: ${{ github.event.inputs.parameter1 }}"
echo "Running with parameter2: ${{ github.event.inputs.parameter2 }}"
echo "Running with parameter3: ${{ github.event.inputs.parameter3 }}"
workflow_dispatch
事件:此事件用于手动触发工作流。当你想手动运行工作流时,GitHub 会为你提供一个输入界面,可以让你在运行前自定义参数。inputs
部分:在 workflow_dispatch
中定义的 inputs
将作为用户输入的参数。每个参数都有一个 description
(描述)、required
(是否必填)和 default
(默认值)。如果没有手动提供值,工作流会使用默认值。${{ github.event.inputs.<input_name> }}
:在工作流步骤中,我们通过 ${{ github.event.inputs.<input_name> }}
引用用户输入的参数。这些输入值会替换为用户提供的实际值。inputs
中定义的所有参数。⚠️ 有一点需要注意,如果你输出的参数中存在"
需要使用\"
进行转义,否则可能出现参数获取异常或者无法获取你填入的参数等问题。
在工作流运行过程中,你会看到 GitHub Actions 根据你提供的参数执行相应的任务。例如,在 run
步骤中,我们打印了所有的参数值:
Running with parameter1: <用户输入的值>
Running with parameter2: <用户输入的值>
Running with parameter3: <用户输入的值>
通过这种方式,每次手动触发工作流时,你都可以根据需要调整参数,而无需修改工作流文件本身。
除了基本的输入参数,你还可以根据需要添加更多复杂的逻辑,比如:
例如,如果用户没有提供某些必须的参数,你可以使用 GitHub Actions 的条件逻辑(如 if
语句)来跳过特定步骤,或者根据默认值进行处理。
GitHub Actions 的 workflow_dispatch
事件是一个非常强大的功能,能够让你在每次手动触发工作流时,灵活地设置输入参数。通过结合 inputs
和 ${{ github.event.inputs.<input_name> }}
,你可以在每次执行时动态地调整任务参数,而无需修改工作流文件本身。这样可以大大提升工作流的灵活性和可配置性,尤其适用于那些需要用户手动干预的任务。