【问题标题】:How to set up yaml file with gitlab to deploy when a specific file changes?如何使用 gitlab 设置 yaml 文件以在特定文件更改时进行部署?
【发布时间】:2021-11-21 20:26:48
【问题描述】:

我正在尝试为 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/*

【问题讨论】:

    标签: amazon-web-services deployment gitlab yaml cicd


    【解决方案1】:

    您遇到的问题是“唯一”规则的 refs 部分。根据 GitLab's documentation 关于“更改”:“如果您使用除分支、external_pull_requests 或 merge_requests 之外的引用,更改无法确定给定文件是新文件还是旧文件,并且始终返回 true。”由于您使用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/* 中有更改,然后在之前的作业成功时运行此作业. ELSE, 永远不要运行这个工作”

    注意:从技术上讲,如果没有匹配的子句,when: never 是隐含的,但我更喜欢包含它,因为它明确说明了您对下一个必须阅读您的 CI/CD 文件的人的期望。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-08
      • 2012-09-17
      • 2010-10-28
      • 2022-01-04
      相关资源
      最近更新 更多