Jenkins一次任务构建中如何处理多个git仓库
最近在公司运维同学的推动下,前后端部署使用docker镜像方式实施。前端在实施的时候遇到了问题:如何在一次jenkin任务构建使用两个gitlab仓库的东西(我们前端的代码和配置存在于两个不同的gitlab仓库),我们需要在构建docker镜像的时候,将构建代码和配置全部放到镜像中去,镜像启动的的时候再去根据不同的环境使用不同的配置(创建一个构建代码中默认配置<dist文件中的dynamic.js>的软链指向具体环境配置文件<config文件夹中的test.js , 比方说是测试环境>),然后在启动镜像中的nginx。所以我们需要在jenkins构建任务中执行一个脚本:将配置和前端构建文件全部复制到镜像中去。
jenkins有一个插件,叫 Multiple SCMs plugin,插件介绍:This plugin enables the selection of multiple source code management systems for a build. For example, it enables checking out the source code from one SCM while checking out legacy or third-party code from another.也就是说:这款插件支持多个版本控制管理源,你可以在一次构建中选择多个仓库进行构建(同时支持git和svn)。确保jenkins安装该插件后,参考如下:
1、在源码管理中选择 Multiple SCMs
2、选择你的代码仓库类型,进行添加,比如git
3、填写第2步添加的仓库属性
注意第3步中的红色框:图中的code和config是2个文件夹,对应你的源代码仓库的个数,拿我们当前的情况来说,在当前jenkins任务的工作区间下,分别建立code和config文件夹,将第一个仓库(前端代码)拉取至code目录下,将第二个仓库(前端所有配置)拉取至config目录下。如果没有添加文件夹进行区分,会出现前一个仓库将后一个仓库覆盖的问题(如果两个仓库的软件是一样的,比如都是git或者都是svn),造成我们构建的时候找不到文件。
构建当前任务后,在当前任务的工作区间查看2个仓库的内容是否拉取成功:
[szhq@dev01 workspace]$ ls -l total 464 drwxrwxr-x 8 szhq szhq 4096 Apr 2 11:05 code drwxrwxr-x 2 szhq szhq 4096 Apr 2 11:05 code@tmp drwxrwxr-x 4 szhq szhq 4096 Apr 2 11:05 config drwxrwxr-x 2 szhq szhq 4096 Apr 2 11:05 config@tmp
查看code目录:
[szhq@dev01 workspace]$ cd code && ls -l total 444 drwxrwxr-x 2 szhq szhq 4096 Apr 2 11:05 build drwxrwxr-x 2 szhq szhq 4096 Apr 2 11:05 config -rw-rw-r-- 1 szhq szhq 2326 Apr 2 11:05 index.dev.html -rw-rw-r-- 1 szhq szhq 2329 Apr 2 11:05 index.prod.html -rw-rw-r-- 1 szhq szhq 3213 Apr 2 11:05 package.json -rw-rw-r-- 1 szhq szhq 1120 Apr 2 11:05 README.md drwxrwxr-x 11 szhq szhq 4096 Apr 2 11:05 src drwxrwxr-x 5 szhq szhq 4096 Apr 2 11:05 static drwxrwxr-x 4 szhq szhq 4096 Apr 2 11:05 test -rw-rw-r-- 1 szhq szhq 414823 Apr 2 11:05 yarn.lock
查看config目录:
[szhq@dev01 workspace]$ cd config && ls -l total 8 -rw-rw-r-- 1 szhq szhq 670 Apr 2 11:05 README.md drwxrwxr-x 2 szhq szhq 4096 Apr 2 11:05 src
至此,一个jenkins任务中支持多个库的问题就完美解决了。。。写在最后,脑洞大开一下:针对后端微服务,这个插件是支持同时构建多个微服务模块的