请教下各位大佬:
![]() | 1 virusdefender 2020-08-27 11:10:58 +08:00 ci 中加一项跑你的验证,依赖 staging 那一步,跑完了整个 ci 才结束 |
![]() | 2 css3 OP @virusdefender 加了啊,问题在于,现有顺序是先提交后才触发执行 ci 。应该要先执行 ci,验证结果通过后才能 push 或 merge |
![]() | 3 Chingim 2020-08-27 11:18:47 +08:00 Pipelines for Merge Requests https://docs.gitlab.com/ee/ci/merge_request_pipelines/ |
![]() | 4 maichael 2020-08-27 11:19:51 +08:00 锁分支,不给直接推送,然后手动在界面上提交合并请求 |
![]() | 5 AngryPanda 2020-08-27 11:21:27 +08:00 走 MR,不要给权限直接客户端操作 |
![]() | 6 virusdefender 2020-08-27 11:31:20 +08:00 @css3 你们直接 push master ? 应该用 merge request |
![]() | 7 NauxLiu 2020-08-27 11:34:01 +08:00 1. 将 master 设置为 protect branch,不允许直接 Push 2. 打开项目的 Merge Request 设置里的 Pipelines must succeed |
![]() | 8 css3 OP @virusdefender 有 MR,但大家不遵守规范,一股脑提过来,要人工检查,索性就写了个脚本自动验证,这不是没按预计想的那样运行么 |
![]() | 9 wxsm 2020-08-27 11:42:02 +08:00 via iPhone 我刚好也在搞这个。目前在尝试 gitlab 前面再对接一个 gerrit |
![]() | 10 wxsm 2020-08-27 11:45:46 +08:00 via iPhone 但是不太顺利,怎么说呢,gerrit 能 push 的,人也能,人不能 push 的,gerrit 也不能。ce 没有评审功能很蛋疼。 |
14 taogen 2020-08-27 12:04:20 +08:00 The branch you are building and testing on is only for building and testing. On your dev branch if any tests fail you just fix it and push it again. |
![]() | 15 skyadmin 2020-08-27 12:09:24 +08:00 master 分支设为保护分支,不允许任何人,直接推送代码至 master 分支。就可以让大家必须都在 merge request 了。 |
![]() | 16 skyadmin 2020-08-27 12:10:09 +08:00 项目的 settings - repository - Protected Branches 里设 |
![]() | 17 skyadmin 2020-08-27 12:14:42 +08:00 然后勾选 settings - General - Merge request,勾选 Only allow merge requests to be merged if the pipeline succeeds 。 和#7 说的一样,只是给了下具体操作路径。 |
18 1109599636 2020-08-27 12:31:20 +08:00 我的理解是个人提交到个人分支,然后个人分支跑 ci 各种流程,ci 通过了才可以 merge 到公共分支吧。如果在 commit 之前就做检查可以用 pre-commit hooks |
![]() | 19 StarUDream 2020-08-27 12:34:54 +08:00 目前用的就是 15-17 楼所说的方法,目测可以解决楼主问题。 |
![]() | 20 594duck 2020-08-27 12:41:58 +08:00 |
21 nightwitch 2020-08-27 12:57:37 +08:00 禁止提交到 master,要提交到 master 发 pull request 。发 pull request 的时候自动触发 CI 测试,CI 测试不过不允许合并 |
![]() | 22 zmxnv123 2020-08-27 13:04:15 +08:00 git hook? |
23 Rwing 2020-08-27 13:09:47 +08:00 @nightwitch 这个是正解 |
![]() | 24 Sapp 2020-08-27 13:43:38 +08:00 coommit 可以添加钩子啊,前端就有个叫哈士奇的,不通过 commit 都没办法提交 |
25 phy25 2020-08-27 14:21:43 +08:00 via Android 比较优雅的办法,自动提交 MR: https://docs.gitlab.com/ee/user/project/merge_requests/merge_when_pipeline_succeeds.html https://docs.gitlab.com/ee/user/project/push_options.html git push -o merge_request.create -o merge_request.target=my-target-branch -o merge_request.merge_when_pipeline_succeeds |
![]() | 26 janxin 2020-08-27 15:21:35 +08:00 禁止 master 分支直接提交 设置 Protected Branches 合并 MR 需要在 pipelines 执行成功 设置 Only allow merge requests to be merged if the pipeline succeeds |
27 maltoze 2020-08-27 15:26:40 +08:00 |
![]() | 28 gen900 2020-08-27 15:33:51 +08:00 via iPhone gitlab 里 没有通过 pipeline 的 merge request 不让合并的。就是你 push 后就在做 ci 了如果失败 mr 不让合并 |
29 wshcdr 2020-08-27 15:38:06 +08:00 同意 MR 的做法 |
![]() | 30 otakustay 2020-08-27 20:12:44 +08:00 按照楼主的要求,其实你一开始就应该用 gerrit 而不是 gitlab |
31 dddd1919 2020-08-27 23:10:20 +08:00 提 git 的人不按规范执行,总有方法绕过你的设置,不统一提交规范,其他的就别扯了 用 git 靠的是约定,不是靠各种限制,如果大家都不遵守约定,那就找人专门来干这事,或者换个工具吧。 统一 git flow,再用 ci 才能达到比较好的效果,比如配置 ci 在 feature 上执行,禁用 remote push master,合并 mr 前要 ci 通过,ci 同时配置 build 和 run test 等等 |
![]() | 32 icylogic 2020-08-28 06:55:19 +08:00 via iPhone 我们 master/develop 任何人都不能推的,所有更改都要通过其他分支提 mr,mr 只能由 reviewer 点合并,如果 ci pipeline 挂掉或者有 conflict,合并按钮都是灰的没法点(可以选项里改) |
![]() | 33 wxsm 2020-09-23 15:27:45 +08:00 我通过 gitlab 的 webhook 和 api 自己实现了一套评审系统,详见: https://wxsm.space/posts/2020-09-23-gitlab-ce-code-review-bot.html |
![]() | 34 dengxuejiu 2022-01-12 16:07:41 +08:00 亲测可用,在 merge 之前做代码规范检查等工作还是挺好用的 |