寫這篇文章的目的是,實現提交代碼到gitlab上的一個項目時,自動打包,並將包發布到另一台服務器上,重啟tomat。如有問題,可以聯系本人QQ:409838567
gitlab-ci,是基於gitlab和gitlab-runner實現持續集成。
gitlab、gitlab-runner安裝在192.168.3.166上,需要將war包發布到192.168.3.167上。
1.安裝gitlab
yum install gitlab-ce
注:如果用的是虛擬機,物理內存要大於1G,不然經常報502錯誤
如果不會可以百度怎么安裝gitlab
1.1配置端口
vi /etc/gitlab/gitlab.rb
#修改gitlab的訪問ip和端口,ip用本機
external_url 'http://192.168.3.166:8099'
#重啟gitlab
gitlab-ctl reconfigure
2.安裝gitlab-runner
2.1 下載執行文件
sudo wget -O/usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
2.2 設置執行權限
sudo chmod +x /usr/local/bin/gitlab-runner
2.3 創建 GitLab CI 用戶
useradd --comment 'GitLab Runner'--create-home gitlab-runner --shell /bin/bash
2.4
運行服務
gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
gitlab-runner start
3.gitlab-runner 注冊
打開 gitlab 項目 -> Settings -> CI / CD -> Runners settings


可以看到gitLab URL和token,在下面注冊會用到
運行注冊
sudo gitlab-runner register
輸入你的 GitLab URL
Please enter the gitlab-ci coordinator URL(e.g. https://gitlab.com )
https://192.168.3.166:8099(輸入上圖的url)
輸入
注冊令牌
來注冊 Runner
Please enter the gitlab-ci token forthis runner
xxx(輸入上圖的token)
輸入 Runner 說明
Please enter the gitlab-ci description forthis runner
[hostame] my-runner
輸入 Runner 的 tags
Please enter the gitlab-ci tags forthisrunner(comma separated):
my-tag,another-tag
輸入 Runner 執行方式,這里選擇shell
Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:
shell
到這一步gitlab和gitlab-runner就配置好了
4. 創建一個web項目,上傳到gitlab,新建一個.gitlab-ci.yml

.gitlab-ci.yml文件內容如下
stages:
- build
build:
stage: build
script:
#mvn 打包
- mvn clean package-Dmaven.test.skip=true
#將war包拷貝到另外一台服務器
- scp /home/gitlab-runner/builds/f0e79179/0/root/demo/target/demo-0.0.1-SNAPSHOT.war root@192.168.3.167:/data/www/demo-0.0.1-SNAPSHOT.war
#連接tomcat的服務器,執行deploy.sh,將war包拷貝到webapps下面,重啟tomcat
- ssh root@192.168.3.167"sh /apps/shell/deploy.sh"
only:
- test
- master
當代碼提交到test或master分支時,會執行script內的腳本。
deploy.sh
根據需求自己修改
#!/bin/bash
#defined
exportJAVA_HOME="/usr/local/jdk1.8.0_231/"
exportTOMCAT_HOME="/apps/apache-tomcat-8.5.43/"
PID=`ps -ef | grep java | grep apache-tomcat-8.5.43 | awk '{print $2}'`
echo $PID
echo "kill tomcat"
kill -9 $PID
echo "remover jarfile"
cd "$TOMCAT_HOME"/webapps
rm -rf demo*
echo "copy jar to tomcat webapp"
cp /data/www/demo*.war "$TOMCAT_HOME"/webapps/demo.war
cd "$TOMCAT_HOME"/bin
echo "start tomcat"
./startup.sh
問題:gitlab-runner 無法 scp到遠程服務器的問題,scp時,需要輸入目標主機的密碼,所以要將當前機器的公鑰,加入到目標機器的keys里面
1). 連接3.166
2). 切換到gitlab-runner用戶
su gitlab-runner
3). 生成公私鑰
ssh-keygen
4). 復制3.166的公鑰到3.167
scp /home/gitlab-runner/.ssh/id_rsa.pub root@192.168.3.167:/home/id_rsa.pub
5). 連接3.167
6). 將公鑰追加到keys后面
cat /home/id_rsa.pub >>~/.ssh/authorized_keys