【问题标题】:Github Action Trigger on multiple on: push: pathsGithub Action Trigger on multiple on: push: paths
【发布时间】:2021-08-28 15:17:45
【问题描述】:

在单个 repo 中,我想为不同的路径 [paths: 'frontend/**'paths: 'backend/**'] 创建多个触发器,并为(相同的)构建作业使用不同的参数。以下是两个工作流程。

name: Trigger Jenkins Build [ Build-Portal ]
on:
  push:
    branches: [ develop ]
    paths: 'frontend/**'
    types: [closed]
jobs:
  build:
    name: Triggering Jenkins Build [ Build-Portal ]
    runs-on: ubuntu-latest
    if: github.event.pull_request.merged == true
    steps:
    - name: Trigger Build-Portal
      uses: actions/trigger-jenkins@develop
      with:
        ...
        job_name: "Build-Portal"
        job_params: '{"FRESH_BUILD":"True", "UI":"True", "BUILD_BRANCH":"develop", "DEPLOY_DEV":"True"}'
        ...

name: Trigger Jenkins Build [ Build-Portal ]
on:
  push:
    branches: [ develop ]
    paths: 'backend/**'
    types: [closed]
jobs:
  build:
    name: Triggering Jenkins Build [ Build-Portal ]
    runs-on: ubuntu-latest
    if: github.event.pull_request.merged == true
    steps:
    - name: Trigger Build-Portal
      uses: actions/trigger-jenkins@develop
      with:
        ...
        job_name: "Build-Portal"
        job_params: '{"FRESH_BUILD":"True", "API":"True", "BUILD_BRANCH":"develop", "DEPLOY_DEV":"True"}'
        ...

我可以将这两个文件合并到一个工作流文件 (.github/workflows/) 中,还是需要为每个文件创建单独的文件?

注意job_params 对于两个触发器来说是不同的。

【问题讨论】:

    标签: github-actions building-github-actions


    【解决方案1】:

    根据github action documentation,它应该在使用多个路径的同一工作流程中工作。

    如果您还使用paths-filter action,您可以通过以下方式获得您想要的结果:

    示例:

    name: Trigger Jenkins Build [ Build-Portal ]
    on:
      push:
        branches: [ develop ]
        paths: 
           - 'frontend/**'
           - 'backend/**'
        types: [closed]
    jobs:
      build:
        name: Triggering Jenkins Build [ Build-Portal ]
        runs-on: ubuntu-latest
        if: github.event.pull_request.merged == true
        steps:
          - uses: dorny/paths-filter@v2
            id: changes
            with:
               filters: |
                  backend:
                    - 'backend/**'
                  frontend:
                    - 'frontend/**'
        - name: Trigger Build-Portal FRONTEND
          # run only if some file in 'frontend' folder was changed
          if: steps.changes.outputs.frontend == 'true'
          uses: actions/trigger-jenkins@develop
          with:
            ...
            job_name: "Build-Portal"
            job_params: '{"FRESH_BUILD":"True", "UI":"True", "BUILD_BRANCH":"develop", "DEPLOY_DEV":"True"}'
            ...
         - name: Trigger Build-Portal BACKEND
          # run only if some file not 'backend' folder was changed
          if: steps.changes.outputs.backend == 'true'
          uses: actions/trigger-jenkins@develop
          with:
            ...
            job_name: "Build-Portal"
            job_params: '{"FRESH_BUILD":"True", "API":"True", "BUILD_BRANCH":"develop", "DEPLOY_DEV":"True"}'
            ...
    

    【讨论】:

    • job_params 对于两个触发器是不同的。
    • 抱歉,我在job_params 中没有看到UI 和API 的区别。在这种情况下,您可以使用 2 个具有不同 if 条件的作业,具体取决于所使用的路径。也可以使用paths-filter action
    • 我用这个路径过滤器操作的例子更新了答案
    • 感谢多尼/路径过滤器的指针;我用它解决了a similar filtering issue
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-02
    • 1970-01-01
    • 2014-02-12
    • 2017-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多