如何在 GitHub Actions 的工作流程级别上使用环境变量

8

我有一个简单的工作流程:

name: Test CI

env:
  path_to_watch_for_commits: 'testdir/testfile'

on:
  push:
    branches:
      - master
    paths:
      - ${{ env.path_to_watch_for_commits }}

  workflow_dispatch:

jobs:
  build:
    runs-on:  ubuntu

    steps:
      - uses: actions/checkout@v2

我想在路径中使用变量path_to_watch_for_commits,但这个语法是错误的。我还尝试了 ${{ path_to_watch_for_commits }}$path_to_watch_for_commits ,但没有得到结果。我做错了什么?

1个回答

9

这里有一个名为环境变量命名约定的文档解释:

任何指向文件系统位置的新环境变量都应该有一个 _PATH 后缀。但是,HOMEGITHUB_WORKSPACE 默认变量是例外,因为单词 "home" 和 "workspace" 已经暗示了一个位置。

关于在工作流中不同级别使用环境变量的用法,这里有一个包含 WORKFLOW、JOB 和 STEP 变量的示例:

name: Example

on: [push, workflow_dispatch]

env:
  WORKFLOW_VARIABLE: WORKFLOW

jobs:
  test:
    runs-on: ubuntu-latest
    env:
      JOB_VARIABLE: JOB
    steps:
      - name: Run Commands with various variables
        if: ${{ env.WORKFLOW_VARIABLE == 'WORKFLOW' }}
        env:
          STEP_VARIABLE: STEP
        run: |
          echo "Hello World"
          echo "This is the $WORKFLOW_VARIABLE environment variable"
          echo "This is the $JOB_VARIABLE environment variable"
          echo "This is the $STEP_VARIABLE environment variable"

关于您想在工作流程中实现的行为可能性,您不能在工作流程中设置变量并将它们用作相同级别的路径,因为:
变量是在作业发送到运行程序后在运行程序操作系统中替换的。
一个解决方法是每次在 push 事件上触发工作流程,使用 paths-filter 操作和 if 条件来执行特定步骤,如果匹配您的路径。
这不是最优化的解决方案,但它可以工作。参考 paths-filter 操作

3
我想在 on -> push -> paths 中使用变量,这可行吗? - sharedfeel
根据我在文档和社区中查找的内容,它不起作用(因为变量是在作业发送到运行程序后在运行程序操作系统中替换的)。参考。一个解决方法是使用 paths-filter action 在每次推送时触发工作流程,并使用 if 条件执行特定步骤以匹配您的路径。这并不是最优化的解决方案,但它可以工作。我已经编辑了上面的内容。 - GuiFalourd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接