GitHub Actions 备忘
Published by powerfulyang on May 8, 2023
GitHub Actions 如何仅在某些文件发生更改时执行特定的 job
要实现某些 job 仅在特定文件发生更改时执行,您可以在工作流中使用 if
语句来检查变更文件。这需要使用 actions/checkout
和 dorny/paths-filter
动作。下面是一个示例,仅在 my_folder
中的文件发生更改时才执行名为 run_job
的 job:
1name: Conditional Job Execution
2
3on: [push, pull_request]
4
5jobs:
6 check_changes:
7 runs-on: ubuntu-latest
8 outputs:
9 has_changes: ${{ steps.filter.outputs.has_changes }}
10
11 steps:
12 - name: Checkout repository
13 uses: actions/checkout@v2
14
15 - name: Check for changes in my_folder
16 uses: dorny/paths-filter@v2
17 id: filter
18 with:
19 filters: |
20 has_changes:
21 - 'my_folder/**'
22
23 run_job:
24 runs-on: ubuntu-latest
25 needs: check_changes
26 if: ${{ needs.check_changes.outputs.has_changes == 'true' }}
27
28 steps:
29 - name: Checkout repository
30 uses: actions/checkout@v2
31
32 - name: Run task only if my_folder files changed
33 run: echo "Files in my_folder have changed, running the task."
在这个示例中,我们首先创建一个名为 check_changes
的 job,使用 dorny/paths-filter
动作来检查是否有变更的文件。然后,我们将其输出设置为 has_changes
,并在 run_job
的 if
语句中使用该输出,如果 has_changes
为 true
,则执行 run_job
。这样,仅当 my_folder
中的文件发生更改时,run_job
才会执行。
默认 Actions 只有部分权限
Workflows have read permissions in the repository for the contents and packages scopes only.
使用 permissions.contents 字段增加写入权限,如下:
1name: 'GitHub CI'
2
3permissions:
4 contents: write