如何在工作流程级别 github-actions 上使用 env 变量

sha*_*eel 9 github-actions

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

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
Run Code Online (Sandbox Code Playgroud)

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

Gui*_*urd 10

环境变量的命名约定解释说:

您设置的指向文件系统上某个位置的任何新环境变量都应该有一个_PATH后缀。和default 变量是此约定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"
Run Code Online (Sandbox Code Playgroud)

关于您希望在工作流程中实现的行为的可能性,您不能在工作流程中设置变量并将它们用作同一级别的路径,因为:

将作业发送到运行器后,变量将在运行器操作系统中替换。

参考

解决方法可能是每次发生事件时触发工作流push,使用路径过滤器操作和 if 条件来执行特定步骤(如果它与您的路径匹配)。

这不是优化方面的最佳解决方案,但它会起作用。

  • 我想在 on -> Push -> paths 中使用变量。是否可以? (4认同)