如何让 .gitlab-ci.yml 在不同的 folders/subfolders 中执行不同的 ansible 剧本?

How do I make .gitlab-ci.yml execute different ansible playbooks in different folders/subfolders?

我刚开始学习 NetDevOps

所有包含 GitLAb + Ansible 演示的示例都展示了如何从 .gitlab-ci.yml.

中的 Ansible 执行“deploy.yml

然而,当我看到基于一般网络设备的 Ansible 教程时,作者执行不同的 Ansible cookbook .yml 文件,例如从根目录执行 sites.yml,从另一个子文件夹执行 deploy.ymlinterfaces.yml 来自另一个子文件夹。

谁能给我一个例子,说明我将如何按需执行不同的 Ansible 剧本 .yml 文件?

即- 当它检测到文件夹中 .yml 的变化时,运行 该文件夹下的 .yml 文件?

您可以在 GitLab 作业中使用 complex rules,如 ifchangesexists,在相同的规则中。
仅当所有包含的关键字评估为 true.

时,规则才评估为 true

For example:

docker build:
 script: docker build -t my-image:$CI_COMMIT_REF_SLUG .
 rules:
   - if: '$VAR == "string value"'
     changes:  # Include the job and set to when:manual if any of the follow paths match a modified file.
       - Dockerfile
       - docker/scripts/*
     when: manual
     allow_failure: true

在您的情况下,如果 yml Ansible 剧本已更改,请保留 when: manualchanges: *.yml 以便手动触发作业。

假设你有一个 ansible 仓库和一个 .gitlab-ci.yml 在它的根目录中。

.gitlab-ci.yml
ansible/cookbook1
ansible/cookbook2

您可以为每本食谱创建一个 Gitlab 作业

execute_cookbook1:
 script: 
  - ...ANSIBLE COMMANDS...
 ...
 only:
     changes: 
       - ansible/cookbook1/**/*.yml
    
execute_cookbook2:
 script: 
  - ...ANSIBLE COMMANDS...
 ...
 only:
     changes: 
       - ansible/cookbook2/**/*.yml

这样,当您将代码推送到 ansible 存储库时,Gitlab 将检测更改了哪本 cookbook。 运行 相应的工作