如何在 github 复合操作步骤中动态设置环境变量?
How do I dynamically set an environment variable in a github composite action step?
我确实需要它作为一个环境变量,这专门用于 复合操作。
在复合动作中,我尝试了很多不同的方式来设置环境变量。我发现这样做的唯一方法是在步骤本身中使用 env
:
runs:
using: "composite"
steps:
- name: "A step"
env:
BRANCH_REF: "${{ github.ref }}"
run: echo "The branch is $BRANCH_REF"
shell: bash
不幸的是,我需要动态设置这个变量。在常规操作中,我会做类似的事情:
env:
FOO: "${{ secrets.FOO }}"
#...
- run: echo "FOO=${{ github.event.inputs.foo }}" >> $GITHUB_ENV
if: ${{ github.event.inputs.foo != '' }}
因为我做不到,所以我尝试了很多其他方法,但都没有用。这是我最近的尝试,也没有用:
- 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
我在 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
在最后的输出行上,我得到 foo is
,所以环境变量 $FOO 似乎没有设置。
如何在复合操作中动态设置环境变量?
您遇到的问题是在 GitHub 动作脚本步骤中调用 echo "FOO=${{ github.event.inputs.foo }}" >> $GITHUB_ENV
不会 在当前步骤的脚本中设置该变量,如果您为 下一步 扩展环境 header,您 应该 看到您的 dynamically-set 环境变量进入该步骤
我平时的做法是这样的:
FOO="${{ github.event.inputs.foo }}"
echo "FOO=${FOO}" >> $GITHUB_ENV
所以您在当前步骤的脚本中设置了一个名为 FOO
的变量(使其在同一步骤的后续行中可用)并导出它以用于以后的步骤
我确实需要它作为一个环境变量,这专门用于 复合操作。
在复合动作中,我尝试了很多不同的方式来设置环境变量。我发现这样做的唯一方法是在步骤本身中使用 env
:
runs:
using: "composite"
steps:
- name: "A step"
env:
BRANCH_REF: "${{ github.ref }}"
run: echo "The branch is $BRANCH_REF"
shell: bash
不幸的是,我需要动态设置这个变量。在常规操作中,我会做类似的事情:
env:
FOO: "${{ secrets.FOO }}"
#...
- run: echo "FOO=${{ github.event.inputs.foo }}" >> $GITHUB_ENV
if: ${{ github.event.inputs.foo != '' }}
因为我做不到,所以我尝试了很多其他方法,但都没有用。这是我最近的尝试,也没有用:
- 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
我在 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
在最后的输出行上,我得到 foo is
,所以环境变量 $FOO 似乎没有设置。
如何在复合操作中动态设置环境变量?
您遇到的问题是在 GitHub 动作脚本步骤中调用 echo "FOO=${{ github.event.inputs.foo }}" >> $GITHUB_ENV
不会 在当前步骤的脚本中设置该变量,如果您为 下一步 扩展环境 header,您 应该 看到您的 dynamically-set 环境变量进入该步骤
我平时的做法是这样的:
FOO="${{ github.event.inputs.foo }}"
echo "FOO=${FOO}" >> $GITHUB_ENV
所以您在当前步骤的脚本中设置了一个名为 FOO
的变量(使其在同一步骤的后续行中可用)并导出它以用于以后的步骤