在上一篇中,我们探讨了如何使用时间表触发器来自动化任务。在本篇中,我们将深入讨论 GitHub Actions 中作业与步骤的并行和串行执行。这是理解工作流如何高效运行的重要一环。
1. 作业与步骤概述
在 GitHub Actions 中,工作流由多个作业(Job)构成,而作业又由多个步骤(Step)组建。每个作业都是在一个独立的虚拟环境中运行的。步骤则是在作业中定义的一系列命令或操作。
作业和步骤之间的并行与串行运行方式对流水线的效率影响很大。理解这些概念将帮助你更好地设计和优化你的工作流。
2. 串行作业
默认情况下,工作流中的作业是串行执行的。这意味着每个作业必须等前一个完成后才能开始。例如,如果你有两个作业 job1
和 job2
,job2
只有在 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"
|
在上述代码中,job1
和 job2
将顺序执行。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"
|
在这个例子中,job1
、job2
和 job3
将并行执行,因为它们之间没有依赖关系。
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 steps: - name: Checkout code uses: actions/checkout@v2 - name: Run tests run: | echo "Running tests in job2"
job3: runs-on: ubuntu-latest needs: job2 steps: - name: Deploy application run: | echo "Deploying in job3"
|
在这个示例中,job2
在 job1
完成后执行,而 job3
则在 job2
完成后执行。这里使用 needs
关键字创建了依赖链,使得作业按顺序执行。
5. 总结
在本篇中,我们讨论了 GitHub Actions 中作业的并行与串行执行,展示了如何通过定义依赖关系来控制作业的执行顺序。从业务场景出发合理设计工作流,能够有效提升 CI/CD 的效率和稳定性。
在下一篇中,我们将探讨作业与步骤之间的依赖关系,进一步提升你对 GitHub Actions 的理解和应用。希望你能在实际项目中灵活运用这些知识,优化你的工作流!