【问题标题】:macos ${{ env.TMPDIR }} notworking in github actionsmacos ${{ env.TMPDIR }} 在 github 操作中不起作用
【发布时间】:2020-12-14 13:18:21
【问题描述】:

我有一个尝试使用 ${{ env.TMPDIR }} 的 github 操作,但它似乎没有扩展到 TMPDIR 环境变量。

 - name: DEBUG Workaround GitHub-Actions-MacOS Issue with env.TMPDIR
    run: |
      echo "TMPDIR=$TMPDIR"
      echo "TMPDIR using ENV.TMPDIR=${{ env.TMPDIR }}"

这会产生:

TMPDIR=/var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/
TMPDIR using ENV.TMPDIR=

示例: DEBUG Workaround GitHub-Actions-MacOS Issue with env.TMPDIR

【问题讨论】:

  • 您将使用$TMPDIR 引用一个bash 环境变量,您已经完成了。您将使用 ${{ env... }} 上下文语法引用 GitHub Actions 变量。但这不是 GitHub Actions 变量。你为什么要在这里使用${{ env.TMPDIR }}?我觉得你没有解释你想要做什么。
  • 这是测试代码。我试图在我在另一个规则中上传文件的规范中使用 ${{ env.TMPDIR}}。但我无法打印出失败的原因。这就是为什么我添加此代码以便能够转储变量的值。
  • 见最后的链接github.com/SophistSolutions/Stroika/actions/runs/404926809/…。我试图在 WITH 语句中使用它来指定要复制到的文件夹。

标签: macos github-actions


【解决方案1】:

TMPDIR 是 bash 提供的 shell 环境变量。您使用$TMPDIR 正确引用它,这是您在bash 中引用环境变量的方式。它可能会解析为/tmp

但是,您不能在 GitHub Actions 工作流程的一个步骤中设置 shell 环境变量,然后在另一个步骤中使用它。那是因为你会得到一个新的 shell 实例,它会有一个新的环境。这不起作用:

- run: FOO="hello"
- run: echo $FOO

但是,您可以使用 GitHub Actions environment variable 在 GitHub Actions 环境中而不是在 shell 环境中持久保存信息。这是两个不同的东西,没有隐含的混合。也就是说$TMPDIR不是${{env.TMPDIR}}。这是两个不同的环境。

如果你想在步骤之间持久化环境变量,你需要显式设置它,然后你就可以使用它了。 (您的工作流程没有在任何地方设置TMPDIR。)

(我还鼓励您使用不同的名称,以避免与您的 shell 设置的 TMPDIR 环境变量混淆。)

您可以通过echoname=valuename=value 与在shell 环境变量中提供给您的特定文件配对。

换句话说:

- run: echo "FOO=hello" >> $GITHUB_ENV
- run: echo ${{ env.FOO }}

将使用值hello 持久化 GitHub Actions 环境变量 FOO。第二个运行步骤将打印它。

如果你想创建、持久化和使用一个临时目录,你应该使用mktemp 命令。例如,一步创建一个临时目录并将其路径设置为TEMP_DIR 环境变量,下一步将文件写入临时目录,第三步打印临时目录名称,并将内容显示在最后一步:

- run: echo "TEMP_DIR=$(mktemp -d)" >> $GITHUB_ENV
- run: echo "hi" >> ${{ env.TEMP_DIR}}/temp_file
- run: echo ${{env.TEMP_DIR}}
- run: ls -Flas ${{ env.TEMP_DIR }}

如果您真的想使用 TMPDIR(我认为您不应该这样做),那么您需要将 it 设置为 GitHub Actions 环境变量。

- run: echo $TMPDIR # works
- run: echo ${{ env.TMPDIR }} # does not work
- run: echo "TMPDIR=${TMPDIR}" >> $GITHUB_ENV # sets it into the GitHub Actions environment
- run: echo ${{ env.TMPDIR }} # works

【讨论】:

  • MacOS 有一个名为 TMPDIR 的环境变量。这是/tmp 的等价物是大多数unix。我有写在那里的临时文件。我正在尝试将它们复制为构建工件(如您在原始问题中引用的示例中所见)。我正在尝试从存档规则访问该文件夹名称。
  • 名称:存档日志结果使用:actions/upload-artifact@v2 with:名称:日志结果 (${{ matrix.displayTargetName }}) 路径:|构建/${{ matrix.config_name }}/PerformanceDump.txt /tmp/LOGS-ARCHIVE #${{ env.TMPDIR }}/Trace*.txt
  • 解决方法是将 SHELL(我可以在其中看到环境变量)中的副本复制到已知的硬连线位置。但我不想做额外的复制,只需从 macos /tmp 目录上传(其中由环境变量命名)。
  • 同样,您的 shell 设置的环境变量与 GitHub Actions 无关。你不能使用${{ env.TMPDIR }}
  • 如果你想使用${{ env.TMPDIR }},做我回答的事情,并将shell的TMPDIR设置为GitHub Actions环境变量。
猜你喜欢
  • 2020-11-26
  • 2021-12-05
  • 2020-02-13
  • 2021-07-25
  • 2023-02-23
  • 1970-01-01
  • 2021-08-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多