【问题标题】:Trigger CI-job when files outside a directory were done当目录外的文件完成时触发 CI 作业
【发布时间】:2021-03-10 15:10:22
【问题描述】:

我的项目包含一个包含 UI 相关代码的文件夹。对于我的测试,我有 API 测试和 UI 测试我想触发具有特定场景的作业,如果 UI 目录中的更改运行 UI 测试,这可以只用标签来完成,

only:
    changes:
      - directory/UI/**/*

,然后如果 API 发生更改,我想运行 API 测试。问题是我的项目有大约 20 个目录,只有一个包含 API 的 UI,有没有办法做到这一点,

only:
        changes:
          - directory1/project/**/*
          - directory2/project/**/*
          - directory3/project/**/*
          - directory5/project/**/*
          - directory6/project/**/*
          - directory7/project/**/*
          - directory8/project/**/*

我可以使用 except,但这仅适用于仅 UI 更改和仅 API 更改,但不适用于同时进行 API 和 UI 更改。有没有办法找到解决计算所有目录的方法?只考虑目录/UI 之外的变化

【问题讨论】:

    标签: git gitlab gitlab-ci


    【解决方案1】:

    如果你有一份 UI 更改工作

    only:
      changes:
        - directory/UI/*
    

    还有另一项 API 更改工作,例如:

    only:
      changes:
        - directory/API/*
        - ...
    

    然后,如果您将更改推送到 UI 和 API,这两个作业都将在管道中运行。

    这是一个完整的.gitlab-ci.yml 示例(这只是一个愚蠢的示例,因为我不知道您的管道是做什么的):

    stages:
      - build
      - test
      - deploy
    
    Build The App:
      stage: build
      script:
        - # run some build steps like `npm ci`, `npm run build`, generating config files, etc.
    
    Test UI Changes:
      stage: test
      only:
        changes:
          - /path/to/UI
      script:
        - # test the UI
    
    Test API Changes:
      stage: test
      only:
        changes:
          - /path/to/API
      script:
        - # test the API
    
    Deploy:
      stage: deploy
      when: manual
      script:
        - # deploy the whole app
    

    在此示例中,任何需要为 API 或 UI 执行的构建步骤都发生在 build 阶段,无论是在一个作业中还是在多个作业中 - 这取决于您。测试阶段有两个工作,因为我们分别测试 UI 和 API,但只需要在 UI 或 API 发生更改时运行测试。如果我们只将更改推送到 UI,则只有该作业会运行,API 作业也是如此。但是,如果我们对两者都进行更改,那么这两个作业都将在此阶段运行。

    最后,我们在测试成功后部署应用。

    【讨论】:

      猜你喜欢
      • 2014-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多