如何在条件 Github 操作中检查秘密变量是否为空

How to check if a secret variable is empty in if conditional Github Actions

上下文

我想在执行作业之前检查我的工作流程是否存在秘密。

像这样:

publish:
    runs-on: ubuntu-latest
    if: secrets.AWS_ACCESS_KEY_ID != ''
    steps:
      [ ... ]

但是,我在使用这个表达式时遇到了这样的错误:

The workflow is not valid. .github/workflows/release.yml (Line: 11, Col: 9): Unrecognized named-value: 'secrets'...

我试过的

我试着用另一种方式写表达式:

if: ${{ secrets.AWS_ACCESS_KEY_ID != '' }}
if: ${{ secrets.AWS_ACCESS_KEY_ID }} != ''

问题

如何在 Github 操作工作流中实现我想要的?

Github 动作解释器当前无法识别在 if 条件表达式中使用的 secrets 关键字。因此,您不能在那里使用 secrets.VARIABLE 语法。

this issue discussion 中找到的解决方法是 首先将机密复制到环境变量

示例:

steps:
   env:
     MY_KEY: ${{ secrets.AWS_ACCESS_KEY_ID }}
   if: "${{ env.MY_KEY != '' }}"
   run: echo "This command is executed if AWS_ACCESS_KEY_ID secret IS NOT empty"

如果您需要在作业级别执行此操作,则需要创建一个 check-secret 作业来验证机密,然后将结果作为输出共享。

示例:

  check-secret:
      runs-on: ubuntu-latest
      outputs:
        my-key: ${{ steps.my-key.outputs.defined }}
      steps:
          - id: my-key
            if: "${{ env.MY_KEY != '' }}"
            run: echo "::set-output name=defined::true"
            env:
                MY_KEY: ${{ secrets.AWS_ACCESS_KEY_ID }}

  job1:
      runs-on: ubuntu-latest
      needs: [check-secret]
      if: needs.check-secret.outputs.my-key == 'true'
      steps:
        - run: echo "This command is executed if AWS_ACCESS_KEY_ID secret IS NOT empty"

  job2:
      runs-on: ubuntu-latest
      needs: [check-secret]
      if: needs.check-secret.outputs.my-key != 'true'
      steps:
        - run: echo "This command is executed if AWS_ACCESS_KEY_ID secret IS empty"