基于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 模式兼容

相关推荐
IAR Systems5 天前
松下电工借助IAR CI/CD解决方案,实现品质与效率双重飞跃
ci/cd
Cherry的跨界思维5 天前
【AI测试全栈:质量】47、Vue+Prometheus+Grafana实战:打造全方位AI监控面板开发指南
vue.js·人工智能·ci/cd·grafana·prometheus·ai测试·ai全栈
Aliex_git5 天前
Dockerfile 优化实践笔记
笔记·学习·gitlab
成为你的宁宁5 天前
Jenkins 自动化部署前后端分离若依项目全攻略:涵盖环境配置、Maven/Node.js 工具安装、GitLab 项目协同,及前后端构建、服务器推送与代码更新验证全步骤
node.js·自动化·gitlab·jenkins·maven
古斯塔夫歼星炮5 天前
Dify + Jenkins 实现AI应用持续集成与自动化部署
ci/cd·jenkins·dify
codingWhat6 天前
手把手系列之——前端工程化
ci/cd·devops·前端工程化
测试渣6 天前
持续集成中的自动化测试框架优化实战指南
python·ci/cd·单元测试·自动化·pytest
sunshinebo6 天前
一次 GitLab 无法启动的排查:Docker 日志把 500G 磁盘打满
docker·eureka·gitlab
何以不说话6 天前
DevOps、Git 和 GitLab
git·gitlab·devops
我的xiaodoujiao7 天前
使用 Python 语言 从 0 到 1 搭建完整 Web UI自动化测试学习系列 51--CI/CD 4--推送本地代码到Git远程仓库
python·学习·测试工具·ci/cd·pytest