如何在 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?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 GitHub Actions 中使用 env 文件?

如何在 GitHub Actions 中构建的 Dockerfile 中使用 github 令牌并尝试克隆私有存储库?

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

如何在 GitHub Actions 中缓存纱线包

如何在推送事件中跳过 GitHub Actions 作业?

如何在 Github Actions 工作流中从 Github 包访问 Maven 依赖项?