Gitlab CI/CD
1.概述
Gitlab是常用的开源git代码管理工具之一,随着发展也推出了ci/cd解决方案.
顾名思义具体来说ci/cd主要完成以下两个工作.
- ci(持续构建)
代码提交后触发自动化的单元测试,代码预编译,构建镜像,上传镜像等. - cd(持续发布)
持续发布则指将构建好的程序发布到各种环境,如预发布环境,正式环境.
2.特性
gitlab ci/cd具有以下特性
- 跨平台支持
只要支持go语言的平台均可以在上面进行ci,目前基本涵盖了大部分的操作系统. - 多语言支持
构建时是通过脚本触发,因此基本上支持所有的语言. - Pipeline
可以通过不同的阶段形成工作流 - 支持docker
可以构建docker镜像,同时也支持触发在Kubernetes允许.
所有特性具体见:
https://about.gitlab.com/feat...
3.结构
gitlab ci/cd是由独立的runner程序完成,runner采用go语言编写,因此可以很好的进行跨平台,通常可以将runner部署到任何gitlab server之外的服务器,从而避免对gitlab server的影响.
runner项目见:
https://gitlab.com/gitlab-org...
4.gitlab ci/cd流程
gitlab通过在项目的根目录放置.gitlab-ci.yml文件来触发pipline,文件书写遵循yml语法,因此,概括来说gitlab ci/cd只需要两步,
- 写好.gitlab-ci.yml文件,并放置到项目根目录
- 配置好gitlab runner.
完成后,提交代码时会自动根据gitlab-ci.yml的触发条件进行执行相应的stage.
4.1 gitlab-ci.yml文件
stages: - test - build - deploy test: stage: test script: echo "Running tests" only: - tags build: stage: build script: echo "Building the app" only: - tags deploy_staging: stage: deploy script: - echo "Deploy to staging server" environment: name: staging url: https://staging.example.com only: - tags deploy_prod: stage: deploy script: - echo "Deploy to production server" environment: name: production url: https://example.com when: manual only: - tags
如上,是一个具有ci/cd功能的.gitlab-ci.yml文件的写法,
.gitlab-ci.yml的具体写法,以及关键字含义见:
https://docs.gitlab.com/ee/ci...
关于gitlab为什么使用.gitlab-ci.yml,见:
https://about.gitlab.com/2015...
4.2 runner配置
runner配置主要分为三步:
- 首先安装runner
安装脚本,具体见:https://docs.gitlab.com/runne... - 然后注册runner到gitlab
https://docs.gitlab.com/runne... - 更多配置见
https://docs.gitlab.com/runne...
5.总结
总的来说,gitlab-ci基本上可以完成完整的构建及发布,但也会存在一些缺点:
1.发布部分,需要将程序部署到哪个服务器固化到.gitlab-ci文件中,另外,如果runner上直接进行部署,那么runner所在的机器则需要直接或间接的访问所有的发布的机器,这里存在一定安全问题.
2.程序发布没有审计,对于小公司来说,这问题可能不突出,但是当研发团队扩大,以及公司业务增加之后,对于发布过程的权限管理以及审计则显得很重要.