CN112506613A - Gitlab-ci自动识别Maven变更子模块并推送docker镜像的方法 - Google Patents
Gitlab-ci自动识别Maven变更子模块并推送docker镜像的方法 Download PDFInfo
- Publication number
- CN112506613A CN112506613A CN202011441874.2A CN202011441874A CN112506613A CN 112506613 A CN112506613 A CN 112506613A CN 202011441874 A CN202011441874 A CN 202011441874A CN 112506613 A CN112506613 A CN 112506613A
- Authority
- CN
- China
- Prior art keywords
- gitlab
- modules
- pushing
- sub
- variable
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45562—Creating, deleting, cloning virtual machine instances
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种Gitlab‑ci自动识别Maven变更子模块并推送docker镜像的方法,包括以下步骤:S1:进行常规的GitLab‑CI配置,包括管理页面中GitLab Runner、用户账号配置;S2:在项目的配置文件.gitlab‑ci.yml中进行自动识别变更需要的变量定义;S3:在.gitlab‑ci.yml脚本中的Job定义部分,在执行项目整体编译完成后,执行项目整体编译,产生正确的编译后结果;判断预定义变量CI_COMMIT_MESSAGE是否以执行全部推送标记开头,如是则项目.gitlab‑ci.yml脚本中的Job部分:将所有子模块编译后结果推送到docker镜像仓库;如不是项目.gitlab‑ci.yml脚本中的Job部分:执行git show命令,使用预定义变量CI_COMMIT_SHA,汇总出本次提交受影响的子模块列表,按列表依次将受影响子模块编译后结果推送到docker镜像仓库。
Description
技术领域
本发明涉及GitLab-CI进行docker镜像自动化构建领域,更具体的说是涉及Gitlab-ci自动识别Maven变更子模块并推送docker镜像的方法。
背景技术
Docker容器作为实践DevOps的一个重要工具越来越受开发者的喜爱,Gitlab提供了免费的代码管理服务,同时GitLab-CI还提供了强大的自动化CI/CD(ContinuousIntegration、Delivery&Deployment,持续集成/持续交付)流程功能,现在大多数开发者会选择采用GitLab-CI在代码提交到发布库时触发自动构建及推送docker镜像的方法进行容器应用自动化构建。
对于基于Maven多模块搭建项目,通常情况下,我们在GitLab-CI构建阶段将各子模块编译后结果依次推送到docker镜像仓库中,虽然该次代码提交可能只涉及到1个或者少量几个子模块的变更,也需要将所有子模块编译结果推送到docker仓库中,由于实际工作中我们的项目规模大,子模块较多,且打包后文件比较大,将它们全部推送到docker镜像仓库时会占用相当长的时间,影响后续工作的执行,也会产生不必要的资源占用及空间浪费。
发明内容
本发明的目的在于提供Gitlab-ci自动识别Maven变更子模块并推送docker镜像的方法,以期解决背景技术中的问题。
为了实现上述目的,本发明采用以下技术方案:
Gitlab-ci自动识别Maven变更子模块并推送docker镜像的方法,包括以下步骤:
S1:进行常规的GitLab-CI配置,包括管理页面中GitLab Runner、用户账号配置;
S2:在项目的配置文件.gitlab-ci.yml中进行自动识别变更需要的变量定义;
S3:在.gitlab-ci.yml脚本中的Job定义部分,在执行项目整体编译完成后,执行项目整体编译,产生正确的编译后结果;判断预定义变量CI_COMMIT_MESSAGE是否以执行全部推送标记开头,如是则项目.gitlab-ci.yml脚本中的Job部分:将所有子模块编译后结果推送到docker镜像仓库;如不是项目.gitlab-ci.yml脚本中的Job部分:执行git show命令,使用预定义变量CI_COMMIT_SHA,汇总出本次提交受影响的子模块列表,按列表依次将受影响子模块编译后结果推送到docker镜像仓库。
所述S2包括以下步骤:
S2-1:在.gitlab-ci.yml脚本中的variables变量定义部分:根据模块结构定义各子模块对应代码仓库相对路径的变量;
S2-2:定义依赖公共模块变量的相关变量。
所述S2-1包括:
S2-1-1:对于普通子模块定义变量规则为:前面是变量,后面是其对应代码仓库相对路径;
S2-1-2:对于公共模块与S2-1-1一样,定义变量的前面是变量,后面是其对应代码仓库相对路径。
所述S3包括:
S3-1:利用预定义变量CI_COMMIT_MESSAGE,判断其是否以一个需要全部推送的标记,在提交代码时约定注释的前缀增加特殊标记开头,如是则将每个子模块编译后结果推送到docker镜像仓库,结束脚本执行;如不需要整体推送则执行S3-2;
S3-2:执行git show命令,使用预定义变量CI_COMMIT_SHA,获得本次提交所影响的所有代码的文件路径,然后从中依次判断是否包含我们在第一步设置的子模块路径变量,如包含普通模块,则将该模块添加到待推送推送模块列表中,如包含公共模块则将其依赖的所有子模块添加到待推送推送模块列表中,然后将待推送模块列表去重,最后按照此列表依次将其中子模块的编译结果推送到docker镜像仓库。
本发明与现有技术相比具有的有益效果是:
特别对于现今项目更多采用微服务方式,模块划分得更细粒度,子模块数量必然会很多,采用本方法后效果明显,极大节约了推送docker镜像的时间,也节省了镜像仓库的空间要求。提高了项目开发的效率。
附图说明
图1示出了基于Maven多模块结构及依赖关系示意图;
图2示出了本发明的流程示意图。
具体实施方式
下面结合实施例对本发明作进一步的描述,所描述的实施例仅仅是本发明一部分实施例,并不是全部的实施例。基于本发明中的实施例,本领域的普通技术人员在没有做出创造性劳动前提下所获得的其他所用实施例,都属于本发明的保护范围。
实施例1:
通常利用GitLab-CI进行构建时,GitLab CI主要用于管理构建状态,因此,运行构建任务一般交给GitLab Runner来做,这就必然会使用.gitlab-ci.yml来配置,告诉CI用需要做哪些操作,这个文件位于项目在代码仓库的根目录下,当有新内容push到代码仓库,或者有代码合并后,GitLab会查找是否有.gitlab-ci.yml文件,如果文件存在,Runners将会根据该文件的内容开始build本次commit。至于gitlab服务的安装、Runner的设置等都跟通常操作一样,不是本文讨论的重点。
对于Maven多模块项目,通常的做法是在.gitlab-ci.yml配置中,首先对整个项目编译,然后依次将各个子模块的编译结果推送到docker镜像仓库中去,要想达到只推送受影响的子模块编译结果到docker镜像仓库,其问题的实质就是解决在GitLab Runner在执行阶段如何识别哪些子模块在本次提交中发生了改变,然而GitLab-CI默认的预定义变量中没有本次影响的子模块的定义,但是从9.0版后提供了:CI_COMMIT_SHA(本次提交的版本号),10.8版本后提供了CI_COMMIT_MESSAGE(完整的提交消息),利用他们,我们就可以实现目标。
本发明实施例提供了一种Gitlab-ci自动识别Maven变更子模块并推送docker镜像的方法:
下面参照图2流程示意图将具体描述执行步骤:
S1:进行常规的GitLab-CI配置,包括管理页面中GitLab Runner、用户账号等等配置;
S2:在项目的配置文件.gitlab-ci.yml中进行自动识别变更需要的变量定义,图1示出了基于Maven多模块结构及依赖关系示意图,包含了Maven多模块的构成可能,我们以此图例说明具体的定义。
S2-1:在.gitlab-ci.yml脚本中的variables变量定义部分:根据模块结构定义各子模块对应代码仓库相对路径的变量。
S2-1-1:对于普通子模块定义变量如:sub1module1:/sub1module1/前面是变量,后面是其对应代码仓库相对路径,
S2-1-2:对于公共模块与S2-1-1一样,定义变量如:sub2common:sub1module3/sub2common/前面是变量,后面是其对应代码仓库相对路径
S2-2:定义依赖公共模块变量的相关变量,如common_dependency:sub1module1,sub2module1,sub2module2前面是变量名,后面是该公共模块改变将影响到的子模块,注意这里需要根据项目结构配置会进行发布的最终子模块,例如sub2common只是公共包不进行发布使用,则不需要配置其中,各模块用逗号分隔
S3:在.gitlab-ci.yml脚本中的Job定义部分,在执行项目整体编译完成后,依赖上述变量进行逻辑控制
S3-1:利用预定义变量CI_COMMIT_MESSAGE(完整的提交消息),判断其是否以一个需要全部推送的标记(为了处理虽然只是局部子模块更新,但需要整体推送的情况,在提交代码时约定注释的前缀增加特殊标记如:push_allxxx)开头,如是则将每个子模块编译后结果推送到docker镜像仓库,结束脚本执行。如不需要整体推送则执行S3-2。
S3-2:执行git show命令,使用预定义变量CI_COMMIT_SHA(本次提交的版本号),也可结合命令参数--name-status等,获得本次提交所影响的所有代码的文件路径,然后从中依次判断是否包含我们在第一步设置的子模块路径变量,如包含普通模块,则将该模块添加到待推送推送模块列表中,如包含公共模块则将其依赖的所有子模块添加到待推送推送模块列表中,然后将待推送模块列表去重,最后按照此列表依次将其中子模块的编译结果推送到docker镜像仓库。
以上所述仅为本发明较佳实例而已,本发明并不局限于此。对于本领域内的普通技术人员而言,在不脱离本发明的精神和实质的情况下,可以做出各种变型和改进,这些变型和改进也视为本发明的保护范围。
Claims (4)
1.Gitlab-ci自动识别Maven变更子模块并推送docker镜像的方法,其特征在于,包括以下步骤:
S1:进行常规的GitLab-CI配置,包括管理页面中GitLab Runner、用户账号配置;
S2:在项目的配置文件.gitlab-ci.yml中进行自动识别变更需要的变量定义;
S3:在.gitlab-ci.yml脚本中的Job定义部分,在执行项目整体编译完成后,执行项目整体编译,产生正确的编译后结果;判断预定义变量CI_COMMIT_MESSAGE是否以执行全部推送标记开头,如是则项目.gitlab-ci.yml脚本中的Job部分:将所有子模块编译后结果推送到docker镜像仓库;如不是项目.gitlab-ci.yml脚本中的Job部分:执行git show命令,使用预定义变量CI_COMMIT_SHA,汇总出本次提交受影响的子模块列表,按列表依次将受影响子模块编译后结果推送到docker镜像仓库。
2.根据权利要求1所述的Gitlab-ci自动识别Maven变更子模块并推送docker镜像的方法,其特征在于,所述S2包括以下步骤:
S2-1:在.gitlab-ci.yml脚本中的variables变量定义部分:根据模块结构定义各子模块对应代码仓库相对路径的变量;
S2-2:定义依赖公共模块变量的相关变量。
3.根据权利要求2所述的Gitlab-ci自动识别Maven变更子模块并推送docker镜像的方法,其特征在于,所述S2-1包括:
S2-1-1:对于普通子模块定义变量规则为:前面是变量,后面是其对应代码仓库相对路径;
S2-1-2:对于公共模块与S2-1-1一样,定义变量的前面是变量,后面是其对应代码仓库相对路径。
4.根据权利要求1所述的Gitlab-ci自动识别Maven变更子模块并推送docker镜像的方法,其特征在于,所述S3包括:
S3-1:利用预定义变量CI_COMMIT_MESSAGE,判断其是否以一个需要全部推送的标记,在提交代码时约定注释的前缀增加特殊标记开头,如是则将每个子模块编译后结果推送到docker镜像仓库,结束脚本执行;如不需要整体推送则执行S3-2;
S3-2:执行git show命令,使用预定义变量CI_COMMIT_SHA,获得本次提交所影响的所有代码的文件路径,然后从中依次判断是否包含我们在第一步设置的子模块路径变量,如包含普通模块,则将该模块添加到待推送推送模块列表中,如包含公共模块则将其依赖的所有子模块添加到待推送推送模块列表中,然后将待推送模块列表去重,最后按照此列表依次将其中子模块的编译结果推送到docker镜像仓库。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011441874.2A CN112506613B (zh) | 2020-12-11 | 2020-12-11 | Gitlab-ci自动识别Maven变更子模块并推送docker镜像的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011441874.2A CN112506613B (zh) | 2020-12-11 | 2020-12-11 | Gitlab-ci自动识别Maven变更子模块并推送docker镜像的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112506613A true CN112506613A (zh) | 2021-03-16 |
CN112506613B CN112506613B (zh) | 2022-03-01 |
Family
ID=74970965
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011441874.2A Active CN112506613B (zh) | 2020-12-11 | 2020-12-11 | Gitlab-ci自动识别Maven变更子模块并推送docker镜像的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112506613B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113535334A (zh) * | 2021-08-17 | 2021-10-22 | 成都长城开发科技有限公司 | 一种基于Docker的项目构建方法、设备及存储介质 |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2018077169A1 (zh) * | 2016-10-31 | 2018-05-03 | 中兴通讯股份有限公司 | 镜像仓库授权、访问、管理方法、服务器和客户端 |
CN108874650A (zh) * | 2017-05-09 | 2018-11-23 | 上海秦苍信息科技有限公司 | 一种持续集成自动化测试方法 |
CN109597644A (zh) * | 2018-12-05 | 2019-04-09 | 江苏风云科技服务有限公司 | 项目部署方法及装置 |
US20190171438A1 (en) * | 2017-12-05 | 2019-06-06 | Archemy, Inc. | Active adaptation of networked compute devices using vetted reusable software components |
CN110262806A (zh) * | 2019-06-20 | 2019-09-20 | 杭州泰然鲸数云计算有限公司 | 一种支持自动化服务编排的DevOps系统 |
CN110297627A (zh) * | 2019-07-01 | 2019-10-01 | 四川长虹电器股份有限公司 | 一种基于gitlab-ci的前端代码自动化持续集成方法 |
CN111046298A (zh) * | 2020-03-13 | 2020-04-21 | 腾讯科技(深圳)有限公司 | 推送应用程序的方法、装置、计算机设备和存储介质 |
CN111309441A (zh) * | 2020-02-19 | 2020-06-19 | 北京中数智汇科技股份有限公司 | 一种基于Jenkins实现DevOps的微服务部署方法 |
CN111552644A (zh) * | 2020-04-28 | 2020-08-18 | 成都库珀区块链科技有限公司 | 一种基于微服务架构的软件持续集成方法 |
CN111831323A (zh) * | 2020-05-29 | 2020-10-27 | 大数金科网络技术有限公司 | 容器化的增量持续交付方法 |
CN111966366A (zh) * | 2020-08-27 | 2020-11-20 | 苏州浪潮智能科技有限公司 | 一种多cpu架构的集群部署的方法和设备 |
-
2020
- 2020-12-11 CN CN202011441874.2A patent/CN112506613B/zh active Active
Patent Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2018077169A1 (zh) * | 2016-10-31 | 2018-05-03 | 中兴通讯股份有限公司 | 镜像仓库授权、访问、管理方法、服务器和客户端 |
CN108011862A (zh) * | 2016-10-31 | 2018-05-08 | 中兴通讯股份有限公司 | 镜像仓库授权、访问、管理方法及服务器和客户端 |
CN108874650A (zh) * | 2017-05-09 | 2018-11-23 | 上海秦苍信息科技有限公司 | 一种持续集成自动化测试方法 |
US20190171438A1 (en) * | 2017-12-05 | 2019-06-06 | Archemy, Inc. | Active adaptation of networked compute devices using vetted reusable software components |
CN109597644A (zh) * | 2018-12-05 | 2019-04-09 | 江苏风云科技服务有限公司 | 项目部署方法及装置 |
CN110262806A (zh) * | 2019-06-20 | 2019-09-20 | 杭州泰然鲸数云计算有限公司 | 一种支持自动化服务编排的DevOps系统 |
CN110297627A (zh) * | 2019-07-01 | 2019-10-01 | 四川长虹电器股份有限公司 | 一种基于gitlab-ci的前端代码自动化持续集成方法 |
CN111309441A (zh) * | 2020-02-19 | 2020-06-19 | 北京中数智汇科技股份有限公司 | 一种基于Jenkins实现DevOps的微服务部署方法 |
CN111046298A (zh) * | 2020-03-13 | 2020-04-21 | 腾讯科技(深圳)有限公司 | 推送应用程序的方法、装置、计算机设备和存储介质 |
CN111552644A (zh) * | 2020-04-28 | 2020-08-18 | 成都库珀区块链科技有限公司 | 一种基于微服务架构的软件持续集成方法 |
CN111831323A (zh) * | 2020-05-29 | 2020-10-27 | 大数金科网络技术有限公司 | 容器化的增量持续交付方法 |
CN111966366A (zh) * | 2020-08-27 | 2020-11-20 | 苏州浪潮智能科技有限公司 | 一种多cpu架构的集群部署的方法和设备 |
Non-Patent Citations (4)
Title |
---|
IVAN KRIZSAN: "Building in Docker Containers on GitLab CE", 《HTTPS://WWW.IVANKRIZSAN.SE/2019/06/17/BUILDING-IN-DOCKER-CONTAINERS-ON-GITLAB-CE/》 * |
多懂一些: "前后端分离项目基于gitlab+docker+node 自动发版部署方案", 《HTTPS://BLOG.CSDN.NET/SUNNYLIUQI/ARTICLE/DETAILS/89887880》 * |
琦彦: "使用GitLab CI和Docker自动部署SpringBoot应用", 《HTTPS://MEIGIT.READTHEDOCS.IO/EN/LATEST/GITLAB_CI_.GITLAB-CI.YML_DETAIL.HTML》 * |
邢如意: "基于Docker的容器化DevOps平台设计与实现", 《电子技术与软件工程》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113535334A (zh) * | 2021-08-17 | 2021-10-22 | 成都长城开发科技有限公司 | 一种基于Docker的项目构建方法、设备及存储介质 |
CN113535334B (zh) * | 2021-08-17 | 2023-09-05 | 成都长城开发科技股份有限公司 | 一种基于Docker的项目构建方法、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN112506613B (zh) | 2022-03-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8201140B2 (en) | System and method for creating and using graphical object instances in a statechart environment | |
CN104484269A (zh) | 一种自动生成测试脚本的方法 | |
CN111177733B (zh) | 一种基于数据流分析的软件补丁检测方法及装置 | |
CN101201753A (zh) | 一种多状态机管理引擎的配置管理方法 | |
CN101071378A (zh) | 源代码生成方法、设备和程序 | |
US11301218B2 (en) | Graph-based vectorization for software code optimization references | |
CN109766139B (zh) | 配置文件的配置方法及装置 | |
CN112506613B (zh) | Gitlab-ci自动识别Maven变更子模块并推送docker镜像的方法 | |
CN103823680A (zh) | 一种游戏业务逻辑引擎的开发方法及装置 | |
CN111459504B (zh) | 智能合约的处理方法、装置、设备和存储介质 | |
US11256488B1 (en) | Graph-based vectorization for software code optimizations | |
CN113609101A (zh) | 实时数据任务的发布方法、装置、电子设备及存储介质 | |
CN1588411B (zh) | 一种基于流程定制的流程控制方法 | |
CN111913704A (zh) | 一种基于VSCode快速开发GSP7脚本的方法及插件工具 | |
KR20080013422A (ko) | 소프트웨어 프로젝트 빌드 방법 | |
CN109857380B (zh) | 一种工作流文件编译方法及装置 | |
CN112860248B (zh) | 源代码生成方法及装置 | |
CN112464596B (zh) | 回归测试方法、系统、设备及可读存储介质 | |
CN114398226A (zh) | 一种网络资产报告生成方法及装置 | |
US6385763B1 (en) | Methodology for mapping use cases to operations for operational profile development | |
CN112540750B (zh) | 自适应内建函数与指令操作选择翻译方法 | |
CN113849161A (zh) | 应用控制方法、装置、存储介质及电子设备 | |
CN111596923A (zh) | Haxe静态链接库构建方法、装置和电子设备 | |
CN111399850A (zh) | 基于区块链的多语言智能合约编译方法 | |
CN113867714B (zh) | 一种适配多语言的自动代码生成方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |