在工作流中实现变量和脚本

已完成

了解工作流文件的组件后,让我们探索如何针对各种方案自定义这些工作流。 在本单元中,我们将重点介绍如何使用变量和脚本来优化工作流。 变量提供了一种方法来存储和重用非敏感的配置信息。 可以将任何配置数据(如编译器标志、用户名或服务器名称)存储为变量。 变量在运行工作流的运行器计算机上内插。 在操作或工作流步骤中运行的命令可以创建、读取和修改变量。

可以设置自己的自定义变量或使用 GitHub 自动设置的默认环境变量。 可以通过两种方式创建自定义变量。

  • 要定义要在单个工作流中使用的环境变量,可以使用工作流文件中的 env 键。
  • 要跨多个工作流定义配置变量,可以在组织、存储库或环境级别定义它。

为单个工作流定义环境变量

要为单个工作流设置自定义环境变量,可以使用工作流文件中的 env 键定义该变量。 此方法设置的自定义变量的范围仅限于定义自定义变量的元素。 可以定义其范围限定为以下项的变量:

  • 整个工作流,在工作流文件的顶层使用 env
  • 工作流内作业的内容,使用 jobs.<job_id>.env
  • 作业内的特定步骤,使用 jobs.<job_id>.steps[*].env

注释

同时jobs.<job_id>.envjobs.<job_id>.steps[*].env实现本模块稍后介绍的上下文。

以下工作流示例实现两个变量, DAY_OF_WEEK 并在 Greeting 运行时生成问候语。

name: Greeting on variable day

on:
  workflow_dispatch

env:
  DAY_OF_WEEK: Monday

jobs:
  greeting_job:
    runs-on: ubuntu-latest
    env:
      Greeting: Hello
    steps:
      - name: "Say Hello"
        run: echo "$Greeting, today is $DAY_OF_WEEK!"

环境变量的命名约定

设置环境变量时,不能使用任何默认环境变量名称。 如果尝试替代其中一个默认变量的值,则会忽略赋值。

小窍门

有关默认环境变量的完整列表,请访问 默认环境变量

为存储库创建配置变量

若要在 GitHub 上为个人帐户存储库创建机密或变量,你必须是存储库所有者。 若要在 GitHub 上为组织存储库创建机密或变量,必须具有 admin 访问权限。 最后,要通过 REST API 为个人帐户存储库或组织存储库创建机密或变量,必须具有协作者访问权限。

配置变量优先级

如果同名的变量存在于多个级别,则最低级别的变量优先。 例如,如果组织级变量的名称与存储库级变量相同,则存储库级变量优先。 同样,如果组织、存储库和环境都具有名称相同的变量,则环境变量优先。

将脚本添加到工作流

可以使用 GitHub Actions 工作流运行脚本和 shell 命令,然后在分配的运行程序上执行这些脚本和 shell 命令。 以下示例演示如何使用 run 关键字在运行程序上执行命令 npm install -g bats

jobs:
  example-job:
    runs-on: ubuntu-latest
    steps:
      - run: npm install -g bats

若要运行存储在存储库中的脚本,必须先将存储库检出到运行器。 以下示例:签出存储库;设置工作目录 - 存储库中的脚本位置;并运行 my-script.sh 脚本。

jobs:
  example-job:
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: ./scripts
    steps:
      - name: Check out the repository to the runner
        uses: actions/checkout@v4  
      - name: Run a script
        run: ./my-script.sh

你希望工作流作业运行的任何脚本都必须是可执行的。 可以将脚本作为参数传递给运行脚本(例如)的解释器, run: bash script.sh 或者通过将文件本身设置为可执行文件。