Gitlab CI/CD

1.概述

Gitlab是常用的开源git代码管理工具之一,随着发展也推出了ci/cd解决方案.
顾名思义具体来说ci/cd主要完成以下两个工作.

  • ci(持续构建)
    代码提交后触发自动化的单元测试,代码预编译,构建镜像,上传镜像等.
  • cd(持续发布)
    持续发布则指将构建好的程序发布到各种环境,如预发布环境,正式环境.

Gitlab CI/CD

2.特性

gitlab ci/cd具有以下特性

  • 跨平台支持
    只要支持go语言的平台均可以在上面进行ci,目前基本涵盖了大部分的操作系统.
  • 多语言支持
    构建时是通过脚本触发,因此基本上支持所有的语言.
  • Pipeline
    可以通过不同的阶段形成工作流
  • 支持docker
    可以构建docker镜像,同时也支持触发在Kubernetes允许.

所有特性具体见:
https://about.gitlab.com/feat...

3.结构

Gitlab CI/CD

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配置主要分为三步:

5.总结

总的来说,gitlab-ci基本上可以完成完整的构建及发布,但也会存在一些缺点:
1.发布部分,需要将程序部署到哪个服务器固化到.gitlab-ci文件中,另外,如果runner上直接进行部署,那么runner所在的机器则需要直接或间接的访问所有的发布的机器,这里存在一定安全问题.
2.程序发布没有审计,对于小公司来说,这问题可能不突出,但是当研发团队扩大,以及公司业务增加之后,对于发布过程的权限管理以及审计则显得很重要.

相关推荐