gitlab-ci

1,308 阅读2分钟

CI/CD基本原理

  • 检测到 git 有新的代码提交(定时检测或主动触发),生成任务
  • agent(真正干活的进程,可以分布在多台机器)领取任务,拉取代码,运行一段脚本
  • 展示结果:成功与否、测试覆盖率等

Gitlab CI/CD运行原理

开发者推送、提交代码到Gitlab,Gitlab通过项目的 .gitlab-ci.yml 文件配置,找到指定的项目gitlab runner,runner运行相关的命令,进行编译、 集成、测试、交付、部署,一切顺利地话会分发到各个服务器(测试服务器、预发布服务器、正式服务器等),此时一个迭代开发上线流程走完。流程图如下。

GitLab Runner

  • GitLab Runner是一个开源项目,用于运行项目持续集成、持续部署作业并将结果发送回GitLab,与GitLab CI/CD一起使用。GitLab Runner是用Go编写的,可以作为单个二进制文件运行,不需要语言特定的要求,运行在Linux,macOS和Windows操作系统上。只要您可以在其上编译Go二进制文件,其他操作系统可能会起作用,也可以运行在Docker上。

执行流程

  • Pipeline

    一次 Pipeline 其实相当于一次构建任务,里面可以包含多个流程,如安装依赖、运行测试、编译、部署测试服务器、部署生产服务器等流程。 任何提交或者 Merge Request 的合并都可以触发 Pipeline

      一次pipeline相当于一次 ( 构建任务 ),包含多个 ( 流程 )
      
      任何 ( push提交 ) 或者 ( merge request的合并 ) 都可以 ( 触发pipeline )
    
  • Stages - 构建阶段

    Stages 表示构建阶段,就是上面的流程。一次 Pipeline 中可以定义多个 Stages

      顺序:所有 Stages 会按照顺序运行,即当一个 Stage 完成后,下一个 Stage 才会开始
      
      成功:只有当所有 Stages 完成后,该构建任务 (Pipeline) 才会成功
      
      失败:如果任何一个 Stage 失败,那么后面的 Stages 不会执行,该构建任务 (Pipeline) 失败
    

    总结:

      一个pipeline包含多个stage
      
      顺序执行,上一个stage执行完,才能执行下一个stage
      
      所有stage成功,pipeline才成功;只要有一个stage失败,整个pipeline就会失败
    
  • Jobs - 构建的工作

    Jobs 表示构建工作,表示某个 Stage 里面执行的工作。 我们可以在 Stages 里面定义多个 Jobs

      顺序:相同 Stage 中的 Jobs 会 ( 并行 ) 执行
      
      成功:相同 Stage 中的 Jobs 都执行成功时,该 Stage 才会成功
      
      失败:如果任何一个 Job 失败,那么该 Stage 失败,即该构建任务 (Pipeline)
      失败
    

    总结:

      一个 ( Pipeline ) 包含多个 ( Stage ),一个 ( Stage ) 包含多个 ( Job )
      
      ( Stage ) 中的 ( Job ) 是 ( 并行 ) 执行的 --------------------- job并行
      ( Job ) 都成功,则 ( Stage ) 成功
      
      一个 ( Job失 ) 败,则 ( Stage ) 失败,则 ( Pipeline ) 失败