基于Gitlab的CICD流程
本片文章主要初步介绍什么是CICD流程,并且把整个流程进行拆分理解整个流程的跑通过程。
1.CICD概述
- 什么是CICD呢?
简单的说CICD就是持续集成自动构建自动测试自动部署.
从概念上就可以看出,CICD主要由四个部分组成代码集成、打包构建、自动测试、自动部署。我们只需要把代码推送到gitlab远程分支上gitlab自动帮我们做好后面的所有流程,不需要我们手动参与,一看就非常的方便。
- CICD是怎么实现的呢?
要实现CICD得实现以下几个部分:
- 远程仓库功能
- pipeline
- runner
基本的流程如下:
码农将代码推送到远程仓库上, 然后触发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分类,等等比较细粒度的规则。
基于Gitlab的CICD流程的更多相关文章
- 基于gitlab的项目管理流程
框架 背景 个人是不太愿意使用用户体验差的软件来做项目管理,行业内,要找到这么一款软件,又要符合自己的需求,着实不容易.要免费,易用性要好,要安全,要有数据统计.而程序员的世界,SVN 之后,可能没有 ...
- 基于GitLab CI搭建Golang自动构建环境
基于GitLab CI搭建Golang自动构建环境 Golang发布遇到的问题 对于golang的发布,之前一直没有一套规范的发布流程,来看看之前发布流程: 方案一 开发者本地环境需要将环境变量文件改 ...
- 部署基于Gitlab+Docker+Rancher+Harbor的前端项目这一篇就够了
部署基于Gitlab+Docker+Rancher+Harbor的前端项目这一篇就够了 安大虎 momenta 中台开发工程师 6 人赞同了该文章 就目前的形势看,一家公司的运维体系不承载在 Do ...
- 大揭秘| 我司项目组Gitlab Flow && DevOps流程
长话短说,本文全景呈现我司项目组gitlab flow && devops Git Flow定义了一个项目发布的分支模型,为管理具有预定发布周期的大型项目提供了一个健壮的框架. Dev ...
- 基于GitLab的Code Review教程
一.前言 1.本文主要内容 GitLab Code Review机制说明 Git Workflow 与 Git Code Review Workflow GitLab Code Review 配置说明 ...
- 为某金融企业的IT技术部人员提供基于TFS的软件研发流程介绍
受莫金融企业IT信息技术部的邀请,为该金融企业的某省分公司.地市分公司的IT技术人员提供了一场基于TFS的软件研发流程的技术培训,希望可以借此提高该企业的软件研发.运维水平,同时推动企业软件研发信息化 ...
- [转] 基于Gitlab CI搭建持续集成环境
[From] https://blog.csdn.net/wGL3k77y9fR1k61T1aS/article/details/78798577 前言 本文是在12月12号迅雷@赵兵在前端早读课第三 ...
- linux中安装gitlab和cicd(断网版)
1:先介绍一下怎么查找所需要的依赖包 #yum install rpmname--downloadonly --downloaddir=/rpmpath 例如:yum install gitlab-r ...
- 基于gitlab 15.1 pages 搭建内部博客一定行版本
背景 基于 gitlab 15.1版 pages 搭建内部博客,参考官方文档,遇到一个又一个坑.之前看到别人吐槽说 gitlab 官方文档很差,我算是理解了.下面一个个说. 开始 按照官方文档的说法, ...
随机推荐
- wget 爬取网站网页
相应的安装命名 yum -y install wget yum -y install setup yum -y install perl wget -r -p -np -k -E http:// ...
- 如何对shell脚本中斜杠进行转义?
1.在编写shell脚本时,经常会遇到对某个路径进行替换,而路径中包含斜杠(/),此时我们就需要对路径中涉及的斜杠进行转义,否则执行失败.具体示例如下: 需求描述: 将sjk目录下的test文件中的p ...
- LinkedList源码个人解读
LinkedList的基本结构是双向链接的直线结构. 链表的构造函数有两个,其中空构造函数什么都没做,就是一个空实现. /** * Constructs an empty list. */ publi ...
- ES 终于可以搜到”悟空哥“了!
Elasticsearch 搜索引擎内置了很多种分词器,但是对中文分词不友好,所以我们需要借助第三方中文分词工具包. 悟空哥专门研究了下 ik 中文分词工具包该怎么玩,希望对大家有所帮助. 本文主要内 ...
- python进阶(一)变量与数据类型、python之禅
一.变量: 1.变量组成:由数据.字母与下划线组合 2.不能以数字开头 3.python关键字与函数名不能作为变量名 4.当字符串变量中包含引号时,可使用单引号与双引号进行区分,或转义 print(& ...
- UnitOneSummary
目录 一.程序结构分析 第一次作业 第二次作业 第三次作业 二.Test & Bugs 三.设计模式 四.总结与反思 一.程序结构分析 第一次作业 思路: 1.输入预处理: 去除空格和\t 替 ...
- Unity2D项目-平台、解谜、战斗! 0.2 序言:团队在线协作方案、基线控制
各位看官老爷们,这里是RuaiRuai工作室,一个做单机游戏的兴趣作坊. 本文跟大家聊一下笔者团队中所使用的在线协作的诸多工具,以及使用这些工具的目的和所记录的内容,希望这些内容在大家团队工作中有所帮 ...
- 自学PHP笔记(五) PHP运算符
本文转发来自:自学PHP笔记(五) PHP运算符 首先我们需要了解运算符是什么,运算符是指的对变量.常量或者数据进行计算的一个符号,比如数学中学到的加减乘除等用来运算的代表符号,PHP中的运算符也是这 ...
- 1. Mybatis 参数传递
方法1:顺序传参法 public User selectUser(String name, int deptId); <select id="selectUser" resu ...
- Salesforce学习之路(四)利用Jenkins和Git实现Salesforce的CI/CD功能
上文提到,基于CRM的二次开发是必不可少的,但是在实际项目中CI/CD是不可忽略的一个重要部分,与传统的Java,Python项目不同,如果对Salesforce进行持续集成和持续部署呢? 结合找到的 ...