Tag Archives: GitLab

Gradle failed to create MD5 hash for file which has non-ascii characters in path

前段时间把 Gitlab Runner 的 executor 更改为 docker,遇到 gradle 报错,但是在本地进入 docker 执行却正常。

* What went wrong:
Execution failed for task ‘:app_ts3000_jplb:mergeDebugAssets’.
> Failed to create MD5 hash for file ‘/builds/multimedia/Avalon/applications/endpoint/android/app_ts3000_jplb/src/main/assets/ts_fonts/?????????.ttf’ as it does not exist.

Workaround:

LC_ALL=en_US.UTF-8 gradle build

基于GitLab的开发流程实施小结

最近协助一个开发团队实施了基于GitLab的开发流程,期间遇到的一些经验总结记录整理成本文。

该团队原先只有一个Subversion仓库,权限是按照目录分配的。同一个项目内的所有开发者都有提交权限,导致经常发生一些不该提交的文件被提交进仓库或者代码中包含了一些低级错误,等其他人发现为时已晚。因此迫切需要引入代码审查机制,第一时间对提交的代码进行审查,提高代码的质量。

组织架构及代码库规划

首先,为部门、项目组、个人分别建立账号;
其次,将原先单一的SVN仓库拆分成单独的Project。

组织架构及代码库示意如下:

repository-org

在GitLab上建立代码库

核心代码库是由原SVN库迁移导入,项目组将项目fork至项目组空间,开发人员从项目组fork至个人空间,在至此阶段GitLab上的仓库建立完毕。开发人员从本地通过git clone命令从将个人空间项目克隆至本地进行开发。流程示意如下:

workflow-1

本地开发仓库Pull与Push

注意:本地开发仓库的Pull与Push的远端URL是不同的。

更新本地仓库应从核心代码库拉取,因为核心代码库包括了其他开发者的工作成果;
提交应该至个人代码库,提交后在利用GitLab的Merge Request向上一级合并。

workflow-2

合并请求(Merge Request) & 代码审查(Code Review)

代码审查是在合并请求的过程中进行的,个人在GitLab中发起一个Merge Request,项目组会收到该请求,在GitLab界面上直接可以查看Commits和对比Changes,如果审查通过,Accept该请求,GitLab会自动Merge进项目组的代码库中;同理,项目组再向核心代码库发起Merge Request,由部门经过审查,则修改可以合并至核心代码库中。

workflow-3

以上是二级代码审查流程,其原理可以适用于更多层级的组织架构。