如何在GitHub Actions中使用bash表达式设置env var?

evi*_*obu 3 github-actions

在GitHub Actions中,我想评估bash表达式,然后将其分配给环境变量-

    - name: Tag image
      env:
        GITHUB_SHA_SHORT: ${{ $(echo $GITHUB_SHA | cut -c 1-6) }}
      ..do other things...
Run Code Online (Sandbox Code Playgroud)

但是,这种幼稚的尝试失败了。根据文档,这似乎不受支持,但是稍微干净的解决方法就可以了。

Shi*_*waj 11

  - name: Set and Retrieve Github ENV variables
    shell: bash
    run: |

      # define variables      
      tests=16
      failures=2

      # set them as GitHub ENV variables
      echo "Tests=$tests" >> $GITHUB_ENV
      echo "Failures=$failures" >> $GITHUB_ENV

      # retrieve these GitHub ENV variables
      echo "${{ env.Failures }} out of ${{ env.Tests }} tests failed on CI"
Run Code Online (Sandbox Code Playgroud)

输出

  2 out of 16 test failed on CI
Run Code Online (Sandbox Code Playgroud)

  • 对我有用的是在分配变量时在 $GITHUB_ENV 周围添加引号。也就是说,`...>>“$GITHUB_ENV”`。而且我只能在新步骤中访问该变量,而不能在分配该变量的同一步骤中访问该变量。这是我关注的 GitHub 文档页面:https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#example-of-writing-an-environment-variable-到-github_env (2认同)
  • 您无法在同一步骤中访问以这种方式创建的环境变量,它们将在下一步及以后可用。 (2认同)

pet*_*ans 7

set-env在上一步中使用对我而言有效。

name: my workflow
on: push
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@master
    - name: Set env
      run: echo ::set-env name=GITHUB_SHA_SHORT::$(echo $GITHUB_SHA | cut -c 1-6)
    - name: Test
      run: echo $GITHUB_SHA_SHORT
Run Code Online (Sandbox Code Playgroud)

设置环境变量: set-env ::set-env name={name}::{value}

为作业中接下来运行的任何操作创建或更新环境变量。创建或更新环境变量的操作无权访问新值,但是作业中的所有后续操作都可以访问。环境变量区分大小写,并且可以包含标点符号。

(来自https://help.github.com/en/articles/development-tools-for-github-actions#set-an-environment-variable-set-env

这是在工作流中引用环境变量的替代方法。

    - name: Test
      run: echo ${{ env.GITHUB_SHA_SHORT }}
Run Code Online (Sandbox Code Playgroud)

  • 但是如果我想在多个作业中使用这个变量怎么办?有没有办法定义工作流程级别变量? (3认同)
  • @evilSnobu不确定是否适合您的用例,但是还有另一种类似的方法,该方法使用“ set-output”将值传递给以后的步骤,我已经在这里详细介绍了。/sf/ask/4047367761/#57989070 (2认同)
  • 只是一个简短的说明(因为这让我头疼)。如果您使用的是 Windows/PowerShell 环境,则必须使用 `$env:GITHUB_ENV`,即类似 `run: echo "GITHUB_SHA_SHORT=$(echo $GITHUB_SHA | cut -c 1-6)" >> $env: GITHUB_ENV`。 (2认同)
  • 请注意细则:)“创建或更新环境变量的操作无权访问新值,但作业中的所有后续操作都可以访问。” (2认同)