基于Docker快速搭建Gitlab与Gitlab CI/CD服务
此文档基于现有项目运行实践整理,其中包含了许多Gitlab、CI/CD相关概念,阅读需要有一定的Gitlab、Docker、CI/CD基础知识。
更多参考:
此项目能做什么
- 分享一些关于团队Git版本控制使用心得。
- 提供一份Docker版本的Gtilab私有化仓库应用实现,让你在开发团队内部快速构建一套Git托管仓库系统。
- 提供一份Gitlab Docker容器编排实现参考,分离Gitlab/Redis/PostgreSQL/Gitlab-CI和运行时数据。
- 提供一份Gitlab Runner Docker版本实现,在Runner容器内部增加了对PHP的支持,利用实现远程操作多台主机,实现分布式自动构建与交付。
- 加深对软件从编码 =》 构建 =》 测试 =》 部署的整个生命周期的认知,
- 为Web/Web API类型互联网产品自动化提供参考,适合中小型创业研发团队快速迭代版本。
Git Flow / Github Flow /Gitlab Flow Git工作流
Git团队开发中,大家都在向仓库中提交功能代码,时间久了,分支与版本就逐渐增多而变得复杂,因此,一个合理的版本管理流程在项目初期就非常重要。
使用Git,多数时候推荐流行的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,可以放心安装和卸载。
该项目基于 镜像构建,它将Gitlab/PostgreSQL/Redis容器进行了分离,更友好的理解其运行依赖,组织结构等内容,提供一套容器编排配置参考,支持Docker Compose快速构建与维护。
运行以下命令,确保你的主机已经安装好了Docker与Docke-Compose。
-
克隆仓库
$ git clone https://github.com/bravist/gitlab-docker$ cd ~/gitlab-docker复制代码
-
配置环境变量,推荐使用默认配置
$ cp .env.example .env复制代码
-
使用
docker-compose
自动构建镜像和启动容器$ docker-compose build && docker-compose up -d复制代码
-
查看容器并访问Gitlab Web控制台
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES8827363f45d8 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_1db0dd3b3d23f bravist/gitlab-ci-php-envoy:1.0 "/usr/bin/dumb-init …" 7 seconds ago Up 6 seconds gitlab-ci-php-envoy-runnerf598844c561c sameersbn/redis:latest "/sbin/entrypoint.sh…" 7 seconds ago Up 6 seconds 6379/tcp gitlab-redis73d93b7cd110 sameersbn/postgresql:9.6-2 "/sbin/entrypoint.sh" 7 seconds ago Up 5 seconds 0.0.0.0:5432->5432/tcp gitlab-postgresql复制代码
更多参考: