内容简介:经典的 git flow 图中,有 Master、Hotfix、Release、Develop、Feature 等分支。每个分支的作用各不相同。各个分支的主要功能如下:
lyonger
网易资深运维工程师,先后负责过多个游戏产品的运维工作,多年运维生涯。负责游戏 CI/CD、游戏上云、gitlab 平台维护等工作。主要关注 Linux 性能优化、DevOps、云原生领域。探索和分享是一趟美好的旅程。
1. 环境说明
本文提到的社区版本和企业版本信息如下:
-
社区版本:GitLab Community Edition 11.11.4
-
企业版本:GitLab Enterprise Edition 12.6.7
注意:本文中有注明企业版 (Starter) 才支持的地方代表只有企业版 (Starter) 才支持。否则默认就是社区版也支持该特性。企业版的收费标准请参考官网:https://about.gitlab.com/pricing
2. Git Flow 简介
经典的 git flow 图中,有 Master、Hotfix、Release、Develop、Feature 等分支。每个分支的作用各不相同。各个分支的主要功能如下:
3. Gitlab Code Review 方式
一共有 2 种 常见的方式来进行 gitlab 的 code review,本文主要介绍 远程方式 的使用。
-
本地方式:在本地将源分支 (Source branch) 代码合并到目标分支(Target branch),然后 Push 到远程的目标分支(Target branch)。
-
远程方式:将源分支 (Source branch) Push 到远端,然后在 GitLab 前端指定目标分支(Target branch)发起 Merge Request,对目标分支(Target branch)拥有 Push 权限的用户执行 Merge 操作,完成合并。
4. Gitlab Code Review 配置
在 Code Review 执行之前,进行一些合理的配置会有事半功倍的效果,下面我们来谈谈有助于 Code Review 常见功能。
4.1 Approvals 与 Merge Request 定制功能
可对 Merge Request 进行定制,如下图,要求 MR 可点击合并的条件是:pipeline 必须返回成功,同时所有 discussions 已被标记为 resolved。其中默认删除源分支的功能只有 企业版 (Starter) 才支持。
关于审核员规则 (该功能只有 企业版 才支持),这里推荐按照团队的情况进行定制:一种是核心成员,经验丰富,对成员代码把关;另一种是,新人团队,随机抽取,互相监督,互相学习。
4.2 Issue 与 Merge Request 的模版功能
在开发流程比较固定的情况下,我们可以对 issue 和 Merge Request 的内容格式进行模版化,如下图,我们以 code_review/project1 这个 repo 为例,在仓库根目录下新增了 .gitlab/issue_templates/Issue.md 和 .gitlab/merge_request_templates/Merge_Request.md 两个文件,分别代表设置 issue 和 Merge Request 的模版内容。详细说明可参考官方说明 (https://docs.gitlab.com/ee/user/project/description_templates.html#overview)。
issue 的模版效果如下图所示:
Merge Request 的模版效果如下图所示:
4.3 Issue 与 Merge Request 的联动功能
当提交到 master 默认分支时,gitlab 支持提交信息带上:关键词 + issue 编号来联动 issue( 注意关键字后面必须跟上一个空格 )。常见的关键字 style=fix/fixes/fixed、close/closes/closed、resolve/resolves/resolved
issue 编号可以参考下图:
4.3.1 案例参考
下图为实际的操作案例
Merge Request 联动 issue 的界面。
issue 里面联动 Merge Request 的界面。
4.4 Gitlab 的 Code Quality 功能
我们可以利用开源的 Code Climate Engines 工具,对仓库代码进行质量检查。Code Climate Engines 可以免费使用,但是 report 在 mr 界面的 report 展示需要 企业版 (Starter) 才支持。具体说明可参考官方文档 (https://docs.gitlab.com/ee/user/project/merge_requests/code_quality.html),要使用该功能,需要配置好 gitlab-runner 的 Docker-in-Docker 模式,其中 gitlab-runner 的 config.toml 配置可参考如下:
[[runners]]
name = "gitlab_runner_name"
url = "https://git-test.xxx.com/"
token = "your_token"
executor = "docker"
[runners.custom_build_dir]
[runners.docker]
tls_verify = false
image = "docker:stable"
privileged = true # 必须打开特权模式
disable_entrypoint_overwrite = false
oom_kill_disable = false
disable_cache = false
volumes = ["/cache"]
shm_size = 0
[runners.cache]
[runners.cache.s3]
[runners.cache.gcs]
对应的 .gitlab-ci.yml 配置可参考如下:
code_quality:
stage: check
tags:
- codequality
image: registry.test.com/library/debian_ci
allow_failure: false
services:
- name: docker:stable-dind
alias: docker-codequality
variables:
DOCKER_TLS_CERTDIR: ""
DOCKER_HOST: "tcp://docker-codequality:2375"
DOCKERHUB_URL: "registry.test.com"
GIT_LFS_SKIP_SMUDGE: "1"
AUTH_TOKEN_TTL: "1800"
before_script:
- |
if ! [ -f .codeclimate.yml -o -f .codeclimate.json ] ; then
cp .gitlab/ci/codeclimate/.codeclimate.yml ./
fi
- |
if ! [ -f tox.ini ] ; then # pep8
cp .gitlab/ci/codeclimate/tox.ini ./
fi
- |
if ! [ -f .pylintrc ] ; then
cp .gitlab/ci/codeclimate/.pylintrc ./
fi
- |
if ! [ -f .cppcheck-suppressions ] ; then
cp .gitlab/ci/codeclimate/.cppcheck-suppressions ./
fi
- |
AUTH_TOKEN=`python $PWD/.gitlab/ci/dockerhub/get_token.py`
docker login -u "$AUTH_USER" -p "$AUTH_TOKEN" "$DOCKERHUB_URL"
docker run --env CFG="$(cat /root/.docker/config.json)" \
--volume /root/.docker:/root/.docker \
alpine sh -c 'echo "$CFG" > /root/.docker/config.json'
script:
- |
if ! docker info &>/dev/null; then
if [ -z "$DOCKER_HOST" -a "$KUBERNETES_PORT" ]; then
export DOCKER_HOST='tcp://localhost:2375'
fi
fi
- docker run --env SOURCE_CODE="$PWD"
--env ENGINE_MEMORY_LIMIT_BYTES=4000000000
--volume "$PWD":/code
--volume /var/run/docker.sock:/var/run/docker.sock
--volume /root/.docker:/root/.docker
"$DOCKERHUB_URL/test/codequality:12-3-stable" /code
- |
if [ -f gl-code-quality-report.json ] ; then
REPORT=$(head -n 1 gl-code-quality-report.json)
if [ "$REPORT" != '[]' ] ; then
exit 1
fi
fi
after_script:
- docker logout "$DOCKERHUB_URL"
artifacts:
reports:
codequality: gl-code-quality-report.json
paths: [gl-code-quality-report.json]
when: on_failure
expire_in: 1 week
only:
refs:
- merge_requests
changes:
- .gitlab/ci/Code-Quality.gitlab-ci.yml
- .gitlab/ci/codeclimate/*
- Client/Content/Scripts/**/*.py
- Server/Logic/**/*.py
- Server/GameCpp/GameCore/**/*.{cpp,h}
except:
variables:
- $CODE_QUALITY_DISABLED
empty-report:
stage: check
tags:
- docker-dind
image: registry.test.com/test/alpine:3.11
variables:
GIT_LFS_SKIP_SMUDGE: "1"
GIT_SUBMODULE_STRATEGY: none
GIT_STRATEGY: none
script:
- echo '[]' > gl-code-quality-report.json
artifacts:
reports:
codequality: gl-code-quality-report.json
expire_in: 1 week
only:
refs:
- master
这里需要注意的是,当检查的代码文件数较多时,需要根据情况适当提高 ENGINE_MEMORY_LIMIT_BYTES 的值,否则会因为内存不足检查失败。同时 gl-code-quality-report 依赖上次 master 分支是否有 diff 而进行展示,故首次使用时,需触发下面的 empty-report 这个 stage,上传一个空的 gl-code-quality-report.json 文件。
上传以后,在 MR 的界面,可以看到类似如下的界面,代表 Code Quality 功能启用成功。
5. Gitlab Code Review 实践
我们以一个测试项目为例进行简单的 Code Review 说明。
第一步:选择源目标分支
如下图,选择源分支和目标分支,新建 MR:
第二步:设置 MR 相关参数
注意下面的 Merge request dependencies 和 Approval rules 只有 企业版 (Starter) 才支持。
第三步:开始 review
开始 code review,多人进行 discuss 和 comment,其中多人 Finish review 的功能只有 企业版 (Starter) 才支持。如下图:
第四步:审批解决 discuss
discussions 未解决时,无法点击 Merge 按钮。当所有 discussions 已经解决,并且 pipeline 执行成功,approve 批准以后,才可点击执行。下图为了演示方便,我取消了本次的 approve。
第五步:解决合并冲突
如果合并过程产生了冲突,如下图所示,提示你有 2 种方式来处理。一种是直接在 web 前端界面进行修改。另外一种是在本地进行修改。解决冲突时需要拉上团队里的其他成员一起讨论,留下最终需要的内容进行提交即可。
这里我为了演示方便,我选择在前端上直接修改冲突,点击 Resolve conflicts,出现如下界面,按照图中三个步骤操作即可。
第六步:融入目标分支
当 discuss 已经解决、pipeline 执行成功、Approval 审批完成、Conflicts 已经解决的时候,可以看到 Merge 按钮为绿色,最终点击 MR 融入目标分支。
6. 建议与总结
选择社区版本 (CE) 还是企业版 (Starter),取决于业务的需求。如果业务的 Code Review 过程强烈需要多人审批 (approval)、多人 Finish review、Code Quality 的 report 在 MR 展示等功能,则优先考虑企业版,否则社区版本做也是一个不错的选择。
往期精彩
﹀
﹀
﹀
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- vue项目实践004~~~一篮子的实践技巧
- HBase实践 | 阿里云HBase数据安全实践
- Spark 实践:物化视图在 SparkSQL 中的实践
- Spark实践|物化视图在 SparkSQL 中的实践
- HBase实践 | 数据人看Feed流-架构实践
- Kafka从上手到实践-实践真知:搭建Zookeeper集群
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Algorithms Unlocked
Thomas H. Cormen / The MIT Press / 2013-3-1 / USD 25.00
Have you ever wondered how your GPS can find the fastest way to your destination, selecting one route from seemingly countless possibilities in mere seconds? How your credit card account number is pro......一起来看看 《Algorithms Unlocked》 这本书的介绍吧!