Github actions 在Github操作中映射环境变量

Github actions 在Github操作中映射环境变量,github-actions,Github Actions,我创建了一个GitHub操作作业,其中包含一个创建一组环境变量的策略矩阵。 其中一个是machine\u架构,它是32或64 在大多数步骤中,我可以直接使用它,即通过${{{machine\u architecture}。 但有些步骤需要像“i386”和“x86_64”这样的字符串。在github操作中是否有一种简单的方法可以创建一个映射对象,我可以在以下表达式中使用它: map_object = { 32: "i386", 64: 'x86_64' } ... ${{ map_object[m

我创建了一个GitHub操作作业,其中包含一个创建一组环境变量的策略矩阵。 其中一个是
machine\u架构
,它是32或64

在大多数步骤中,我可以直接使用它,即通过
${{{machine\u architecture}
。 但有些步骤需要像“i386”和“x86_64”这样的字符串。在github操作中是否有一种简单的方法可以创建一个映射对象,我可以在以下表达式中使用它:

map_object = { 32: "i386", 64: 'x86_64' }
...
${{ map_object[machine_architecture] }}
如果不是,github操作中解决该问题的惯用方法是什么

PS:我知道,我可以,但问题是,这些变量仅适用于以下步骤(即不适用于“run on:”标记)

您的“map\u对象”实际上是一个文件,它将
机器\u架构
值映射到您需要的值,例如:

32=i386
64=x86_64
或任何其他您想要保留的格式

然后,您的作业可以在辅助变量中将其定义为:

jobs:
  FirstJob:
    name: job 1
    runs-on: .....
    steps:
      - uses: ....
      - name: Define variables
        run: |
          cat $(cat MAP_OBJECT_FILE_NAME) | grep $(cat machine_architecture)= | > MACHINE_ARCHITECTURE_STRING

从那时起,您将有
MACHINE\u ARCHITECTURE\u STRING
变量可用于所需的作业。当然,您可以进行更简单的连接或其他操作,但在这里,您可以使用映射文件在代码中维护映射,并且是可伸缩的。

这里有一种使用JSON和jq的方法。它创建步骤输出
${{steps.vars.outputs.arch}
,您可以在后面的步骤中使用

jobs:
  varMap:
    strategy:
      matrix:
        machine_architecture: [32, 64]
    runs-on: ubuntu-latest
    steps:
      - name: Set arch var
        id: vars
        run: |
          echo ::set-output name=arch::\
          $(echo '{ "32": "i386", "64": "x86_64" }' | jq -r 'to_entries[] | select(.key=="${{ matrix.machine_architecture }}") | .value')

      - name: Test arch var
        run: echo "Testing ${{ steps.vars.outputs.arch }}"

与此同时,我找到了一个解决方案:

尽管GitHub Actions没有直接创建映射/对象的语法,但可以通过以下方式间接完成:


此fromJson()将创建从int到string的映射。以下[]-运算符将int类型“machine\u architecture”解析为字符串类型。

此解决方案正是我在问题的“PS:”部分中链接的。但正如我在这里所描述的,我只能在以下步骤中使用VAR,而不能在“步骤:”部分之外(即在“继续运行:”部分中)使用VAR。在这种情况下,我认为您正在尝试的是,不幸的是,目前不可能做到。我的理解是,
上运行时只能访问。此外,据我所知,没有方法计算步长之外的值。
${{ fromJson('{ 32: "i386", 64: "x86_64" }')[machine_architecture] }}