gitlab服务CI/CD配置

news/2024/5/2 16:57:03/文章来源:https://blog.csdn.net/xhtchina/article/details/127009187

使用Gitlab作为工作仓库进行代码发布及版本控制,Gitlab内置了CI/CD的工具,这些工具可以用于代码提交的同时完成镜像构建、自动化测试、自动化部署等连续的工作:

  • CI: Continuous Integration(持续集成)
  • CD: Continuous Delivery(连续交付)
  • CD: Continuous Deployment(持续部署)
    这里暂时只讨论CI持续集成部分的工作,我们常用CI来做一些自动化工作,这种自动化工作会运行在一台集中的机器上,比如程序镜像的打包,单元测试,部署等,它可以节省项目开发迭代过程中维护正确的代码所耗费的时间。

例比如CI中自动测试,在多人协同开发的过程中,可能会有频繁的不同分支的代码推送更新,使用CI管道,可在代码发布的同时触发CI中定义的单元测试操作,以便于在开发早期发现错误,从而确保所有新代码的提交都不影响项目功能。

依赖服务:

gitlab

https://www.zongscan.com/demo333/95354.html

gitlab-runner

https://www.zongscan.com/demo333/95355.html

后面有时间我也会把我自己的beego项目迁移进docker swarm集群里面来,整成自动化持续集成部署方式。

1. Gitlab-CI/CD工作流

参考下图先了解CI/CD的具体工作流和概念,黄色部分为主要涉及的概念,将在后文重点说明:

  • 你当前的代码库托管在Gitlab上, 且已经为代码仓库配置了gitlab-runner服务, 它是用来实际执行CI任务的服务器;
  • 提交代码,且根目录中包含一个名为.gitlab-ci.yml文件,该文件是用来指定构建、测试和部署流程、以及CI触发条件的脚本,其概念类似于docker-compose.yml文件;
  • Gitlab检测到.gitlab-ci.yml文件,若当前提交符合文件中指定的触发条件,则会使用配置的gitlab-runner服务运行该脚本进行测试等工作;
  • .gitlab-ci.yml中定义的某个自动化脚本运行失败,将判定为此次CI不通过,则需要提交者修复问题代码后重复提交,直至自动化CI通过。
  • 没有问题的提交才能被项目负责人merge到主分支,进行后续的部署工作(此文暂不涉及CD自动化部署)

2. 配置文件介绍

.gitlab-ci.yml文件主要的作用是用来指定构建、测试和部署流程、以及CI触发条件的脚本

在文件中的定义要运行的脚本,要包含的其他配置文件和模板,依赖项和缓存,要按顺序运行的命令和要并行运行的命令,将应用程序部署到的位置。

无论您是想自动运行脚本还是手动触发其中的任何一个。

脚本被分组到作业中,作业作为更大管道的一部分运行。

您可以将多个独立作业分组到按定义顺序运行的阶段。

CI/CD 配置至少需要一项未隐藏的作业。

您应该按照适合您的应用程序并符合您希望执行的测试的顺序组织您的工作。

为了可视化该过程,假设您添加到作业的脚本与您在计算机上运行的 CLI 命令相同。

当您将 .gitlab-ci.yml 文件添加到存储库时,

GitLab 会检测到它,并且名为 GitLab Runner 的应用程序会运行作业中定义的脚本。

3. 参数列表

是否必须描述
script必须定义由Runner执行的shell脚本或命令
extends非必须定义此作业将继承的配置条目
image非必须需要使用的docker镜像,请查阅该文档
services非必须定义所需的docker服务,请查阅该文档
stage非必须定义一个工作场景阶段,默认是test
type非必须stage的别名,不赞成使用
variables非必须在job级别上定义的变量
only非必须定义job所引用的git分支
except非必须定义job所不适用的git分支
tags非必须定义job所适用的runner,tags为runner标签
allow_failure非必须when 用于实现在发生故障或发生故障时运行的作业。

when 可以设置为以下值之一:
on_success-仅当先前阶段中的所有作业都成功(或因为已标记,被视为成功allow_failure)时才执行作业 。这是默认值。
on_failure -仅在前一阶段中的至少一项作业失败时才执行作业。
always -执行作业,而不管先前阶段的作业状态如何。
manual-手动执行作业(在GitLab 8.10中已添加).
delayed-一定时间后执行作业(在GitLab 11.14中已添加)。
when非必须定义了job什么时候执行,可以是on_success、on_failure、always和manual
dependencies非必须定义了该job依赖哪一个job,如果设置该项,可以通过artifacts设置
artifacts非必须工件,在依赖项之间传递的东西,类似cache,但原理与cache不同
cache非必须定义需要被缓存的文件、文件夹列表
before_script非必须覆盖在作业之前执行的脚本或命令
after_script非必须覆盖在作业之后执行的脚本或命令
environment非必须定义让job完成部署的环境名称
coverage非必须定义job设置代码覆盖率
stages非必须定义pipeline的全部阶段(stage),阶段内所有任务并行执行,全部执行成功开始下一阶段任务,任何阶段内任意job执行失败都会导致pipeline失败,所有stage,job执行成功后pipeline会显示pass。如果未定义stages,则默认有build、test、deploy三个阶段,如果未定义stage,则默认test阶段
rules非必须用于评估和确定作业的选定属性,以及是否创建该作业。不能与only/except 一起使用
include非必须允许此作业包括外部YAML文件。也可用:include:local,include:file,include:template,和include:remote。
interruptible非必须定义在通过新的运行使其冗余时是否可以取消作业。
resource_group非必须限制作业并发。
timeout非必须定义自定义作业级别的超时,该超时优先于项目范围的设置。

4. 编写说明

.gitlab-ci.yml文件中指定了CI的触发条件、工作内容、工作流程,编写和理解此文件是CI实战中最重要的一步,该文件指定的任务内容总体构成了1个pipeline、1个pipeline包含不同的stage执行阶段、每个stage包含不同的具体job脚本任务。

4.1. 配置文件说明

4.2. Pipeline说明

一个.gitlab-ci.yml文件触发后会形成一个pipeline任务流由gitlab-runner来运行处理,pipelinestagejob概念如下,需要按照项目实际情况定义不同stagejob, 自己绘制了一个流程示意图帮助理解:

5. 示例

stages:- build- test
build-code-job:stage: buildscript:- echo "Check the ruby version, then build some Ruby project files:"- ruby -v- rake
test-code-job1:stage: testscript:- echo "If the files are built successfully, test some files with one command:"- rake test1
test-code-job2:stage: testscript:- echo "If the files are built successfully, test other files with a different command:"- rake test2

参考文献

gitlab服务之gitlab-ci.yml配置文件详解-侯体宗的博客

GitLab之gitlab-ci.yml配置文件最全参数解读 - 知乎 

Gitlab-CI使用及.gitlab-ci.yml配置入门 - 测试开发喵 - 博客园 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_12926.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言之模块化、预处理(条件编译)

模块化、预处理1. C 模块化1.1. 头文件 .h1.1.1. 用户头文件1.1.2. extern 关键字1.2. c文件2. 预处理指令(以 # 开头)2.1. 宏定义2.2. 条件编译2.3. #ifdef、#ifndef、#endif2.4. defined() 运算符1. C 模块化 模块化编程的核心思想: 将系统的各个功能进行封装,变成…

CDH6.3.2安装python3

背景:需要使用pyspark或者python去自动读取远程文件,但是CDH集群里面自带着python2.7.5,python3.0是以后的趋势,所以决定自己安装python3。以下的安装步骤是参照网上的步骤,实操是自己亲自操作的。 1.1 系统版本信息 …

Vim编辑器的使用

一、什么是Vim编辑器 Vim是从vi发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。 简单的来说,vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。vim则可以说是程序开发者的一项很好用的工具…

.NET MAUI学习笔记——1.初识.NET MAUI_初级篇

文章目录一、 引言二、什么是.NET MAUI?1. .NET MAUI为谁服务?2. .NET MAUI是怎样工作的?3. .NET MAUI提供了什么?3.1. 设备特性的跨平台API3.2. 单一项目3.3. 热重载三、结尾一、 引言 打算开发一款简单的Android的App&#xff…

springboot-鑫源停车场管理系统 毕业设计 -附源码 290915

springboot鑫源停车场管理系统 摘 要 21世纪时信息化的时代,几乎任何一个行业都离不开计算机,将计算机运用于停车场管理也是十分常见的。过去使用手工的管理方式对停车场进行管理,造成了管理繁琐、难以维护等问题,如今使用计算机对…

03-JVM-对象内存、执行引擎

一、创建对象的方式 new、Xxx的静态方法、XXXBuilder/XXXFactory的静态方法Class的newInstance,只能调用空参构造器,权限必须是publicConstruct的newInstance,可以调用空参、带参的构造器,权限无要求Clone(),不调用构…

瑞吉外卖(16) - 新增菜品功能开发

文章目录需求分析数据模型dish表dis flaow表代码开发搭建框架新增dishFlavor实体类新增Mapper接口DishFlavorMapper新增业务接口DishFlavorService新增业务层实现类DishFlavorServiceImpl新增控制层DishController梳理交互过程编辑CategoryControoler下拉框功能测试导入DTO编写…

香橙派Orange Pi i96 初次使用遇到的坑和解决方法+附加c# iot .net 代码实例

香橙派Orange Pi i96这个主板是香橙派最便宜的一样主板,功能也不少,我觉得可以满足我的需求,如果可以用好的话,可以做很多东西,批量买也便宜,做出来的产品,定价也不用很高,符合效益 …

4计算机网络与信息安全——软件设计师

一、七层模型 内容: 习题: 局域网不能通过三层通信 二、网络技术标准与协议 一般分为4/5层(没有明确说明,了解主要几层即可) TCP协议: DHCP协议 DNS协议 递归直接回答,迭代刨根到底 三、网络类型与拓扑类型 计算机网络按不同…

一起Talk Android吧(第三百八十五回:数据绑定-DataBinding总结)

文章目录数据绑定使用方法7.单向数据绑8.双向数据绑定9.绑定事件演示结果使用总结各位看官们,大家好,上一回中咱们说的是数据绑定-DataBinding的例子,这一回中咱们继承介绍该例子。闲话休提,言归正转,让我们一起Talk Android吧&am…

线程池概念2

线程池类图 ExecutorService:是一个线程池最基本的接口,提供了提交任务,关闭线程池这些基本的方法。 ScheduledExecutorService:扩展接口,在基础线程池的功能上又新增了任务调度的功能,可以用来定时执行任务。 线程池状态 线程…

Devtools Console 面板输入了 1+1 ,浏览器内部发生了什么?

背景 新来的实习生妹子问了一个问题:「你看 Chrome 的 Devtools 调试工具,代码写一半还没运行下面就会提示输出结果,这个咋做到的?」 咋做的?对于 Devtools 的内部执行逻辑,咱不了解,但咱也不能…

WhatsApp和WhatsApp Business之间的区别

关键词:WhatsApp、WhatsApp Business WhatsApp 无疑是一款超级方便、免费且毫不费力的即时通讯应用程序。这就是庞大的用户群的原因。对于企业来说,它也是一个超级方便、免费且不费吹灰之力的即时通讯应用程序。特别是自从 WhatsApp 推出了 WhatsApp Bus…

《MySQL DBA封神打怪之路》专栏学习大纲

《MySQL DBA封神打怪之路》专栏学习大纲 文章目录《MySQL DBA封神打怪之路》专栏学习大纲1、作者介绍2、专栏介绍3、专栏部分文章截图3.1.所有文章一栏3.2.文章内容截图4、专栏大纲学习指南4.1对数据库的初步认识4.2.四种类型的SQL语句基本使用4.3.超丰富的多表联查案例4.4.事物…

消除笔去水印怎么做?教你怎么用这些消除笔软件

在网上看到好看的照片想要用作壁纸,但是上面有水印看起来不好看怎么办?我们可以用有消除笔的软件将图片水印去除,那么消除笔去水印怎么做呢?今天的这个教程分享给你们。方法一:借助“Styler”进行去水印操作 这是一款拥…

Echarts绘制geo地图属性设置大全(一)

1、Echarts版本 "echarts": "^5.3.3", 2、基础地图绘制&#xff08;以中国地图为例&#xff09; 绘制地图需要有用于绘制地理坐标系的数据&#xff0c;如示例使用的china.js <template><div ref"mapBar" class"map-class"&…

面试之HashMap

1.初始大小&#xff1a;HashMap默认初始大小是16&#xff0c;这个默认值是可以设置的&#xff0c;如果事先知道大概的数据量有多大&#xff0c;可以通过修改默认初始大小&#xff0c;减少动态扩容的次数&#xff0c;这样会大大提高HashMap的性能 2.动态扩容&#xff1a;最大 装…

兼容性测试包含哪几类呢?

兼容性测试包含哪几类呢? (1)浏览器方面 关于浏览器的兼容性测试&#xff0c;主要是检查页面的交互、元素和样式展示是否正常。我们都知道&#xff0c;目前市面上主流的浏览器非常多&#xff0c;像&#xff1a;360、搜狗、火狐等等。 在进行测试的时候&#xff0c;由于兼容性问…

2022出海东南亚:越南电商市场现状及网红营销特点

近几年&#xff0c;东南亚整体发展态势非常好&#xff0c;加上国内市场饱和&#xff0c;不少国内企业在计划出海或已经出海东南亚。作为东南亚第二大电商市场&#xff0c;越南自然也成了香饽饽&#xff0c;越南蓬勃发展的数字经济和电商领域&#xff0c;让其成为了卖家挖掘新商…

Vue 力导图d3js 实现

PowerBI 自定义组件推荐用D3JS 实现&#xff0c;实现一个PowerBI 的力导图组件&#xff0c;为调试方便&#xff0c;先用Vue 实现一个&#xff0c;然后再移植到PowerBI 中&#xff0c;话不多说&#xff0c;上效果&#xff1a; 体验入口 上代码是最好的老师&#xff1a; <t…