【问题标题】:Conditionally execute github action based on secrets根据秘密有条件地执行 github 动作
【发布时间】:2021-12-07 01:23:03
【问题描述】:

我正在寻找一种方法来检查存储库的所有者是否设置了一些变量。

用例: 我是diyhue 的贡献者,我想设置一个通用的 github 操作来测试应用程序,这应该为每个用户完成,如果 fork 的所有者设置了秘密 @987654324,则将其发布到 docker hub @。

这样,如果用户配置了所需的机密,github 操作只会运行发布步骤。但测试将始终运行,导致绿色复选标记表明用户所做的更改不会破坏代码。

【问题讨论】:

标签: github-actions


【解决方案1】:

如果未设置机密,我无法找到停止执行 github 操作的方法。所以我建立了自己的行动来做到这一点。

https://github.com/marketplace/actions/secret-input-gate

如果未设置机密,此操作允许 github 操作成功(或失败)。根据你的喜好使用它,让我知道你的想法。代码是完全开源的,所以你可以确保我没有窃取任何令牌。

【讨论】:

    【解决方案2】:

    我在this issue discussion 之后找到了一个替代方案

    由于您无法在 if(条件)表达式中操作机密(它们不会被 GHA 解释器识别),因此一种解决方法可能是创建一个作业来检查机密变量是否存在,将结果设置为输出,然后根据需要在其他作业上对其进行操作。

    DOCKER_USERNAME 为例:

      check-secret:
          runs-on: ubuntu-latest
          outputs:
            my-key: ${{ steps.my-key.outputs.defined }}
          steps:
              - id: my-key
                env:
                    MY_KEY: ${{ secrets.DOCKER_USERNAME }}
                if: "${{ env.MY_KEY != '' }}"
                run: echo "::set-output name=defined::true"
    
      job1:
          runs-on: ubuntu-latest
          needs: [check-secret]
          if: needs.check-secret.outputs.my-key == 'true'
          steps:
            - run: echo "This command is executed if DOCKER_USERNAME 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 DOCKER_USERNAME secret IS empty"
    

    【讨论】:

    • 也是一个有效的解决方案,我的任务做了类似的事情。
    猜你喜欢
    • 1970-01-01
    • 2021-05-12
    • 1970-01-01
    • 1970-01-01
    • 2016-11-02
    • 2021-09-15
    • 1970-01-01
    • 2020-09-19
    • 2020-05-21
    相关资源
    最近更新 更多