【问题标题】:How to reference context values in GitHub Actions expression syntax?如何在 GitHub Actions 表达式语法中引用上下文值?
【发布时间】:2020-05-05 15:56:44
【问题描述】:

我想在 GitHub Action 的 env: 部分设置环境变量并使用 Contexts and expression syntax for GitHub Actions。我试过这个:

jobs:
  build:
    runs-on: ubuntu-latest

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

    steps:
    - name: Check environment
      run: echo $MYVAR

这会导致错误消息:

### 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

这个语法:

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

导致错误:

### 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

和:

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

导致错误:

### 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 )

我知道How do i set an env var with a bash expression in GitHub Actions?Github Actions, how to share a calculated value between job steps? 中设置环境变量的解决方案,但我想了解表达式语法。

【问题讨论】:

  • 你为什么把${{放在${{里面?另请注意,format 采用基于 0 的索引。
  • 因为它在help.github.com/en/actions/… 下说:“上下文是访问有关工作流运行、运行器环境、作业和步骤的信息的一种方式。上下文使用表达式语法。{{ }}”
  • 该页面上的所有示例(包括使用上下文的示例)都没有一个以上的${{。我猜你想要${{ format('{0}:{1}', env.PATH env.HOME) }}
  • 感谢您提供有关基于 0 的索引的信息,我错过了。但这无济于事。使用您建议的语法,我得到:“-您的工作流文件无效:管道无效。.github/workflows/main.yml(行:10,列:14):无法识别的命名值:'env'。位于在表达式中的第 19 位:format('{0}:{1}', env.PATH, env.HOME )"
  • 那么您是否针对该新错误消息进行了研究?

标签: github-actions


【解决方案1】:

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

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

【讨论】:

【解决方案2】:

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

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

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

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

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

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

话虽如此,您仍然可以满足您的需求:

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

【讨论】:

    猜你喜欢
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 2020-03-10
    • 2020-01-14
    • 2020-10-19
    • 2022-10-17
    • 2020-05-27
    • 2021-06-29
    相关资源
    最近更新 更多