当前位置: 首页 > article >正文

基于GitLab 的持续集成环境

一.技术基础

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.kler.cn/news/332867.html

相关文章:

  • PHP__sleep和__wakeup有什么区别
  • 时间相关数据的统计分析(笔记更新中)
  • 我为什么决定关闭ChatGPT的记忆功能?
  • Java高效编程(16):在公共类中使用访问器方法,而不是公共字段
  • C++入门基础知识99——【关于C++ 成员运算符】
  • [C/C++开发]链接动态库在不同操作系统上的行为
  • 数据结构--二叉树的顺序实现(堆实现)
  • 移动技术开发:音乐播放器
  • 代码随想录 99. 岛屿数量
  • Studying-多线程学习Part2 - 互斥量死锁、lock_guard 与 unique_lock、call_once与其使用场景
  • Git介绍--github/gitee/gitlab使用
  • VMware tools菜单为灰色无法安装
  • 【MySQL 08】复合查询
  • 51单片机——矩阵键盘
  • 整理Maven坐标,Spring Boot集成工具依赖版本差异问题
  • JAVA基础语法 Day11
  • Pikachu-RCE-exec“ping“
  • 简单易懂的springboot整合Camunda 7工作流入门教程
  • 数据看板如何提升决策效率?
  • 订阅ROS2中相机的相关话题并保存RGB、深度和点云图