GitLab CI、monorepo 和功能分支

2023-12-26

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

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

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

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

看起来 GitLab 正在考虑在使用新功能分支时更改每个文件。

你知道有什么解决方法吗?


Gitlab ci总是对待changes对于新分支来说也是如此。原因是他们无法决定要与什么进行比较。

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

See the 功能要求 https://gitlab.com/gitlab-org/gitlab-ce/issues/19232#behavior-in-new-branch-case更多细节。

但是,有一个相当新的功能,称为 Pipelines合并请求 https://docs.gitlab.com/ee/ci/merge_request_pipelines/- 在合并请求上运行一个阶段。Here https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/24490是实现的功能请求changes与 merge_requests。它已合并,但我不确定它是否已经发布。 (里程碑是 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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GitLab CI、monorepo 和功能分支 的相关文章

随机推荐