掌桥专利:专业的专利平台
掌桥专利
首页

一种基于Gitlab CI落地DevOps的方法和系统

文献发布时间:2023-06-19 18:58:26


一种基于Gitlab CI落地DevOps的方法和系统

技术领域

本发明涉及运维管理技术领域,特别涉及一种基于Gitlab CI落地DevOps的方法和系统。

背景技术

GitLab CI主要是持续编译、构建、部署/发布、测试等的持续集成工具,GitLab CI解决了手动打包部署的问题,实现了自动化打包部署的功能;但是现有技术中基于GitLabCI实现CI/CD流程处理的是提前预置好脚本文件,并且触发后,无法动态的决定CI/CD流水线的中止,以及人为在执行过程中来调整流程的走向,以确定不同流程分支。

发明内容

本发明的目的在于提供一种基于Gitlab CI落地DevOps的方法和系统,主要解决了现有技术中所提出的技术问题。

为实现上述目的,本发明提供如下技术方案:

一方面,提供了一种基于Gitlab CI落地DevOps的方法,所述方法包括:

上传项目代码到GitLab代码仓库;

发起基于Activiti工作流引擎创建的DevOps流程;

审批Activiti工作流引擎指定节点,触发GitLab Pipeline triggers,开始执行GitLab CI的Pipeline流水线,并同时与Activiti工作流节点绑定;

GitLab CI收到触发动作后,通知GitLab Runner,执行.gitlab-ci.yml文件中的脚本,拉取GitLab代码仓库中的项目代码到本地;

对所述项目代码标识版本基线和静态扫描,然后自动构建生成镜像包,并推送到Docker镜像仓库;或者生成纯代码包,推送到代码版本库;

然后进行项目部署。

进一步地,所述标识版本基线包括:

将源代码归档,生成指定的Tag标签,用于标记当前项目代码版本,并通知节点任务执行状况至Activiti工作流节点,标记Activiti工作流流程,以追踪整个DevOps流程执行阶段,同时生成任务执行报告。

进一步地,所述静态扫描包括:

由SonarQube工具对标识版本基线后的所述项目代码进行扫描,检查代码漏洞、安全规范,并通知阶段任务执行状况至Activiti工作流节点,生成任务执行报告。

进一步地,所述部署前还包括单元测试,所述单元测试包括:自动扫描所述项目代码中定义的单元测试方法,生成单元测试报告,同时通知节点任务执行状态至Activiti工作流节点,生成任务执行报告。

进一步地,所述部署包括:

若是k8s容器环境,k8s容器编排引擎拉取Docker镜像仓库的镜像包完成预设副本数量的容器创建,并由k8s容器编排引擎创建的容器编排进每一个pod对象中;

若是物理机或虚拟机环境,则备份好原有的纯代码包后,由脚本拉取纯代码包去替换原有的服务进程。

进一步地,若部署失败,则添加钩子,并通知后台Activiti工作流引擎,

处理对应流程状态,并通知相关人部署失败;

若部署成功,则进行冒烟测试、质量巡检、安全扫描、测试审核、质量发布审核和项目发布审核,生成流程报告和流出日志,并进行持续监控。

另一方面,提供了一种基于Gitlab CI落地DevOps的系统,所述系统包括:

代码上传模块:用于上传项目代码到GitLab代码仓库;

DevOps流程发起模块:用于发起基于Activiti工作流引擎创建的DevOps流程;

触发模块:用于审批Activiti工作流引擎指定节点后,触发GitLab Pipelinetriggers,

执行模块:用于GitLab CI收到触发动作后,通知GitLab Runner,执行.gitlab-ci.yml文件中的脚本,拉取GitLab代码仓库中的项目代码到本地;

版本基线标识模块:用于对所述项目代码标识版本基线;

静态扫描模块:用于对标识了版本基线的所述项目代码进行扫描;

自动构建模块:用于对扫描后的所述项目代码自动构建生成镜像包,并推送到Docker镜像仓库,或者生成纯代码包,推送到代码版本库;

部署模块:用于项目部署。

进一步地,所述系统还包括:

单元测试模块:用于在部署前自动扫描所述项目代码中定义的单元测试方法,生成单元测试报告,同时通知节点任务执行状态至Activiti工作流节点,生成任务执行报告。

进一步地,所述部署模块还包括:环境识别模块:用于识别k8s容器环境和物理机或虚拟机环境。

本发明的有益效果是:本发明中基于Gitlab CI由原有指定配置的CI/CD流水线升级为由Activiti工作流引擎实现的动态可控且带有自定义审批的流水线;并且利用角色控制DevOps生命周期特定节点的审批工作,以控制DevOps生命周期的执行过程;同时支持了易操作的网页界面,从而实现DevOps生命周期的流程规范化、追踪可视化、流程分支的可控化。

附图说明

为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1本发明实施例一提供的一种基于Gitlab CI落地DevOps的方法的交互示意图;

图2本发明实施例一提供的一种基于Gitlab CI落地DevOps的方法的流程图;

图3本发明实施例一提供的一种基于Gitlab CI落地DevOps的系统的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明所涉及的技术术语解释:

实施例一

一种基于Gitlab CI落地DevOps的方法,主要的就是整合Activiti工作流引擎,使得整个DevOps流程中可控化,并加入角色限制各个流程节点的安全执行,同时可自定义DevOps的流程步骤,以实现在较大的自动化部署/发布的基础上保证开发、技术运营、质量保障部门之间的有效协作,参见图1-2,具体包括如下步骤:

步骤(1):上传项目代码到GitLab代码仓库。

步骤(2):发起基于Activiti工作流引擎创建自定义的DevOps流程,通过Activiti工作流引擎指定节点的审批动作触发GitLab Pipeline triggers通知,开始执行GitLabCI的Pipeline流水线定义的阶段任务,并同时与Activiti工作流节点绑定。

步骤(3):GitLab CI收到触发事件动作后,通知已注册绑定的GitLab Runner,开始执行.gitlab-ci.yml文件中的脚本,拉取GitLab代码仓库中的项目代码到本地。

步骤(4):标识版本基线,本次功能部署/发布的源代码归档,即生成指定的Tag标签,用于标记当前版本,通知节点任务执行状况至Activiti工作流节点,标记Activiti工作流流程,以追踪整个DevOps流程执行阶段,同时生成相应的任务执行报告。

步骤(5):静态扫描,由SonarQube工具对项目代码进行扫描,检查代码漏洞、安全规范等,通知阶段任务执行状况至Activiti工作流节点,生成任务执行报告。

步骤(6):自动构建,若是物理机或者虚拟机的环境,由脚本完成项目代码的编译构建生成纯代码包,并将构建好的纯代码包上传到代码版本库中,若有k8s容器环境,则由Docker根据预置的打包文件完成镜像构建生成镜像包,最终将镜像包推送到Docker镜像库。

步骤(7):单元测试,自动扫描项目代码中定义的单元测试方法,生成单元测试报告,同时通知阶段任务执行状态至Activiti工作流节点,生成任务执行报告。

步骤(8):部署,若是k8s容器环境,k8s容器编排引擎拉取Docker镜像仓库的镜像包完成预设副本数量的容器创建,并由k8s容器编排引擎创建的容器编排进每一个pod对象中,具体的,由脚本根据动态参数替换预置的k8s容器编排引擎的Deployment控制器配置文件,并生成完整有效的Deployment控制器配置文件后,执行k8s容器编排引擎控制器创建更新命令,更新Pod和ReplicaSet;若是物理机或虚拟机环境,则备份好原有的纯代码包后,由脚本拉取纯代码包去替换原有的服务进程,最终检查服务健康状态,确认是否回退;若是部署失败,并通知后台Activiti工作流引擎,处理对应流程状态,并通知相关人部署失败;否则,继续。

GitLab CI自定义的流水线阶段任务执行完成后,整个DevOps流程回归到主线的Activiti定义的工作流中,继续执行接下来的节点任务。

步骤(9):冒烟测试,由预置的自动化测试脚本,初步验证相应测试用例,并生成冒烟测试报告。

步骤(10):质量巡检,自动完成服务的质量巡检并生成质量巡检报告。

步骤(11):安全扫描:自定义脚本,服务,对项目数据安全等进行初步判断等。

步骤(12):流程报告,由Activiti工作流引擎执行相应任务节点,生成整个流程的流程执行报告。

步骤(13):测试审核,测试人员根据冒烟测试与质量巡检报告,对整个系统进行测试回归,并由测试负责人进行流程审批操作,若是测试没有问题,则审核通过,继续流程;若是测试不通过,则审批为不通过,并填写相应备注说明,由审批工作流节点自动发送通知相关关系人。

步骤(14):质量发布审核,由QA工程人员最终检查本次项目发布情况,确认工程上的发布,若是审核通过,则继续流程,否则由系统自动通知相关关系人。

步骤(15):项目发布审核,由项目负责人确认,最终决定是否发布。

步骤(16):流程日志,生成所有分支流程的流程执行日志,以便追踪。

步骤(17):最终以邮件等形式通知开发、测试、以及相关负责人等;

同时自动对系统进行集中式的监控,以便系统在运行过程中出现问题后,直接通知相关关系人。

实施例二

一种基于Gitlab CI落地DevOps的系统,参见图3,具体包括:代码上传模块:用于上传项目代码到GitLab代码仓库;DevOps流程发起模块:用于发起基于Activiti工作流引擎创建的DevOps流程;触发模块:用于审批Activiti工作流引擎指定节点后,触发GitLabPipeline triggers,执行模块:用于GitLab CI收到触发动作后,通知的GitLab Runner,执行.gitlab-ci.yml文件中的脚本,拉取GitLab代码仓库中的项目代码到本地;版本基线标识模块:用于对项目代码标识版本基线;静态扫描模块:用于对标识了版本基线的项目代码进行扫描;自动构建模块:用于对扫描后的项目代码自动构建生成镜像包,并推送到Docker镜像仓库,或者生成纯代码包,推送到代码版本库;部署模块:用于项目部署;单元测试模块:用于在部署前自动扫描所述项目代码中定义的单元测试方法,生成单元测试报告,同时通知节点任务执行状态至Activiti工作流节点,生成任务执行报告;部署模块还包括:环境识别模块:用于识别k8s容器环境和物理机或虚拟机环境。

值得说明的是,本发明中通过在Gitlab CI的基础上整合Activiti工作流引擎,使DevOps生命周期可控制化,提供在关键节点配置角色审批,同时加入技术运营与质量保障部门的协作,以提升DevOps生命周期的安全、规范化,同时也能实现流程追踪的可视化。

最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。

技术分类

06120115752392