如何让 .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.yml
, interfaces.yml
来自另一个子文件夹。
谁能给我一个例子,说明我将如何按需执行不同的 Ansible 剧本 .yml
文件?
即- 当它检测到文件夹中 .yml
的变化时,运行 该文件夹下的 .yml
文件?
您可以在 GitLab 作业中使用 complex rules,如 if
、changes
和 exists
,在相同的规则中。
仅当所有包含的关键字评估为 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: manual
和 changes: *.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。 运行 相应的工作
我刚开始学习 NetDevOps。
所有包含 GitLAb + Ansible 演示的示例都展示了如何从 .gitlab-ci.yml
.
deploy.yml
”
然而,当我看到基于一般网络设备的 Ansible 教程时,作者执行不同的 Ansible cookbook .yml
文件,例如从根目录执行 sites.yml
,从另一个子文件夹执行 deploy.yml
, interfaces.yml
来自另一个子文件夹。
谁能给我一个例子,说明我将如何按需执行不同的 Ansible 剧本 .yml
文件?
即- 当它检测到文件夹中 .yml
的变化时,运行 该文件夹下的 .yml
文件?
您可以在 GitLab 作业中使用 complex rules,如 if
、changes
和 exists
,在相同的规则中。
仅当所有包含的关键字评估为 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: manual
和 changes: *.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。 运行 相应的工作