【问题标题】:GitLab CI, monorepo and feature branchGitLab CI、monorepo 和功能分支
【发布时间】:2019-07-30 17:46:05
【问题描述】:

我在 GitLab 中有一个带有功能分支方法的 monorepo。

我想要实现的是启动与包含更改文件的目录关联的管道部分。所以我的 .gitlab-ci.yml 看起来像:

job1:
  stage: build
  script:
    - ...
  only:
    changes:
      - myparentdir/dir1/*

job2:
  stage: build
  script:
    - ...
  only:
    changes:
      - myparentdir/dir2/*
  1. 从develop创建一个新分支
  2. 在此分支上提交 myparentdir/dir2/test.txt
  3. 管道启动每个构建作业!

似乎 GitLab 在使用新功能分支时将每个文件都视为已更改。

您知道任何解决方法吗?

【问题讨论】:

    标签: gitlab gitlab-ci monorepo feature-branch


    【解决方案1】:

    Gitlab ci 总是将新分支的 changes 视为 true。原因是他们无法决定要比较什么。

    这意味着对于新分支的第一个管道,所有内容都将被构建。

    有关详细信息,请参阅feature request

    但是,merge requests 有一个名为 Pipelines 的相当新的功能 - 它在合并请求上运行一个阶段。 Here 是使用 merge_requests 实现 changes 的功能请求。它已合并,但我不确定它是否已经发布。 (里程碑是 11.9 - 下一个版本)

    同时你可以自己实现——你可以添加一个比较变化的阶段(git diff)并决定是否运行下一个阶段:

    .store_diff_from_main: &store_diff_from_main |
      git diff --name-only origin/master...HEAD > "${DIFF_FILE}"
      git diff --name-only HEAD~1 >> "${DIFF_FILE}"
    
    .skip_stage: &skip_stage_condition |
      echo Checking for changes in ${STAGE_PATHS}, changed files
      # https://coderwall.com/p/gecfwa/git-diff-vs
      cat .diff-from-master
      # also cover merge squash cases
      if ! (cat ${DIFF_FILE} | grep -E "${STAGE_PATHS}"); then
        echo "Skipping stage ..."
        exit 0
      fi
    
    

    【讨论】:

    • 看起来不错。目前,我不能肯定它解决了我的问题,因为我很难用 Windows 批处理来实现它:stackoverflow.com/questions/55105278/…
    • 它有效。问题是我所有的 126 个工作都启动了,125 个被跳过但仍然出现在我的管道中......
    • 这就是这个解决方案的问题——它不是本地的——所以工作会开始但会被跳过。我也在等原生解决方案
    • only: changes 结合 only: refs: - merge_requests 似乎允许我拥有特定于代码的管道但有奇怪的行为,因为“唯一的行为:merge_requests 参数的行为是只有具有该参数的作业才能运行合并请求的上下文;不会运行其他作业。”来自docs.gitlab.com/ee/ci/merge_request_pipelines,所以我不能让某些作业适用于所有代码更改和其他特定于文件路径的作业。
    • @mmacvicar 你是对的。就我而言,我有分支 master 和 feature 分支。如果我想为 PR 和 master 运行某个阶段,我添加 - master 在 merge_request 行之后
    猜你喜欢
    • 2019-05-03
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 2021-07-05
    • 2018-08-30
    • 2022-11-04
    相关资源
    最近更新 更多