如何使用 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 文件的人的期望。