最近在公司運維同學的推動下,前后端部署使用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任務中支持多個庫的問題就完美解決了。。。寫在最后,腦洞大開一下:針對后端微服務,這個插件是支持同時構建多個微服務模塊的