zoukankan      html  css  js  c++  java
  • 基于Gitlab的CICD流程

    本片文章主要初步介绍什么是CICD流程,并且把整个流程进行拆分理解整个流程的跑通过程。


    1.CICD概述

    • 什么是CICD呢?

    简单的说CICD就是持续集成自动构建自动测试自动部署.


    从概念上就可以看出,CICD主要由四个部分组成代码集成、打包构建、自动测试、自动部署。我们只需要把代码推送到gitlab远程分支上gitlab自动帮我们做好后面的所有流程,不需要我们手动参与,一看就非常的方便。


    • CICD是怎么实现的呢?

    要实现CICD得实现以下几个部分:

    • 远程仓库功能
    • pipeline
    • runner

    基本的流程如下:

    image

    码农将代码推送到远程仓库上, 然后触发pipline流水线通知注册的runner执行pipeline上定义的任务。


    2.CI部分

    CI就是代码集成也就是阶段性地向代码存库中集成最新的代码,其中gitlab的作用和github等代码托管平台的作用是一模一样的。


    3.pipeline

    gitlab中pipline翻译过来就是管道,我们知道管道很小水流是顺序流出的,也就是我们定义构建任务,测试任务,部署任务然后任务按照顺序执行,那么如果定义任务呢?

    在项目根目录下新建一个 .gitlab-ci.yml 文件,在文件中我们可以定义任务执行阶段,及每个阶段执行的任务等信息,如下代码

    before_script:
      - bundle install
    
    after_script:
      - rm secrets
    
    stages:
      - build
      - test
      - deploy
    
    job1:
      stage: build
      script:
        - execute-script-for-job1
      only:
        - master
      tags:
        - docker
    job2:
    stage: test
    script:
      - echo zhe shi ce shi jie daun
      
    job3:
    stage: deploy
    script:
      - echo 这是自动部署阶段
    

    那上面的例子举例,我们就在管道中定义了3个阶段,分别为build、test、deploy三个阶段,然后我们定义job1任务为build阶段执行的,script为执行的命令,job2为test阶段执行的任务,job3为deply阶段执行的任务。

    当然真实生产时.gitlab-ci.yml文件肯定比这复杂很多,具体复杂的属性可以根据官方文档查看。


    我们定义好了pieline,那么任务的执行者是谁呢?这就是接下来的runner角色了。


    4.runner

    runner一看名字我们就知道他是我们每个阶段任务的真实执行者,那它是怎么工作的呢?

    • 首先我们需要在需要部署代码的机器上安装runner(不可以和gitlab服务一个机器)
    • 然后启动runner
    • 启动runner程序,并注册到gitlab服务器上(建立runner和gitlab服务器的连接)
    • 选择一个excutor执行方式(比如是shell的本地执行,还是docker容器内执行,还是k8s等方式,初练选shell会好一点就是本地执行)
    • 完成、等待触发

    5.总结

    我们只需要把整个CICD流程结构化区分一下思路就会瞬间清晰很多了,比如分成提交代码的部分(码农)、远程仓库(gitlab)、定义执行流程(pipeline)、任务执行者(runner)。

    然后我们在想一下分成这几个部分以后,整个流程是怎么串起来来的呢?

    • 码农提交代码到远程仓库(我们本地)
    • 触发pipeline任务通知runner去执行(gitlab服务器)
    • runner根据任务阶段顺序执行对应的任务(目标代码部署服务器)

    基于上述我们就很快把整个CICD流程给弄清晰了,可以把一些简单的项目执行起来了,

    但道路且长,上述只是简单的理解CICD的流程概念,如果需上手真实复杂的项目,还需要阅读官方文档如涉及容器,k8s,不同分支不同runnner,runner分类,excutor分类,等等比较细粒度的规则。

    公众号 种树飞编程 欢迎关注
  • 相关阅读:
    2016第5周四
    2016第5周三
    2016第5周二
    HTTP2.0那些事
    2016第4周日
    【C语言的日常实践(十二)】命令行参数
    Oracle改变字段类型
    Codeforces Round #269 (Div. 2)
    linux shell 命令
    Codeforces Round #256 (Div. 2) C. Painting Fence 或搜索DP
  • 原文地址:https://www.cnblogs.com/lifei01/p/14756162.html
Copyright © 2011-2022 走看看