GitLab CI,monorepo和功能分支

时间:2019-03-08 16:47:41

标签: gitlab gitlab-ci monorepo feature-branch

我在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似乎正在考虑更改每个文件。

您知道任何解决方法吗?

1 个答案:

答案 0 :(得分:2)

Gitlab ci始终将新分支的changes视为true。原因是他们无法决定要与之进行比较。

  

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

有关更多详细信息,请参见feature request

但是,有一个相当新的功能称为merge requests的管道-对合并请求运行一个阶段。 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