前言
想要完成接下來的操作,你要做的準備工作有以下幾點:
- Maven系列(一)Maven的簡介與使用
- Maven系列(二)無Maven不項目---使用Eclipse快速搭建Maven項目
- Maven系列(三)Maven給不同的環(huán)境打包
- Maven系列(四)Maven熱部署
- Maven系列(五)CentOS7搭建最新GitLab
如果你沒有接觸過Maven,沒關(guān)系,看看上面的五點,相信會讓你對Maven有一個稍微深入的了解,并會讓你迅速掌握其高大上的用法。
本節(jié)所需
先來看一下這張圖:

傳統(tǒng)與CI
傳統(tǒng)的熱部署是圖中虛線所指,通過本地執(zhí)行
mvn tomcat:deploy 來將項目部署到Server1上,實線所指是借助GitLab的CI來部署,比較起來感覺沒什么兩樣,但是GitLab在這里除了作為一個代碼托管平臺之外,還擔當著自動執(zhí)行預編寫腳本的功能(下面有介紹)。這里需要兩臺Server,我用兩個虛擬機來代替。
安裝GitLabRunner
可以再任意一臺server安裝
## 添加GitLab官方源
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.rpm.sh | sudo bash
## 安裝
sudo yum install gitlab-ci-multi-runner
這里要在管理員的權(quán)限下執(zhí)行~,過程可能有點慢。
安裝完畢后,執(zhí)行gitlab-ci-multi-runner 會有命令幫助提示,如下:
[root@localhost ~]# gitlab-ci-multi-runner
NAME:
gitlab-ci-multi-runner - a GitLab Runner
USAGE:
gitlab-ci-multi-runner [global options] command [command options] [arguments...]
VERSION:
1.8.1 (a2efdd4)
AUTHOR(S):
Kamil Trzciński <ayufan@ayufan.eu>
COMMANDS:
exec execute a build locally
list List all configured runners
run run multi runner service
register register a new runner
install install service
uninstall uninstall service
start start service
stop stop service
restart restart service
status get status of a service
run-single start single runner
unregister unregister specific runner
verify verify all registered runners
artifacts-downloader download and extract build artifacts (internal)
artifacts-uploader create and upload build artifacts (internal)
cache-archiver create and upload cache artifacts (internal)
cache-extractor download and extract cache artifacts (internal)
help, h Shows a list of commands or help for one command
GLOBAL OPTIONS:
--debug debug mode [$DEBUG]
--log-level, -l "info" Log level (options: debug, info, warn, error, fatal, panic)
--cpuprofile write cpu profile to file [$CPU_PROFILE]
--help, -h show help
--version, -v print the version
注冊Runner
Runner的成功安裝預示著我們現(xiàn)在擁有了一臺發(fā)動機,下面要將“發(fā)動機”裝在“機器”(GitLab)上。
執(zhí)行gitlab-ci-multi-runner register 開始注冊
[root@localhost ~]# gitlab-ci-multi-runner register
Running in system-mode.
## gitlab服務器的域名
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://192.168.92.128
## runnerToken,下面圖片有位置
Please enter the gitlab-ci token for this runner:
3kjzGzK4PZDA73HYPHrP
## 描述
Please enter the gitlab-ci description for this runner:
[localhost.localdomain]: 簡書·test
Please enter the gitlab-ci tags for this runner (comma separated):
js
Registering runner... succeeded runner=3kjzGzK4
## 執(zhí)行容器,我用的shell
Please enter the executor: virtualbox, docker-ssh+machine, docker, docker-ssh, parallels, shell, ssh, docker+machine, kubernetes:
shell
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!

新版GitLab
安裝成功之后,gitlab的頁面會多出一個

Runner
添加項目
點擊Edit進入詳細頁面

詳細頁面
我們要讓“發(fā)動機”干活,就選中項目后面的enable,讓項目的CI在這個Runner運行。
編寫CI腳本
我們要在項目的根目錄下添加一個文件.gitlab-ci.yml ,鬼知道怎么會是醬紫的文件名。
build:
script: "pwd && mvn tomcat:deploy"
這里寫的比較簡單,直接熱部署。根據(jù)項目需要,我們可以寫更復雜的腳本,比如自動將打包的項目復制到指定位置,然后解壓啦、配置服務器相關(guān)環(huán)境啦,等等等,這些統(tǒng)統(tǒng)交給CI來做~,是不是很方便??!
項目提交上去后自動會跑CI腳本。有執(zhí)行的記錄和詳細信息

集成記錄
可能會遇到的問題
安裝Runner的服務器要安裝Maven
maven安裝。
下載maven文件,官網(wǎng)下載對應版本。http://maven.apache.org/download.cgi;
解壓下載的包,將maven目錄移動到自定義目錄下,建議移動到/opt公共目錄下,以便任何用戶能夠訪問到該目錄,例如/opt/apache-maven-3.3;
配置maven環(huán)境變量,修改/etc/profile,在文件末尾增加export M2_HOME=/opt/apache-maven-3.3(你的maven所在目錄), 將該目錄的bin目錄添加到環(huán)境變量PATH中,export PATH=$PATH:$M2_HOME/bin;
使配置生效,source /etc/profile;
測試maven安裝成功,mvn -v,出現(xiàn)配置信息如下則說明maven配置成功:
Apache Maven 3.3.3 (7994120775791599e205a5524ec3e0dfe41d4a06; 2015-04-22T19:57:37+08:00)
Maven home: /Users/turinblueice/Downloads/apache-maven-3.3.3
Java version: 1.8.0_40, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "mac os x", version: "10.10.5", arch: "x86_64", family: "mac"
說在后面
這篇應該是昨天晚上放在CSDN的,前前后后搞了半個多小時,后來在看其他頁面的時候,一不小心給退出了,然后當時就懵逼了,真是有苦說不出?。?!CSDN及時保存的功能沒有簡書做的好,所以我決定,以后再簡書上寫完,然后在復制過去~~~