如何在 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 令牌并尝试克隆私有存储库?