如何在由GitHub Action运行的Bash脚本中访问Action环境变量?

21

我无法从GitHub Action配置文件顶层定义的环境变量中访问在该操作中运行的脚本。

例如,给定以下配置文件:

name: x-pull-request
on: pull_request
env:
  FOO: bar
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
      - name: does a thing
        run: ./scripts/do-a-thing.sh

...以及以下脚本:

X=${FOO:default}
echo "X: $X" # X: default

配置文件中定义的FOO环境变量对脚本不可用,正在使用默认值。

那么,在构建步骤运行的Bash脚本中如何访问环境变量?我是否缺少前缀或其他什么东西?(我知道在引用input哈希中定义的值时需要使用INPUT_前缀。)


你能访问默认的环境变量,例如 GITHUB_WORKFLOWGITHUB_REPOSITORY 吗? - Diego Torres Milano
@DiegoTorresMilano 不是的。我刚刚尝试在我提问中提供的示例中使用GITHUB_WORKFLOW代替FOO,结果默认值被使用了。 - pdoherty926
请尝试打印整个 env 而不仅仅是回显一个变量,这样它们应该可以工作。有关详细信息,请参阅:https://help.github.com/en/actions/automating-your-workflow-with-github-actions/using-environment-variables - Diego Torres Milano
3个回答

9
你可以在作业和步骤中使用任何级别的env。
我编写了一个测试操作和一个测试脚本来验证它:
操作文件:
name: Env tests
on: push

env:
  FOO_ROOT: bar on root

jobs:
  test:
    runs-on: ubuntu-latest
    env:
      FOO_JOB: bar on job
    steps:
      - uses: actions/checkout@v1
      - name: Test envs
        run: ./env-test.sh
        env:
          FOO_STEP: bar on step
#!/usr/bin/env bash

echo "FOO_ROOT: $FOO_ROOT"
echo "FOO_JOB: $FOO_JOB"
echo "FOO_STEP: $FOO_STEP"
echo " "
printenv

结果如下:
FOO_ROOT: bar on root
FOO_JOB: bar on job
FOO_STEP: bar on step

LEIN_HOME=/usr/local/lib/lein
M2_HOME=/usr/share/apache-maven-3.6.3
...

请查看我的结果,实际上我不知道为什么它在你的那边没能运行,因为它一定会正常工作。


1
谢谢。这符合我预期的行为。我需要重新思考我的操作并将其与您在这里的操作进行比较。 - pdoherty926
@pdoherty926,GitHub Actions 刚开始时有些行为发生了变化,一些新的东西被实现了,我是说在2019年。但很可能它会按照你的期望工作。 :) - Tiago Gouvêa

6

如果其他人正在寻找解决方案,您必须显式地将环境变量传递给bash脚本。否则,它们将不可用:

name: x-pull-request
on: pull_request
env:
  FOO: bar
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
      - name: does a thing
        run: ./scripts/do-a-thing.sh $FOO

在脚本中,您需要将参数映射到变量。

X=$1
echo "X: $X" # X: default

1

我知道这已经过时了,但是在编写自己的GitHub Actions代码时,我遇到了这个问题,并且想指出我认为你正在遇到的实际问题。

问题在于您正在使用错误的默认变量值语法。

不正确的:

myVal=${ENV_VAL:default}

正确:

# Notice the addition of the hyphen
myVal=${ENV_VAL:-default}

因此,您的脚本应该使用:

X=${FOO:-default}
echo "X: $X" # X: default

更多详情可在文档的参数扩展子节中找到。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接