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

Posted

技术标签:

【中文标题】如何在 GitHub Actions 中使用 bash 表达式设置 env var?【英文标题】:How do I set an env var with a bash expression in GitHub Actions? 【发布时间】:2020-01-17 23:29:03 【问题描述】:

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

    - name: Tag image
      env:
        GITHUB_SHA_SHORT: $ $(echo $GITHUB_SHA | cut -c 1-6) 
      ..do other things...

但是,这种天真的尝试失败了。 According to the docs 这个好像不支持;一个稍微干净的解决方法就可以了。

【问题讨论】:

也许set-env 可以在前面的步骤中使用。 help.github.com/en/articles/… 【参考方案1】:

这个问题的原始答案使用了 Actions runner 函数set-env。由于 security vulnerability set-env 已被弃用,不应再使用。

这是设置环境变量的新方法。

name: my workflow
on: push
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Set env
      run: echo "GITHUB_SHA_SHORT=$(echo $GITHUB_SHA | cut -c 1-6)" >> $GITHUB_ENV
    - name: Test
      run: echo $GITHUB_SHA_SHORT

设置环境变量 echo "name=value" >> $GITHUB_ENV

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

(来自https://help.github.com/en/actions/reference/workflow-commands-for-github-actions#setting-an-environment-variable)

使用输出到 $GITHUB_ENV 方法的示例:

    echo "GITHUB_SHA_SHORT=$(echo $GITHUB_SHA | cut -c 1-6)" >> $GITHUB_ENV

这是在工作流中引用环境变量的另一种方法。

    - name: Test
      run: echo $ env.GITHUB_SHA_SHORT 

【讨论】:

删除了多余的大括号(不必要,因为它们成为值的一部分)并添加了到文档的链接。谢谢! @evilSnobu 不确定它是否适合您的用例,但还有另一种类似的方法可以使用set-output 将值传递给后续步骤,我在此处详细介绍了该方法。 ***.com/questions/57819539/… 只是一个简短的说明(因为这让我很头疼)。如果您使用的是 Windows/PowerShell 环境,则必须使用 $env:GITHUB_ENV,例如 run: echo "GITHUB_SHA_SHORT=$(echo $GITHUB_SHA | cut -c 1-6)" >> $env:GITHUB_ENV 小心小字:)“创建或更新环境变量的操作无法访问新值,但作业中的所有后续操作都可以访问。” 但是如果我想在多个作业中使用这个变量呢?有没有办法定义工作流级别的变量?【参考方案2】:

文档https://docs.github.com/en/free-pro-team@latest/actions/reference/environment-variables#about-environment-variables 描述了两种定义环境变量的方法。

要设置自定义环境变量,需要指定变量 在工作流文件中。您可以为步骤定义环境变量, 作业,或使用作业的整个工作流程。.steps[*].env, jobs..env 和 env 关键字。

steps:
  - name: Hello world
    run: echo Hello world $FIRST_NAME $middle_name $Last_Name!
    env:
      FIRST_NAME: Mona
      middle_name: The
      Last_Name: Octocat

也可以使用 GITHUB_ENV 环境文件来设置环境 工作流中的以下步骤可以使用的变量。这 环境文件可以直接由操作使用或作为外壳使用 使用 run 关键字在工作流文件中执行命令。

【讨论】:

好的,但是你能在env: FIRST_NAME:下计算一个bash表达式吗? 对我来说,它工作得很好,但我使用的是 env。变种。来自 python 脚本。谢谢!

以上是关于如何在 GitHub Actions 中使用 bash 表达式设置 env var?的主要内容,如果未能解决你的问题,请参考以下文章