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

相关推荐
秋说4 小时前
开源代码管理平台Gitlab如何本地化部署并实现公网环境远程访问私有仓库
gitlab·源代码管理
极小狐7 小时前
驭码上新,AI Code Review、基于代码库的知识问答,让研发起飞
gitlab·devsecops·devops·极狐gitlab·安全合规
蚊子不吸吸17 小时前
DevOps开发运维简述
linux·运维·ci/cd·oracle·kubernetes·gitlab·devops
老攀呀2 天前
CI/CD 的概念
ci/cd
aklry2 天前
CI_CD
ci/cd
花开莫与流年错_4 天前
GitLab代码仓管理安装配置使用
运维·服务器·git·gitlab·配置·代码仓
flying robot5 天前
GitHub Actions的 CI/CD
ci/cd·github
程序员雷叔5 天前
自动化测试类型与持续集成频率的关系
功能测试·测试工具·jmeter·ci/cd·单元测试·测试用例·postman
檀越剑指大厂5 天前
【MySQL系列】理解 `utf8mb4` 和 `utf8mb4_unicode_ci`
数据库·mysql·ci/cd
极小狐6 天前
如何打开/关闭 GitLab 的版本检查功能?
gitlab·devsecops·devops·极狐gitlab·安全合规