一种基于容器的持续集成方法和系统技术方案

技术编号:36964086 阅读:54 留言:0更新日期:2023-03-22 19:24
本申请提供了一种基于容器的持续集成方法和系统,通过shell脚本自动执行docker commit来生成目标镜像,该装置的基础镜像的制作,实现了从源代码到docker镜像的自动化生成过程,适用于用go编写的所有应用程序,具有很高的复用性,为持续集成和持续部署(CI/CD)提供了基础保障。本申请采用持续集成的方式,通过脚本自动化的构建来验证,从而尽快地发现集成错误,大大减少集成的问题,让团队能够更快的开发内聚的软件。的开发内聚的软件。的开发内聚的软件。

【技术实现步骤摘要】
一种基于容器的持续集成方法和系统


[0001]本申请涉及开发和持续集成
,具体涉及一种基于容器的持续集成方法和系统。

技术介绍

[0002]随着云计算、区块链技术的飞速发展,go语言的应用也日益广泛。go以其并发性好、部署简单、良好的语言设计、执行性能好等优势,迅速应用到了很多领域,尤其是服务器编程、分布式系统、数据库、网络编程、内存数据库、云平台等领域。为了进一步提高开发人员的工作效率,我研究并实现了这个容器化的持续集成装置,该装置能够在代码提交到github仓库后,自动触发编译和发布功能,最终生成可用于生成环境的docker镜像,这种持续集成装置的使用,能够让开发人员把更多精力投入到具体的业务功能开发过程中,减小了编译、打包过程中人工操作的失误和环境影响,保证了服务提交质量和提交效率。
[0003]随着软件项目复杂度的增加,对持续集成提出了更多的要求,早集成,常集成,频繁的集成帮助项目在早期发现项目风险和质量问题,如果到后期才发现这些问题,解决问题代价很大,很有可能导致项目延期或者项目失败。

技术实现思路

[0004]为了解决上述技术问题,本申请提出了一种基于容器的持续集成方法和系统,重点研究go语言编写的程序如何实现持续集的装置。本申请采用持续集成的方式,通过脚本自动化的构建(包括编译、发布、自动化测试)来验证,从而尽快地发现集成错误,大大减少集成的问题,让团队能够更快的开发内聚的软件。本申请所采用的技术方案如下:
[0005]一种基于容器的持续集成方法,包括如下步骤:r/>[0006]步骤1、获取golang应用程序源代码,并通过vendor工具来包含依赖包;
[0007]步骤2、通过通用化编译脚本中的assemble脚本和所述基础镜像生成编译镜像golang builder;
[0008]步骤3、运行编译镜像golang builder,在容器中注入golang应用程序源代码,并使用s2i脚本安装依赖包并完成编译工作,生成golang应用程序源代码的运行时镜像;
[0009]步骤4、在docker或者容器云平台直接运行所述运行时镜像。
[0010]进一步的,在步骤1中,通过vendor工具来准备golang应用程序的依赖包并下载到本地,vendor工具通过内置的git程序自动拉取代码仓库中的golang应用程序源代码,并存档至指定目录,供后期编译使用。
[0011]进一步的,在步骤2中,将通用化编译脚本放入编译镜像中,并按照镜像内绝对路径、主机上相对路径以及网络上文件的顺序搜索通用化编译脚本并执行。
[0012]进一步的,所述通用化编译脚本包括必要脚本和可选脚本,所述必要脚本包括assemble脚本和run脚本,所述可选脚本包括save

artifacts脚本、usage脚本以及test/run脚本。
[0013]进一步的,在步骤3中,生成golang应用程序源代码的运行时镜像,包括如下步骤:
[0014]步骤301、下载s2i脚本;
[0015]步骤302、判断是否进行增量编译,若是,则保存中间依赖;若否,则跳转执行步骤303;
[0016]步骤303、下载golang应用程序源代码,并创建tar包;
[0017]步骤304、运行编译构建,生成运行时镜像;
[0018]步骤305、判断是否出现运行错误,若是,则导入golang应用程序源代码和s2i脚本,返回执行步骤304;若否,则执行步骤306;
[0019]步骤306、提交生成的运行时镜像。
[0020]一种基于容器的持续集成系统,该系统用于实现上述方法,其特征在于,该系统包括源代码获取模块、编译镜像模块、自动化脚本模块;
[0021]源代码获取模块,用于获取golang应用程序源代码;
[0022]编译镜像模块,用于通过通用化编译脚本中的assemble脚本和所述基础镜像生成编译镜像golang builder;
[0023]自动化脚本模块,用于准备编译过程中的各种控制脚本,并将各种控制脚本提供给编译镜像模块。
[0024]进一步的,所述源代码获取模块通过vendor工具来准备golang应用程序的依赖包并下载到本地,vendor工具通过内置的git程序自动拉取代码仓库中的golang应用程序源代码,并存档至指定目录,供后期编译使用。
[0025]进一步的,所述编译镜像模块将通用化编译脚本放入编译镜像中,并按照镜像内绝对路径、主机上相对路径以及网络上文件的顺序搜索通用化编译脚本并执行。
[0026]进一步的,所述各种控制脚本包括:通用化编译脚本、安全处理脚本、装配脚本、镜像build脚本、镜像推送脚本。
[0027]进一步的,所述通用化编译脚本包括必要脚本和可选脚本,所述必要脚本包括assemble脚本和run脚本,所述可选脚本包括save

artifacts脚本、usage脚本以及test/run脚本。
[0028]通过本申请实施例,可以获得如下技术效果:
[0029](1)标准化:建立一个go语言标准的编译环境,规范开发流程,使用最佳实践来完成go语言的编译和发布流程;
[0030](2)速度快:通过该builder镜像,省去了编译代码、编写Dockerfile、构建docker镜像的过程,直接生成包含可运行程序的镜像;
[0031](3)效率高:可以防止开发者在其应用程序构建期间执行任意的yum安装类型操作,从而导致开发迭代变慢。
附图说明
[0032]为了更清楚地说明本申请实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0033]图1为持续集成的过程示意图;
[0034]图2为镜像工作的流程示意图。
具体实施方式
[0035]为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的全部其他实施例,都属于本申请保护的范围。
[0036]目前常见的持续集成工具或方法主要有:Jenkins、GitLab CI等工具。Jenkins是使用最多的一种持续集成方案,但是Jenkins在build计划中不能有需要换agent的任务。另外一种GitLab CI可以支持在project上配置触发器来调度,支持shell、ssh、docker等形式来运行,但是GitLab CI有一个很大的劣势,通过yml来配置stage和job,需要学习额外的文件语法balabala,易用性较差。本文档来自技高网...

【技术保护点】

【技术特征摘要】
1.一种基于容器的持续集成方法,其特征在于,包括如下步骤:步骤1、获取golang应用程序源代码,并通过vendor工具来包含依赖包;步骤2、通过通用化编译脚本中的assemble脚本和所述基础镜像生成编译镜像golang builder;步骤3、运行编译镜像golang builder,在容器中注入golang应用程序源代码,并使用s2i脚本安装依赖包并完成编译工作,生成golang应用程序源代码的运行时镜像;步骤4、在docker或者容器云平台直接运行所述运行时镜像。2.根据权利要求1所述的方法,其特征在于,在步骤1中,通过vendor工具来准备golang应用程序的依赖包并下载到本地,vendor工具通过内置的git程序自动拉取代码仓库中的golang应用程序源代码,并存档至指定目录,供后期编译使用。3.根据权利要求1所述的方法,其特征在于,在步骤2中,将通用化编译脚本放入编译镜像中,并按照镜像内绝对路径、主机上相对路径以及网络上文件的顺序搜索通用化编译脚本并执行。4.根据权利要求3所述的方法,其特征在于,所述通用化编译脚本包括必要脚本和可选脚本,所述必要脚本包括assemble脚本和run脚本,所述可选脚本包括save

artifacts脚本、usage脚本以及test/run脚本。5.根据权利要求1所述的方法,其特征在于,在步骤3中,生成golang应用程序源代码的运行时镜像,包括如下步骤:步骤301、下载s2i脚本;步骤302、判断是否进行增量编译,若是,则保存中间依赖;若否,则跳转执行步骤303;步骤303、下载golang应用程序源代码,并创...

【专利技术属性】
技术研发人员:刘俊榜霍旭晖马文成
申请(专利权)人:天翼云科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1