【问题标题】:In a GitHub Action, can I extract a recurring variable or condition?在 GitHub 操作中,我可以提取循环变量或条件吗?
【发布时间】:2022-08-05 18:32:41
【问题描述】:

我有一个 GitHub 操作。在其中我有几个步骤应该只在某些条件下执行 - 在这种情况下,如果分支名称与某个模式匹配,则应该执行这些步骤。像这样:

- name: Deploy infrastructure
  if: github.ref == \'refs/heads/master\' || startsWith(github.ref, \'refs/heads/features/lrd\')

这个if 块在我的操作中重复出现多次。是否可以将其提取到共享变量、条件或函数中,这样我就可以摆脱丑陋的代码重复?最好的方法是什么?

我想一种选择是在前面的步骤中计算变量并在后面的步骤中引用它,如这篇文章中所述:https://stackoverflow.com/a/58676568/4290962

有一个单独的步骤来计算这个值似乎有点难看。这是我们能做的最好的吗?还是有更好的选择?

提前致谢!

    标签: github-actions code-duplication


    【解决方案1】:

    你能用一个工作流级别的环境变量, 就像是:

    on:
      push:
    
    env:
      BRANCH: ${{ github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/heads/features/lrd') }}
    
    jobs:
      job1:
        runs-on: ubuntu-latest
        steps:
          - name: Check branch and print it
            if: ${{ env.BRANCH == 'true' }} # using directly {{ env.BRANCH }} might work as well
            run: echo ${{ env.BRANCH }}
    

    然后,这个变量可以用于任何工作步骤.如果你想看看,我在这里测试过:

    请注意,您不能在作业级别使用条件if: ${{ env.BRANCH }},它尚不受支持。 Github 社区有来自 Github Partner 的参考 in this post亮然关于这一点:

    关于env context,只能在以下场景中使用:

    • with 键的值;
    • 步骤名称键的值;
    • 步骤的 env 键的值;
    • 在一个步骤的if条件中;
    • 在运行步骤的命令行中。

    【讨论】:

    • 现在我终于开始尝试了。在“如果”条件下,它对我不起作用。这些步骤总是被执行。这可能是因为环境变量被设置为字符串“真”或“假”(至少,当我回显环境变量时,我得到“真”或“假”)。这也不起作用:if: ${{ env.BRANCH }} == trueif: ${{ env.BRANCH == 'true' }}if: ${{ env.BRANCH == "true" }}
    • 那很奇怪。如您所见,它适用于我共享的工作流filerun。您能分享与我在那里使用的相比有什么不同吗?您是否在 env 变量中使用相同的运行器和/或相同的表达式?
    • 我想到了。我的代码中有一个复制粘贴错误。不过,您对if: ${{ env.BRANCH }} 的原始建议对我不起作用。那总是执行该步骤。我需要这样做:if: ${{ env.BRANCH == 'true' }} 以便正确检查条件。如果您编辑您的答案并包含if: ${{ env.BRANCH == 'true' }} 作为建议,那么我将单击复选标记。 :)
    猜你喜欢
    • 2014-01-03
    • 2020-09-10
    • 2015-05-22
    • 1970-01-01
    • 2021-04-28
    • 2017-04-14
    • 2022-11-10
    • 2021-03-01
    • 1970-01-01
    相关资源
    最近更新 更多