GitHub Actions 使用从 shell 设置的变量

xpt*_*xpt 8 shell environment-variables github-actions

目标:

在 GitHub Actions 中,从 shell 动态定义我的提交消息:

      - name: Commit changes
        uses: EndBug/add-and-commit@v7
        with:
          message: "added on $(date -I)"
Run Code Online (Sandbox Code Playgroud)

但是,似乎我必须定义一个环境变量然后使用它。我正在关注如何在 GitHub Actions 中使用 bash 表达式设置环境变量?和其他类似的帮助文件,但仍然无法告诉如何使用我之前定义的环境变量。这是我尝试过但失败的:

      - name: Checkout repo
        uses: actions/checkout@v2
      - run: |
          touch sample.js
          echo "today=$(date -I)" >> $GITHUB_ENV

      - name: Commit changes
        uses: EndBug/add-and-commit@v7
        with:
          message: "added on ${today}"
Run Code Online (Sandbox Code Playgroud)

如何让它发挥作用?

lar*_*sks 14

如果要使用$GITHUB_ENV另一个任务的参数中的环境文件来引用环境变量集,则需要使用工作流语法来访问顶级env键的相应键,如下所示:

- name: Commit changes
  uses: EndBug/add-and-commit@v7
  with:
    message: "added on ${{env.today}}"
Run Code Online (Sandbox Code Playgroud)

您可以从正在运行的任务内部将其作为标准环境进行访问,例如:

- name: Show an environment variable
  run: |
      echo "today is $today"
Run Code Online (Sandbox Code Playgroud)

在该示例中,表达式由 shell$today扩展,它查找名为 的环境变量。你也可以写:today

- name: Show an environment variable
  run: |
      echo "today is ${{env.today}}"
Run Code Online (Sandbox Code Playgroud)

在这种情况下,扩展将由 github 的工作流引擎在命令执行之前执行run,因此 shell 会看到一个看起来像 的文字命令echo "today is 2021-07-14"


您可以使用输出参数完成类似的操作,如下所示:

- name: "Set an output parameter"
  id: set_today
  run: |
    echo "::set-output name=today::$(date -I)"

- name: Commit changes
  uses: EndBug/add-and-commit@v7
  with:
    message: "added on ${{steps.set_today.outputs.today}}"
Run Code Online (Sandbox Code Playgroud)

使用输出参数更加精细(因为它们由步骤 ID 限定),并且它们不会显示在任务启动的进程环境中。