跳到主要内容

Podman CI

以下是 Podman CI 支持的主要上下文和运行时“模式”的列表(不完整)。请注意,runner.sh 脚本中可能还有关于“跳过工作”的其他检查。本文档仅详细说明了 .cirrus.yml 级别的控制。

可视化

通过盯着 YAML 文件来理解任务之间的关系可能非常困难。 存在一个工具 用于生成 .cirrus.yml 文件的图形(流程图)。下面是一个(可能已过时)的输出示例:

cirrus-task-map 输出

实现注意事项

  • skip 条件不应用于任务。尽管它可能更容易阅读,但会导致一个混乱的状态输出,在审查 PR 时更难翻页浏览。与 only_if 不同,only_if 会在运行时完全绕过任务的创建。此外,坚持使用一种条件样式,可以更容易地在多个任务之间重用 YAML 语句。

  • 可以用作条件一部分的唯一变量是由 Cirrus-CI 定义的。 列表已记录在案。对 YAML 中定义的任何变量的引用不会按您期望的方式工作,请不要使用它们!

  • 一些由 Cirrus-CI 定义的变量在其明显的上下文之外包含非空值。例如,对于 PR 运行的任务,$CIRRUS_BRANCH 将被设置为 pull/<number>

  • 使用正或负正则表达式的条件具有几个“标志”设置:“多行”和“不区分大小写”。

测试

通过强制为(否则)Cirrus-CI 定义的变量设置值,可以模拟执行大多数模式。例如 $CIRRUS_TAG。在发布本文档时,不可能覆盖 $CIRRUS_PR 的行为。

Cirrus CI 任务上下文和运行时模式

针对常规 PR 的预定任务(斜体:矩阵)

  • build
  • validate
  • bindings
  • swagger
  • alt_build
  • osx_alt_build
  • freebsd_alt_build
  • docker-py_test
  • unit_test
  • apiv2_test
  • compose_test
  • local_integration_test
  • remote_integration_test
  • container_integration_test
  • rootless_integration_test
  • local_system_test
  • remote_system_test
  • rootless_remote_system_test
  • buildah_bud_test
  • rootless_system_test
  • rootless_gitlab_test
  • upgrade_test
  • meta
  • success
  • artifacts

针对标题中包含 "release" 或 "bump" 的 PR 的预定任务:

  • (上述所有常规 PR 任务)
  • release_test

针对标记为 [CI:DOCS] 的 PR 的预定任务:

  • build
  • validate
  • swagger
  • meta
  • success

针对标记为 [CI:BUILD] 的 PR 的预定任务:

  • build
  • validate
  • alt_build
  • osx_alt_build
  • freebsd_alt_build
  • meta
  • success
  • artifacts

针对标记为 [CI:MACHINE] 的 PR 的预定任务:

如果且仅当 PR 处于 草稿模式 时,才运行以下任务。这个草稿模式检查是必要的,以消除合并可能影响 podman 未测试方面的更改的风险。

  • build
  • validate
  • alt_build
  • win_installer
  • osx_alt_build
  • podman_machine_task
  • podman_machine_aarch64_task
  • podman_machine_windows_task
  • podman_machine_mac_task
  • meta
  • success
  • artifacts

这些预定任务涵盖了 Podman CI 在处理不同类型的 PR 时所运行的各种上下文和运行时模式。每个任务都有其特定的目的和用途,以确保 Podman 的质量和稳定性。通过理解这些任务,开发人员可以更好地了解 CI 流程,并在需要时调整或添加任务来满足特定的需求。

[CI:NEXT] 的预定行为:

如果且仅当 PR 处于 草稿模式 时,在运行时更新 Fedora CI 虚拟机,以使用 podman-next COPR 仓库中可用的最新软件包。这些软件包代表了 Podman 的主要依赖项,并会定期从其上游仓库中构建。这些更改是 运行时更改,不会影响或持久化到其他 PR。

这种行为的目的是暂时支持使用最新的 Podman 代码和测试进行更新测试。为防止意外情况发生,当 PR 不处于草稿模式时,该魔法字符串(magic string)的存在将导致 VM 设置脚本失败,直到该魔法字符串被移除。

注意: 在更改 PR 的草稿状态时,您需要重新推送一个提交更改,Cirrus-CI 才会注意到草稿状态的更新(即,点击重新运行按钮是不够的)。

分支任务(和 Cirrus-cron 任务)的预定任务:

  • build
  • swagger
  • alt_build
  • osx_alt_build
  • freebsd_alt_build
  • local_system_test
  • remote_system_test
  • rootless_remote_system_test
  • rootless_system_test
  • meta
  • success
  • artifacts

针对新标签任务的预定任务:

  • build
  • swagger
  • alt_build
  • osx_alt_build
  • freebsd_alt_build
  • meta
  • success
  • artifacts
  • release

这些预定任务旨在确保在特定情况下(如新标签的创建或特定分支的更新)时,能够执行必要的构建、验证和测试步骤。通过执行这些任务,我们可以确保 Podman 的代码在合并或发布之前达到所需的质量标准。同时,[CI:NEXT] 的特殊行为允许开发人员在需要时测试与最新依赖项的兼容性,从而进一步确保 Podman 的稳定性和可靠性。