13 作业与步骤的并行与串行工作流

在上一篇中,我们探讨了如何使用时间表触发器来自动化任务。在本篇中,我们将深入讨论 GitHub Actions 中作业与步骤的并行和串行执行。这是理解工作流如何高效运行的重要一环。

1. 作业与步骤概述

在 GitHub Actions 中,工作流由多个作业(Job)构成,而作业又由多个步骤(Step)组建。每个作业都是在一个独立的虚拟环境中运行的。步骤则是在作业中定义的一系列命令或操作。

作业和步骤之间的并行与串行运行方式对流水线的效率影响很大。理解这些概念将帮助你更好地设计和优化你的工作流。

2. 串行作业

默认情况下,工作流中的作业是串行执行的。这意味着每个作业必须等前一个完成后才能开始。例如,如果你有两个作业 job1job2job2 只有在 job1 完成后才会执行。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
name: CI

on: [push]

jobs:
job1:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Run tests
run: |
echo "Running tests for job1"

job2:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Deploy application
run: |
echo "Deploying application from job2"

在上述代码中,job1job2 将顺序执行。job2 只能在 job1 完成后启动。

3. 并行作业

GitHub Actions 允许作业并行运行。要实现这一点,只需确保作业之间没有依赖关系。如果你希望多个作业并行运行,可以在工作流定义中直接定义这些作业。

示例:并行作业

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
name: CI

on: [push]

jobs:
job1:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Run tests
run: |
echo "Running tests for job1"

job2:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Lint code
run: |
echo "Linting code in job2"

job3:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Build application
run: |
echo "Building application in job3"

在这个例子中,job1job2job3 将并行执行,因为它们之间没有依赖关系。

4. 控制作业的依赖关系

如果你想控制作业的执行顺序,可以使用 needs 关键字来定义依赖关系。这使得某些作业在其他作业完成后才会执行。

示例:控制依赖关系

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
name: CI

on: [push]

jobs:
job1:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Prepare environment
run: |
echo "Preparing environment in job1"

job2:
runs-on: ubuntu-latest
needs: job1 # job2 依赖 job1
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Run tests
run: |
echo "Running tests in job2"

job3:
runs-on: ubuntu-latest
needs: job2 # job3 依赖 job2
steps:
- name: Deploy application
run: |
echo "Deploying in job3"

在这个示例中,job2job1 完成后执行,而 job3 则在 job2 完成后执行。这里使用 needs 关键字创建了依赖链,使得作业按顺序执行。

5. 总结

在本篇中,我们讨论了 GitHub Actions 中作业的并行与串行执行,展示了如何通过定义依赖关系来控制作业的执行顺序。从业务场景出发合理设计工作流,能够有效提升 CI/CD 的效率和稳定性。

在下一篇中,我们将探讨作业与步骤之间的依赖关系,进一步提升你对 GitHub Actions 的理解和应用。希望你能在实际项目中灵活运用这些知识,优化你的工作流!

13 作业与步骤的并行与串行工作流

https://zglg.work/github-actions-zero/13/

作者

IT教程网(郭震)

发布于

2024-08-15

更新于

2024-08-16

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论