版本化产品的 Ansible 组织

Ansible organization for a versioned product

我在一家拥有庞大代码库和多种产品的公司工作,
我们使用 Ansible 进行产品部署。
每个产品我们有多个共享角色和特定角色。
每个共享角色都有版本控制和标记,

让我们假设产品 X 在版本 1.0.0 和产品 Y 在版本 1.1.0 和 2 个共享角色 A 和 B

X 在 1.0.0
版本中依赖角色 A/B Y 依赖于 1.0.0 版本的角色 A 和 1.5.0 版本的角色 B

我正在为新的主要版本 1.1.0 开发我的产品 X
所以我也在 Ansible 中工作,添加多个配置文件,删除一些其他文件,更新共享角色 A

但是我的1.0.0版本还在生产中,所以可能需要针对bug进行一些调整。它可能也需要更新ansible。

现在是我的问题了。

当我使用更新后的 ansible 发布 X:1.1.0 时,我的剧本不再与 1.0.0 分支兼容。

在产品生命周期内处理 ansible 的最佳做法是什么

每个版本都有一个角色和任务很好吗?

tasks
  - main.yml
  - 1.0.0.yml
  - 1.1.0.yml
cat main.yml

---
include_tasks: {{product_version}}.yml


include_tasks: 1.1.0.yml
when : product_version >= 1.1.0
   

并且在每个版本文件中都包含与前一个版本的差异?

但对于1.10.0来说,这将成为一场噩梦...

您对这些用例有任何经验吗?

首先,我们必须假设所有角色都在自己的 git 存储库中。 (如果不是,请先修复它。)此外,将执行安装的剧本也在其自己的存储库中,以及一个名为 roles/requirements.yml 的文件。 (这是 Ansible Tower 期望的位置。)

特定版本的安装剧本回购将有一个特定的 roles/requirements.yml 文件,该文件将准确指定 运行 该版本剧本所需的角色版本。

因此,对于产品 X,我们有一个 roles/requirements.yml 文件,上面写着,

- name: A
  src: git@gitlab.company.com:mygroup/A.git
  scm: git
  version: 1.0.0
- name: B
  src: git@gitlab.company.com:mygroup/B.git
  scm: git
  version: 1.0.0

对于产品 Y,我们有一个 roles/requirements.yml 文件,上面写着,

- name: A
  src: git@gitlab.company.com:mygroup/A.git
  scm: git
  version: 1.0.0
- name: B
  src: git@gitlab.company.com:mygroup/B.git
  scm: git
  version: 1.5.0

Installing Roles with Ansible Galaxy