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

pdo*_*926 12 bash github-actions

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

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

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
Run Code Online (Sandbox Code Playgroud)

...以及以下脚本:

X=${FOO:default}
echo "X: $X" # X: default
Run Code Online (Sandbox Code Playgroud)

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

那么,如何从构建步骤运行的 Bash 脚本访问环境变量?我错过了前缀还是什么?(我知道input散列中定义的值要求您INPUT_在引用它们时使用前缀。)

Tia*_*vêa 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
Run Code Online (Sandbox Code Playgroud)

脚本文件:

#!/usr/bin/env bash

echo "FOO_ROOT: $FOO_ROOT"
echo "FOO_JOB: $FOO_JOB"
echo "FOO_STEP: $FOO_STEP"
echo " "
printenv
Run Code Online (Sandbox Code Playgroud)

结果:

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
...
Run Code Online (Sandbox Code Playgroud)

检查我的结果,事实上,我不知道为什么它在你这边不起作用,因为它必须起作用。


Pat*_*hof 5

如果其他人正在寻找解决方案:

您必须明确地将环境变量传递给 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
Run Code Online (Sandbox Code Playgroud)

在脚本中,您必须将参数映射到变量。

X=$1
echo "X: $X" # X: default
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助。