将环境变量传递到可重用的工作流,而无需使用 1 对 1 输入

Pass environment variables to reusable workflow without using 1 to 1 inputs

提问人:Luiscri 提问时间:10/24/2022 最后编辑:Luiscri 更新时间:10/26/2022 访问量:2312

问:

现在,如果我想将环境变量传递给可重用的工作流,我必须执行如下操作:

name: Reusable workflow
on:
  workflow_call:
    inputs:
      my_env_var:
        required: false
        type: string
env:
  my_env_var: ${{ inputs.my_env_var }}

但是,为此,我首先需要将要传递的每个环境变量定义为输入。这是可行的,但必须对环境变量进行硬编码会使我的可重用工作流变得不那么通用。有没有办法传递环境而不必一一定义它们?我在想这样的事情:

name: Calling reusable workflow

on:
  workflow_dispatch:

jobs:
  push-image-dev:
    uses: ./.github/workflows/my-reusable-workflow.yml
    with:
      input1: ...
      input2: ...
    env:
      env1: ...
      env2: ...

但是,我一直在阅读一些文档,我认为这不存在。有没有其他方法可以做到这一点,例如继承环境变量或创建单个输入,该输入是变量字典,稍后会解析并在可重用的工作流中设置所有环境变量?

环境变量 github-actions

评论

0赞 GuiFalourd 10/24/2022
目前无法在可重用工作流中继承 env 变量。解决方法确实是为每个环境变量使用输入。此线程可能会为您提供更多详细信息

答:

3赞 Luiscri 10/24/2022 #1

我创建了这个简单的逻辑,它允许我以 1:N 的关系传递我想要的所有环境变量,与输入有关。我创建了一个输入,该输入需要环境变量列表,格式为“env=value”,稍后在工作流中的一个步骤中将其转换为环境变量。

调用工作流:

name: Calling reusable workflow

on:
  workflow_dispatch:

jobs:
  my-job:
    uses: ./.github/workflows/my-reusable-workflow.yml
    with:
      env_vars: |
        env1=value1
        env2=value2
        env3=value3

工作流定义:

name: My reusable workflow
on:
  workflow_call:
    inputs:
      env_vars:
        description: List of environment variables to set up, given in env=value format.
        required: false
        type: string

jobs:
  my-job:
    runs-on: ubuntu-latest
    steps:
      - name: Set environment variables
        if: ${{ inputs.env_vars }}
        run: |
          for i in "${{ inputs.env_vars }}"
          do
            printf "%s\n" $i >> $GITHUB_ENV
          done