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

问题描述 投票:0回答:2

现在,如果我想将环境变量传递给可重用的工作流程,我必须这样做:

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: ...

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

environment-variables github-actions
2个回答
5
投票

我创建了这个简单的逻辑,它允许我以与输入相关的 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

0
投票

与 Luiscri 发布的逻辑相同,但我将其扩展以屏蔽值,因为我使用它来传递 API 凭据。


on:
  workflow_call:
    secrets:
      env_vars:
        description: "Environment variables that will be passed to the Maven build"
        required: false

jobs:
  build:
    runs-on: ubuntu-latest
    steps:

      - name: Set environment variables
        run: |
          echo "${{ secrets.env_vars }}" | while IFS= read -r line
          do
            if [ -n "$line" ]
            then
              # Split the line into key and value based on "=" character.
              key="${line%%=*}"        # Retain the part before the first "="
              val="${line#*=}"         # Retain the part after the first "="
              echo "::add-mask::$val"  # Mask values because they could be sensitive
              echo "INFO: Setting variable $key"
              echo "${key}=${val}" >> "$GITHUB_ENV"
            fi
          done
© www.soinside.com 2019 - 2024. All rights reserved.