Jupyter AI

13 GitHub Actions 自动化教程:作业与步骤的并行与串行工作流

📅 发表日期: 2024年8月15日

分类: ⚙️GitHub Actions 入门

👁️阅读: --

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

1. 作业与步骤概述

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

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

2. 串行作业

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

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

示例:并行作业

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 关键字来定义依赖关系。这使得某些作业在其他作业完成后才会执行。

示例:控制依赖关系

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 的理解和应用。希望你能在实际项目中灵活运用这些知识,优化你的工作流!

⚙️GitHub Actions 入门 (滚动鼠标查看)