代码仓库服务之 GitLab

发布于:

开源软件

GitLab 是一个优秀的协作代码仓库服务,拥有几乎所有 GitHub 的功能,可以当作后者的开源实现。不同于纯 git 仓库服务, GitLab 主打社区和自动化 Pipeline 功能,拥有众多优秀扩展如 CI/CD,Pages,Issue board 等。

关于 GitLab

GitLab是由GitLab Inc.开发,使用MIT许可证的基于网络的Git仓库管理工具,且具有wiki和issue跟踪功能。

GitLab 由乌克兰程序员 Dmitriy Zaporozhets 和 Valery Sizov 开发,它由 Ruby 写成。后来,一些部分用 Go 语言重写。截止 2018 年 5 月,该公司约有 290 名团队成员,以及 2000 多名开源贡献者。 GitLab 被 IBM,Sony,Jülich Research Center,NASA,Alibaba,Invincea,O’Reilly Media,Leibniz-Rechenzentrum (LRZ),CERN,SpaceX 等组织使用。

CE 与 EE 版本

自建的 GitLab 服务分为开源社区版本 (CE) 和企业版本 (EE),一般来说 CE 版本已经足够团队的开发使用了,企业版多了代码质量、GitLab geo 、Epics 等功能。

另外如果团队或个人有维护开源项目,也可以申请 GitLab 的开源许可,可以免费获得完整的企业版功能。

与 Gerrit 对比

Gerrit 是 Google Android 团队开发的代码仓库服务,主打的特性是代码 Review,不同于 GitHub 和 GitLab 这一类社区化仓库服务主要是以 Pull request 方式迭代代码,相对于 Gerrit,GitLab 服务功能更强大高效更现代化一些。

基本使用

添加 ssh key

注册成功后就可以按照提示在 /profile/keys 添加 ssh key 了,添加完成后就可以 push 提交代码了。

新建工程

点击主页的 New Project 就可以新建工程了,注意这里可以将工程设置三个可见状态,private 私有仓库任何其他人都不可见,也无权限访问和克隆;Internal 内部仓库则是任何注册的用户可见可访问;Public 公开仓库表示未注册的用户也可以访问。

另外也可以通过模板创建工程,也可以通过 Import project 导入外部的代码仓库。

新建组

点击右上角的加号,选择 New Group 即可创建新的群组,界面和创建新工程类似,也包括三个可见状态,和仓库类似。可以按照实际业务模块新建群组来将多个开发者和项目联系起来,方便管理和协作。

代码权限

可以点击工程设置中的 Permission 选项卡调整工程的权限,这里可以设置代码、Issue、Wiki 等权限。

Issue boards

Issue boards 类似于 trello,可以高效的可视化管理项目的问题和进度。

WIKI

每个工程都会有一个 wiki 库,这里可以托管公共文档, 项目说明文档,操作手册,知识共享等内容。

集成 CI

GitLab 的一大优势就是集成的 CI,通过 GitLab Runner,可以自动化构建发布任何软件工程。同时可以确保在每次提交时检查代码质量、编译、测试、部署等。通过 Pipeline, 可以方便的将每个阶段独立分离。

如下代码是一个简短的 Android 工程编译 CI 代码:

image: xdtianyu/docker:openjdk8
before_script:
  - source /opt/setup-android-sdk.sh

stages:
  - build
build:
  stage: build
  script:
    - ./gradlew build
    - mkdir -p dist
    - find app/build/outputs/ -name \*.apk -exec cp {} dist \;
  artifacts:
    paths:
      - "dist/*"

生成 pages

GitLab pages 是另一个强大的功能,可以方便的将文档或者 API 手册发布到 pages 网页服务上。

例如下面的 CI 代码可以自动运行 hexo 静态博客生成工具,将项目中的 md 文档生成 html 文件发布到 pages 服务,之后就可以通过浏览器打开网址直接访问了。类似的也可以将自己编写的 html, java api doc,单元测试报告,覆盖率报告等文件直接发布到 pages。

image: node:8.11.2

before_script:
  - git submodule sync --recursive
  - git submodule update --init --recursive

pages:
  cache:
    paths:
    - node_modules/

  script:
  - npm install hexo-cli -g
  - npm install
  - hexo deploy
  artifacts:
    paths:
    - public
  only:
  - master

轻量代码仓库

相对于功能强大的 GitLab,也有一些轻量级的代码仓库服务如 Gitea , Gogos 等。可以访问 awesome-selfhosted#project-management 查看。

参考

https://zh.wikipedia.org/zh-hans/Gitlab

GitLab Pricing