如何在 GitHub Actions 表达式语法中引用上下文值?

stm*_*stm 9 github-actions

我想在env:GitHub Action的部分设置一个环境变量,并使用GitHub Actions上下文和表达式语法。我试过这个:

jobs:
  build:
    runs-on: ubuntu-latest

    env:
      MYVAR: ${{ format('{0}:{1}', ${{ env.PATH }}, ${{ env.HOME }} ) }}

    steps:
    - name: Check environment
      run: echo $MYVAR
Run Code Online (Sandbox Code Playgroud)

这会导致错误消息:

### ERRORED 10:45:52Z

- Your workflow file was invalid: The pipeline is not valid. .github/workflows/main.yml (Line: 10, Col: 14): Unexpected symbol: '${{'. Located at position 19 within expression: format('{0}:{1}', ${{ env.PATH
Run Code Online (Sandbox Code Playgroud)

此语法:

    env:
      MYVAR: ${{ format('{0}:{1}', {{ env.PATH }}, {{ env.HOME }} ) }}
Run Code Online (Sandbox Code Playgroud)

导致错误:

### ERRORED 13:14:18Z

- Your workflow file was invalid: The pipeline is not valid. .github/workflows/main.yml (Line: 10, Col: 14): Unexpected symbol: '{{'. Located at position 19 within expression: format('{0}:{1}', {{ env.PATH
Run Code Online (Sandbox Code Playgroud)

和:

    env:
      MYVAR: ${{ format('{0}:{1}', env.PATH, env.HOME ) }}
Run Code Online (Sandbox Code Playgroud)

导致错误:

### ERRORED 13:16:12Z

- Your workflow file was invalid: The pipeline is not valid. .github/workflows/main.yml (Line: 10, Col: 14): Unrecognized named-value: 'env'. Located at position 19 within expression: format('{0}:{1}', env.PATH, env.HOME )
Run Code Online (Sandbox Code Playgroud)

我知道如何在 GitHub Actions 中使用 bash 表达式设置 env var中的解决方案Github Actions,如何在作业步骤之间共享计算值?用于设置环境变量,但我想了解表达式语法。

sma*_*c89 5

在工作流程开始时,env上下文还不存在。这就是您收到错误的原因。此外,每个作业的第一步都会看到一个空env上下文,因此即使env存在,打印的结果MYVAR也只是:

我通过一些实验得出了上述结论。

env:
  MYVAR: ${{ format('{0}:{1}', env.PATH, env.HOME) }}
Run Code Online (Sandbox Code Playgroud)

您使用的最后一个语法是正确的形式,但由于env上下文尚不存在,因此工作流无法运行。

为了向自己证明env第一步上下文实际上是空的,请尝试以下工作:

jobs
  env-dump-context:
    runs-on: ubuntu-latest
    steps:
      - run: echo env is: ${{ toJSON(env) }}
Run Code Online (Sandbox Code Playgroud)

话虽这么说,仍然可以满足您的需求:

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - run: printf "MYVAR=${PATH}:${HOME}" | tee --append "$GITHUB_ENV"
      - name: Check environment
        run: echo ${{env.MYVAR}}
Run Code Online (Sandbox Code Playgroud)


stm*_*stm 3

正如 @jonrsharpe 指出的,不可能env在工作流环境变量的值中使用上下文。这是在这里讨论的:

https://github.community/t5/GitHub-Actions/How-to-use-env-context/td-p/38951