基于GitLab 的持续集成环境

embedded/2024/10/9 7:25:33/

一.技术基础

Gitlab: 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的Web服务

GitRunner:用于运行您的作业并将结果发送回GitLab。它与GitLab CI一起使用,GitLab CI是GitLab随附的开源持续集成服务,用于协调作业

CI/CD: 持续集成(CD)是指不断整合项目更改并进行相应的测试. 持续部署(CD):整个流程链,它自动监测源代码变更并通过构建、测试、打包和相关操作运行它们以生成可部署的版本,基本上没有任何人为干预

Docker:Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化

portainer:是一个轻量级的管理 UI ,可让你轻松管理不同的 Docker 环境(Docker 主机或 Swarm 群集)。

Harhor:以 Docker 公司开源的 Registry 为基础,提供了图形管理 UI 、基于角色的访问控制(Role Based AccessControl) 、AD/LDAP 集成、以及审计日志(Auditlogging) 等企业用户需求的功能

Kubernetes(K8S):是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制

二.CI/CD流程图

1. 总体流程图

2. CI/CD流程图

三.操作步骤

安装配置

git、gitlab、gitrunner、 docker、 portainer、nodejs 、maven 安装配置省略

注册git-runner

>> gitlab-runner register

url:gitlab所在的测试服务器地址

token:项目的token,用于关联runner和项目

name:runner的名字,用于区分runner

tags:用于匹配任务(jobs)和执行任务的设备(runners)

executor:执行环境

编写 .gitlab-ci.yaml

stages关键字 :定义了pipeline中各任务的执行顺序

only/except 关键字:控制任务的触发条件

tags 关键字:指定使用哪个Runner(哪个机器)去执行任务,注意与上文only关键字的tags进行区分

cache关键字:指定了需要缓存的文件夹或者文件,目的是为了加快执行速度

artifacts关键字:和cache类似,也可以缓存文件或文件夹,不同的是,这些文件可以在Gitlab的UI界面中下载。

allow_failure关键字:允许任务失败,任务失败将不会影响pipeline失败。

dependencies关键字:定义了任务的依赖关系,比如依赖其他的项目、库、工具、任务等。

variables关键字:定义局部变量(只在当前的任务中生效)

when关键字:可以手动修改stage原有的执行规则。一共有五个值

官网demo参考:GitLab CI/CD examples | GitLab

编写 Dockerfile

镜像的定制实际上就是定制每一层所添加的配置、文件。如果我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像,那么之前提及的无法重复的问题、镜像构建透明性的问题、体积的问题就都会解决。这个脚本就是Dockerfile。

指令包括:FROM、MAINTAINER、COPY、ADD、WORKDIR、VOLUME、EXPOSE、ENV、RUN、CMD、ENTRYPOINT、HEALTHCHECK、ONBUILD、USER、ARG、SHELL、STOPSIGNAL

Dockerfile一般分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令,’#’为Dockerfile中的注释。以下的dockerfile是uj-mini项目最简单的制作命令

四.Docker容器可视化管理

Portainer 是一个轻量级的管理 UI ,可让你轻松管理不同的 Docker 环境(Docker 主机或 Swarm 群集)。

Portainer 由一个可以在任何 Docker 引擎上运行的单一容器组成(可以部署为 Linux 容器或 Windows 本地容器,也支持其他平台)。Portainer 允许你管理所有的 Docker 资源(容器、镜像、卷、网络等等)。它与独立的 Docker 引擎和 Docker Swarm 模式兼容


http://www.ppmy.cn/embedded/124293.html

相关文章

陀螺仪LSM6DSV16X与AI集成(14)----上报匿名上位机

陀螺仪LSM6DSV16X与AI集成.14--上报匿名上位机 概述视频教学样品申请源码下载硬件准备上位机通讯陀螺仪工作方式欧拉角数据的转换数据帧填充校验和计算数据发送演示开启INT中断中断读取传感器数据主程序演示 概述 本文介绍了如何将 LSM6DSV16X 传感器的姿态数据通过匿名通信协…

(十八)、登陆 k8s 的 kubernetes-dashboard 更多可视化工具

文章目录 1、回顾 k8s 的安装2、确认 k8s 运行状态3、通过 token 登陆3.1、使用现有的用户登陆3.2、新加用户登陆 4、k8s 可视化工具 1、回顾 k8s 的安装 Mac 安装k8s 2、确认 k8s 运行状态 kubectl proxy kubectl cluster-info kubectl get pods -n kubernetes-dashboard3、…

Rspamd:开源垃圾邮件过滤系统

Rspamd 是一个开源垃圾邮件过滤和电子邮件处理框架,旨在根据各种规则评估消息,包括正则表达式、统计分析以及与 URL 黑名单等自定义服务的集成。 系统会分析每封邮件并做出判定,MTA可据此采取进一步行动,例如拒绝邮件或添加垃圾邮…

Codeforces Round 977 (Div. 2, based on COMPFEST 16 - Final Round) (A-E3)

写在前面 阳间比赛时间总出不太能做的阴间题 印尼的场,final round质量也还ok,算是学了两个经典trick吧 题目 A. Meaning Mean 排个降序后从小的开始合就好了,直觉上是哈夫曼树的合并方式, 但是只固定了第一个,后…

使用Postman搞定各种接口token实战

现在许多项目都使用jwt来实现用户登录和数据权限,校验过用户的用户名和密码后,会向用户响应一段经过加密的token,在这段token中可能储存了数据权限等,在后期的访问中,需要携带这段token,后台解析这段token才…

Linux的基本指令(1)

前提: a:博主是在云服务器上进行操作的 b:windows上普通文件在Linux中也叫作普通文件,但是windows上的文件夹,在Linux中叫作目录 c:文件 文件内容 文件属性(创建时间,修改时间,…

java判断ip是否为指定网段

前言 这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。 作者:神的孩子都在歌唱 一、IP地址介绍 1.1 IP(IPv4) IP是Internet Protocol的缩写,即网际协议,它是计算机…

解决CentOS 7 yum install 出现 No such file or directory 错误的方案

CentOS 7 yum install之后 出现No such file or directory错误的解决方案: [rootcentos7 ~]# yum install -y git File "/usr/bin/yum", line 30 except KeyboardInterrupt, e: ^ SyntaxError: invalid syntax [rootcentos7 ~]# yum -bash: /usr/bin/yum:…