gpt4 book ai didi

github-actions - 在作业的 env 子句中引用运行器上下文

转载 作者:行者123 更新时间:2023-12-04 08:18:28 29 4
gpt4 key购买 nike

这是一个名为 spam 的 Python 项目的 GitHub Actions 工作流程文件:

name: PyInstaller

on:
[...]

jobs:
create_release:
[...]

make_artifact:
needs: create_release

strategy:
matrix:
os: [ ubuntu-latest, windows-latest ]

runs-on: ${{ matrix.os }}

env:
ARTIFACT_PATH: dist/spam.zip
ARTIFACT_NAME: spam-${{ runner.os }}.zip

steps:
[...]

运行时,工作流在启动时失败:

The workflow is not valid. [...]: 
Unrecognized named-value: 'runner'. Located at position 1 within expression: runner.os

我正在尝试使用 runner contextos 属性. This SO Q&A 提到 env 上下文只能在特定的地方使用,所以我怀疑这里发生了类似的事情。但是,我找不到解决此问题的任何官方文档。

有没有办法引用 runner 上下文来在作业的 env 子句中设置环境变量,如上所示?

我正在寻找一种方法来为作业中的所有步骤设置环境变量,因此 step 项中的 env 不会起作用。我现在的解决方法是添加一个专门用于设置环境变量的步骤:

steps:
- name: Setup environment
run: |
echo "ARTIFACT_NAME=spam-${{ runner.os }}.zip" >> $GITHUB_ENV

然而这只适用于 Linux 运行器。

最佳答案

如果您在所链接的 GitHub Actions 文档中进一步向下滚动,可以看到一个将不同上下文打印到日志的示例工作流。

- name: Dump runner context
env:
RUNNER_CONTEXT: ${{ toJson(runner) }}

我设置了一个 test repoworkflow demonstration :

on: push

jobs:
one:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os:
- 'ubuntu-latest'
- 'windows-latest'
- 'macos-latest'
steps:
- name: Dump runner context
env:
RUNNER_CONTEXT: ${{ toJson(runner) }}
run: echo "$RUNNER_CONTEXT"
- name: Get runner OS
env:
RUNNER_OS: ${{ runner.os }}
run: echo "$RUNNER_OS"
- name: Create file with runner OS in name
env:
OS_FILENAME: 'spam-${{ runner.os }}.zip'
run: |
echo "OS_FILENAME=spam-${{ runner.os }}.zip" >> $GITHUB_ENV
touch "./${{ env.OS_FILENAME }}"
touch blah.txt
- name: List created file
run: ls -l "./${{ env.OS_FILENAME }}"

看起来您还可以分步设置和访问 env,并且这些步骤跨工作流步骤持续存在。例如,我在步骤 3 中使用 echo syntax 设置了环境变量 $OS_FILENAME ,并在第 4 步中引用它。这适用于 GitHub Actions 上提供的所有操作系统选项。

请注意,GitHub Actions 文档声明“环境变量必须在表达式语法中使用 env 上下文显式引用或通过直接使用 $GITHUB_ENV 文件;环境变量在 shell 命令中不隐式可用。”。基本上,这意味着您不能像 $FOO 那样隐式引用 env 变量,而必须在 shell 命令中将它们引用为 ${{ env.FOO }}

那么对于你的场景,如果在job的第一步设置$ARTIFACT_NAME是否满足你的要求?我想知道原因是否可能是 runner 上下文直到第一步才创建 - 我不确定我是否有办法测试它。

关于github-actions - 在作业的 env 子句中引用运行器上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65600555/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com