基于Docker快速搭建Gitlab与Gitlab CI/CD服务

564 阅读4分钟

基于Docker快速搭建Gitlab与Gitlab CI/CD服务

此文档基于现有项目运行实践整理,其中包含了许多Gitlab、CI/CD相关概念,阅读需要有一定的Gitlab、Docker、CI/CD基础知识。

更多参考:github.com/bravist/git…

此项目能做什么

  1. 分享一些关于团队Git版本控制使用心得。
  2. 提供一份Docker版本的Gtilab私有化仓库应用实现,让你在开发团队内部快速构建一套Git托管仓库系统。
  3. 提供一份Gitlab Docker容器编排实现参考,分离Gitlab/Redis/PostgreSQL/Gitlab-CI和运行时数据。
  4. 提供一份Gitlab Runner Docker版本实现,在Runner容器内部增加了对PHP的支持,利用Laravel Envoy实现远程操作多台主机,实现分布式自动构建与交付。
  5. 加深对软件从编码 =》 构建 =》 测试 =》 部署的整个生命周期的认知,
  6. 为Web/Web API类型互联网产品自动化提供参考,适合中小型创业研发团队快速迭代版本。

Git Flow / Github Flow /Gitlab Flow Git工作流

Git团队开发中,大家都在向仓库中提交功能代码,时间久了,分支与版本就逐渐增多而变得复杂,因此,一个合理的版本管理流程在项目初期就非常重要。

使用Git,多数时候推荐流行的git-flow工作流程 git-flow 备忘清单。通常,develop分支作为测试版本使用,所有开发者都能够向该分支合并代码,以保证代码经过评审和功能验证。master分支作为线上版本使用,只有仓库管理员才能向该分支合并代码,以确保线上版本稳定。

  • feature branches 功能特性分支,基于develop分支开发,在功能开发完成后,代码会被合并到develop分支,此分支也自动删除。
  • develop 测试分支,一般基于该分支构建应用的测试环境。
  • release branches 发布分支。新功能开发完成,经过了代码评审和功能验证后,仓库管理员使用git flow release start 1.0.0 命令方式合并develop分支到master分支。使用该命令,需要确保master分支与develop分支基础版本一致。
  • hotfixes 修复分支,一般而言,在线上环境出现问题,需要紧急修复时,需创建hotfix修复补丁分支,它基于master分支开发,补丁修复代码会被合并至master与develop分支。
  • master 生产分支,一般基于该分支中构建应用的生产环境。

在单人Git开发场景下,此流程足以满足需求,但是在多人的开发团队中,有时候稍显"无力",而Gitlab/Github推荐使用PR/MR的方式,开发者需要主动发起分支合并申请,在得到确认后,分支开发才算完成。

开发者基于主干分支先创建新的功能性分支,在功能开发完成后,需要作Merge Request申请,也即是主动请求合并功能分支代码到主干分支。仓库管理员会评审每一次MR,只有评审通过,新功能才被提交上线。

快速运行Gitlab

Gitlab提供社区与企业版本,官网提供多种Gitlab安装方式。此项目是基于Docker版本的Gitlab实现,开发者无需更多关心Gitlab安装过程,Docker镜像已做好了环境和依赖,只需要一台*Unix机器,并安装Docker,可以放心安装和卸载。

该项目基于Docker GitLab 镜像构建,它将Gitlab/PostgreSQL/Redis容器进行了分离,更友好的理解其运行依赖,组织结构等内容,提供一套容器编排配置参考,支持Docker Compose快速构建与维护。

运行以下命令,确保你的主机已经安装好了Docker与Docke-Compose。

  1. 克隆仓库

    $ git clone https://github.com/bravist/gitlab-docker
    $ cd ~/gitlab-docker
    
  2. 配置环境变量,推荐使用默认配置

    $ cp .env.example .env
    
  3. 使用docker-compose 自动构建镜像和启动容器

    $ docker-compose build && docker-compose up -d
    
  4. 查看容器并访问Gitlab Web控制台

    CONTAINER ID        IMAGE                             COMMAND                  CREATED             STATUS              PORTS                                                   NAMES
    8827363f45d8        sameersbn/gitlab:10.3.3           "/sbin/entrypoint.sh…"   4 seconds ago       Up 4 seconds        443/tcp, 0.0.0.0:10022->22/tcp, 0.0.0.0:10080->80/tcp   gitlabdocker_gitlab_1
    db0dd3b3d23f        bravist/gitlab-ci-php-envoy:1.0   "/usr/bin/dumb-init …"   7 seconds ago       Up 6 seconds                                                                gitlab-ci-php-envoy-runner
    f598844c561c        sameersbn/redis:latest            "/sbin/entrypoint.sh…"   7 seconds ago       Up 6 seconds        6379/tcp                                                gitlab-redis
    73d93b7cd110        sameersbn/postgresql:9.6-2        "/sbin/entrypoint.sh"    7 seconds ago       Up 5 seconds        0.0.0.0:5432->5432/tcp                                  gitlab-postgresql
    

更多参考:github.com/bravist/git…