如何使用 gitlab 设置 yaml 文件以在特定文件更改时进行部署?
How to set up yaml file with gitlab to deploy when a specific file changes?
我正在尝试为 GitLab 设置一个 YAML 文件,仅当特定文件夹发生更改时才会部署到我的 QA 服务器。
这是我拥有的,但它不想工作。语法未记录任何错误。
deploy to qa:
script: **aws scripts**
only:
refs:
- master
changes:
- directory/*
stage: deploy
environment:
name: qa
url: **aws bucket url**
问题似乎出在这部分,其余部分没有它也能正常工作。该文档讨论了使用规则来替代 when only 和 changes 一起使用,但我也无法让它工作。
only:
refs:
- master
changes:
- directory/*
您 运行 遇到的问题是您的“唯一”规则的 refs
部分。根据 GitLab's documentation 关于“更改”:“如果您使用分支、external_pull_requests 或 merge_requests 以外的引用,则更改无法确定给定文件是新文件还是旧文件,并且始终 returns 是的。”由于您使用 master
作为参考,因此您 运行 正在处理这个问题。
正如您所确定的,正确的答案是使用 rules
关键字。等效的 rules
设置应如下所示:
deploy to qa:
script: **aws scripts**
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
changes:
- directory/*
when: on_success
- when: never
stage: deploy
environment:
name: qa
url: **aws bucket url**
本质上,规则是说“如果您正在构建的提交存在于您的默认分支(在您的情况下为 master
),并且您在 directory/*
中进行了更改,则 运行 以前的作业成功时的此作业。否则,永远不会 运行 此作业
注意:从技术上讲,如果没有匹配的子句,则隐含 when: never
,但我更喜欢包含它,因为它明确说明了您对下一个必须阅读您的 CI/CD 文件的人的期望。
我正在尝试为 GitLab 设置一个 YAML 文件,仅当特定文件夹发生更改时才会部署到我的 QA 服务器。
这是我拥有的,但它不想工作。语法未记录任何错误。
deploy to qa:
script: **aws scripts**
only:
refs:
- master
changes:
- directory/*
stage: deploy
environment:
name: qa
url: **aws bucket url**
问题似乎出在这部分,其余部分没有它也能正常工作。该文档讨论了使用规则来替代 when only 和 changes 一起使用,但我也无法让它工作。
only:
refs:
- master
changes:
- directory/*
您 运行 遇到的问题是您的“唯一”规则的 refs
部分。根据 GitLab's documentation 关于“更改”:“如果您使用分支、external_pull_requests 或 merge_requests 以外的引用,则更改无法确定给定文件是新文件还是旧文件,并且始终 returns 是的。”由于您使用 master
作为参考,因此您 运行 正在处理这个问题。
正如您所确定的,正确的答案是使用 rules
关键字。等效的 rules
设置应如下所示:
deploy to qa:
script: **aws scripts**
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
changes:
- directory/*
when: on_success
- when: never
stage: deploy
environment:
name: qa
url: **aws bucket url**
本质上,规则是说“如果您正在构建的提交存在于您的默认分支(在您的情况下为 master
),并且您在 directory/*
中进行了更改,则 运行 以前的作业成功时的此作业。否则,永远不会 运行 此作业
注意:从技术上讲,如果没有匹配的子句,则隐含 when: never
,但我更喜欢包含它,因为它明确说明了您对下一个必须阅读您的 CI/CD 文件的人的期望。