GitHub Action 内联 if

3

我现在有一个完美运作的工作流程,但是我想增强它。当我向主分支提交PR时,我希望将NETLIFY_DEPLOY_TO_PROD设置为false,而不是true。我需要复制整个流程吗?还是可以进行一些内联条件检查,如github.event_name === push ? true : false

name: 'Netlify Deploy'

on:
  push:
    branches: [ master ]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2
      - uses: jsmrcaga/action-netlify-deploy@master
        with:
          NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }} 
          NETLIFY_SITE_ID: ${{ secrets.SITE_ID }} 
          NETLIFY_DEPLOY_MESSAGE: "${{ github.event.head_commit.message }}"
          NETLIFY_DEPLOY_TO_PROD: true

你是否会直接推送到主分支,还是只合并拉取请求?如果是后者,你可以将触发器切换为仅在合并到主分支的PR关闭时运行工作流程,然后你可以检查一个if子句是否已合并或关闭。 - Benjamin W.
@BenjaminW。我可能会直接做,但大多数情况下会是公关。 - jrock2004
因此,所有对主分支的推送都应按照您的工作流程进行触发,而对主分支的 PR 也应该运行它,只不过变量设置不同,对吗? - Benjamin W.
@BenjaminW。当我向主分支提交PR时,我希望它运行,但是我想将“deploy to prod”设置为false。然后,当我关闭PR并合并它时,它会再次运行并部署它。 - jrock2004
2个回答

3
您可以设置一个环境变量来指示是否应该部署到生产环境,并根据事件名称更改它:
name: Netlify Deploy

on:
  push:
    branches:
      - master
  pull_request:
    branches:
      - master

env:
  DEPLOY: false

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2

      - name: Deploy on pushes
        if: github.event_name == 'push'
        run: echo 'DEPLOY=true' >> "$GITHUB_ENV"

      - uses: jsmrcaga/action-netlify-deploy@master
        with:
          NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }}
          NETLIFY_SITE_ID: ${{ secrets.SITE_ID }}
          NETLIFY_DEPLOY_MESSAGE: ${{ github.event.head_commit.message }}
          NETLIFY_DEPLOY_TO_PROD: ${{ env.DEPLOY }}

2
您想要使用 Github Action 表达式,因为它更快且不需要其他不必要的步骤。只有在脚本比较复杂时才需要使用步骤来运行脚本。 参考:https://docs.github.com/en/actions/reference/context-and-expression-syntax-for-github-actions 示例 1:当进行 push 操作时触发。
    - uses: jsmrcaga/action-netlify-deploy@master
      with:
        NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }} 
        NETLIFY_SITE_ID: ${{ secrets.SITE_ID }} 
        NETLIFY_DEPLOY_MESSAGE: "${{ github.event.head_commit.message }}"
        NETLIFY_DEPLOY_TO_PROD: ${{ github.event_name == 'push' }}

例子2和解决方案:在推送并且分支是主分支时触发。
注意:如果你计划让这个工作流在其他分支上运行,你只需要检查主分支。否则,你可以使用上面的例子1,它仅在事件名称为push时设置变量为true。
    - uses: jsmrcaga/action-netlify-deploy@master
      with:
        NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }} 
        NETLIFY_SITE_ID: ${{ secrets.SITE_ID }} 
        NETLIFY_DEPLOY_MESSAGE: "${{ github.event.head_commit.message }}"
        NETLIFY_DEPLOY_TO_PROD: ${{ github.event_name == 'push' && contains(github.ref, 'master') }}

这确实更加紧凑! - Benjamin W.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接