在 GitHub Actions 中,我想评估一个 bash 表达式,然后将其分配给一个环境变量:
- name: Tag image
env:
GITHUB_SHA_SHORT: ${{ $(echo $GITHUB_SHA | cut -c 1-6) }}
..do other things...
然而,这种天真的尝试失败了。根据文档,这似乎不受支持;一个有点干净的解决方法就可以了。
在 GitHub Actions 中,我想评估一个 bash 表达式,然后将其分配给一个环境变量:
- name: Tag image
env:
GITHUB_SHA_SHORT: ${{ $(echo $GITHUB_SHA | cut -c 1-6) }}
..do other things...
然而,这种天真的尝试失败了。根据文档,这似乎不受支持;一个有点干净的解决方法就可以了。
这个问题的原始答案使用了 Actions runner function set-env
。由于存在安全漏洞 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
为作业中接下来运行的任何操作创建或更新环境变量。创建或更新环境变量的操作无权访问新值,但作业中的所有后续操作都可以访问。环境变量区分大小写,您可以包含标点符号。
使用输出到 $GITHUB_ENV 方法的示例:
echo "GITHUB_SHA_SHORT=$(echo $GITHUB_SHA | cut -c 1-6)" >> $GITHUB_ENV
这是在工作流中引用环境变量的另一种方法。
- name: Test
run: echo ${{ env.GITHUB_SHA_SHORT }}
文档https://docs.github.com/en/free-pro-team@latest/actions/reference/environment-variables#about-environment-variables描述了两种定义环境变量的方法。
要设置自定义环境变量,您需要在工作流文件中指定变量。您可以使用 jobs.<job_id>.steps[*].env、jobs.<job_id>.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 关键字作为工作流文件中的 shell 命令使用。