如何在 github 复合操作步骤中动态设置环境变量?

Mix*_*nge 22 github composite environment-variables github-actions

我确实需要它作为一个环境变量,这是专门针对复合操作的。

在复合操作中,我尝试了许多不同的设置环境变量的方法。我发现做到这一点的唯一方法是在env步骤本身内部使用:

runs:
  using: "composite"
  steps:
    - name: "A step"
      env:
        BRANCH_REF: "${{ github.ref }}"
      run: echo "The branch is $BRANCH_REF"
      shell: bash
Run Code Online (Sandbox Code Playgroud)

不幸的是,我需要动态设置这个变量。在常规操作中,我会做类似的事情:

    env:
      FOO: "${{ secrets.FOO }}"
    #...
    - run: echo "FOO=${{ github.event.inputs.foo }}" >> $GITHUB_ENV
      if: ${{ github.event.inputs.foo != '' }}
Run Code Online (Sandbox Code Playgroud)

因为我做不到,所以我尝试了很多其他方法,但都不起作用。这是我最近的尝试,但也不起作用:

    - name: "A step"
      run: |
        if ${{ github.event.inputs.foo != '' }}
        then
          echo "Set from manual input: ${{ github.event.inputs.foo }}"
          echo "FOO=${{ github.event.inputs.foo }}" >> $GITHUB_ENV
        else
          echo "Use FOO workflow secret input: ${{ inputs.FOO }}"
          echo "FOO=${{ inputs.FOO }}" >> $GITHUB_ENV
        fi
        echo "foo is $FOO"
      shell: bash
Run Code Online (Sandbox Code Playgroud)

我在 GitHub 控制台中得到的输出是:

Run if true
  if true
  then
    echo "Set from manual input: My foo is a good foo"
    echo "FOO=My foo is a good foo" >> $GITHUB_ENV
  else
    echo "Use FOO secret: ***"
    echo "FOO=***" >> $GITHUB_ENV
  fi
  echo "foo is $FOO"
  shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0}
Set from manual input: My foo is a good foo

foo is 
Run Code Online (Sandbox Code Playgroud)

在最后的输出行上,我得到foo is ,所以环境变量 $FOO 似乎没有被设置。

如何在复合操作中动态设置环境变量?

The*_*ris 32

您遇到的问题是,调用echo "FOO=${{ github.event.inputs.foo }}" >> $GITHUB_ENVGitHub Action 脚本步骤不会在当前步骤的脚本中设置该变量,如果您展开下一步的 env 标头,应该看到动态设置的环境变量输入到该步骤中

我通常做的是这样的:

FOO="${{ github.event.inputs.foo }}"
echo "FOO=${FOO}" >> $GITHUB_ENV
Run Code Online (Sandbox Code Playgroud)

因此,您设置一个FOO在当前步骤的脚本中调用的变量(使其在同一步骤的后续行中可用)并将其导出以供将来的步骤使用