持續集成:Continuous Integration,簡稱CI,意思是,在一個項目中,任何人對代碼庫的任何改動,都會觸發CI服務器自動對項目進行構建,自動運行測試,甚至自動部署到測試環境。這樣作的好處就是,隨時發現問題,隨時修復。由於修復問題的成本隨着時間的推移而增加,越早發現,修復成本越低。當你想要更新你的項目,只要動手提交代碼到你的代碼倉庫,剩餘的更新部署操做就只管交由CI服務器來完成就好,此次使用的CI工具是JenKins。java
搭建Jenkins持續集成服務器能夠分爲兩大步驟,一是在服務器安裝好所需的軟件,二是配置咱們的持續集成項目 linux
執行命令 rpm -ivh xxx.rpm 安裝Jenkins
//啓動JenKins
/etc/init.d/jenkins start
瀏覽器輸入 http://xxx服務器地址:8080/
//默認端口號是8080
複製代碼
JenKins默認端口號是8080,這與Tomcat默認端口號衝突,全部咱們能夠把Jenkins的端口號改爲咱們本身定義的端口號 9090git
修改端口號的文件爲 /etc/sysconfig/jenkins,字段爲JENKINS_PORTgithub
執行命令進行修改,若是碰到沒法啓動Jnekins, 沒法啓動(如遇此Starting Jenkins bash: /usr/bin/java: No such file or directory錯誤 )修改 /etc/init.d/jenkins 加入 /opt/jdk1.8.0_181/bin/java緣由
是Java的環境變量沒有找到,通常使用centos服務默認安裝openjdk,若是本身卸載openJdk並從新安裝sun的JDK,則也須要在該文件中加入路徑,如圖所示
vim /etc/sysconfig/jenkins
//添加Java地址
vim /etc/init.d/jenkins
複製代碼
修改端口沒法啓動的狀況,有多是服務器防火牆沒有添加端口的監聽,致使沒法訪問web
vim /etc/sysconfig/iptables
查看是否監聽端口(若是配置了本身定義的端口,須要先訪問該端口一次才能看到監聽)
netstat -ntlp
//重啓防火牆配置(不重啓端口仍是沒法生效)
service iptables restart
複製代碼
關閉Jenkinsspring
重啓Jenkiesapache
//xxx:8080 是搭建Jenkins服務器地址
http://xxx:8080/restart
複製代碼
從新加載配置信息vim
http://localhost:8080/reload
複製代碼
查看Java相關的包信息:
rpm -qa|grep java (或rpm -qa|grep jdk,rpm安裝後,包名裏沒有Java)
卸載
yum -y remove java [包名]
例如
yum –y remove java java-1.8.0-openjdk-1.8.0.131-3.b12.el7_3.x86_64
jdk 卸載方法 https://blog.csdn.net/xyj0808xyj/article/details/52444694
//解壓到指定目錄
tar -zxvf jdk-8u181-linux-x64.tar.gz -C /opt/
//編輯配置文件
vim /etc/profile
export JAVA_HOME=/opt/jdk1.8.0_181
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH
//更新配置文件
source /etc/profile
複製代碼
官網下載 Tomcat8.5centos
直接解壓到服務器(注意這裏指的服務器是項目部署的服務器,應該是和部署JenKins的服務器不一樣)api
強制關閉 tomcat 命令
//強制關閉
ps -ef|grep tomcat
//殺掉沒法關閉進程
kill -9 XXXX
複製代碼
安裝依賴
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel asciidoc
yum install gcc perl-ExtUtils-MakeMaker
若是已經安裝了git,可是版本太老,能夠先卸載
yum remove git
下載git包解壓
tar -vxf git-2.15.1.tar.gz -C /opt
進入git 目錄
cd /opt/git-2.18.0/
執行如下命令
make prefix=/usr/local/git all
make prefix=/usr/local/git install
echo "export PATH=$PATH:/usr/local/git/bin" >> /etc/profile //配置環境變量
source /etc/profile //跟新配置文件
git --version 查看git版本
複製代碼
執行如下命令
tar -zxvf apache-maven-3.3.9-bin.tar.gz -C /opt
在/etc/profile文件末尾增長如下配置
M2_HOME=/opt/tyrone/maven (注意這裏是maven的安裝路徑)
export PATH=${M2_HOME}/bin:${PATH}
重載/etc/profile這個文件
source /etc/profile
複製代碼
Jenkins配置
第一次進入Jnekins,首先根據提示找到安裝服務器的密碼
若是服務器能夠聯網,則選擇他推薦的插件直接安裝,若是服務器沒法鏈接外網,只是在公司內網環境,則能夠離線下載插件再上傳到咱們服務器的Jenkin中,離線插件下載地址,這種方式須要耐心,由於須要安裝的插件可不止一兩個,若是你的服務器不能上網,我這有一份下載好的插件,能夠自行去下載(下載地址)
在Jenkins系統管理模塊的系統配置中配置咱們的Gitlab,須要登陸到Gitlab中獲取APIToken
生成ssh key(在部署Jenkins服務器上生成)
配置SSH KEY ,用於後續項目能夠經過Jenkins部署到應用服務器
輸入命令,一路回車
ssh-keygen -t rsa
如今你的私鑰被放在了~/.ssh/id_rsa 這個文件裏,而公鑰被放在了 ~/.ssh/id_rsa.pub 這個文件裏
能夠將私鑰配置到JneKins的系統設置中,配置框選項是須要Jenkins安裝SSH插件的,以下圖所示
公鑰則配置到各個應用服務器的這個目錄下/root/.ssh/authorized_keys,沒有authorized_keys則建立這個文件,以下圖所示
最後測試應用服務器是否都能成功鏈接,以下圖所示
複製代碼
接下來仍是系統管理模塊中的全局工具配置 Jenkins的 JDK、git和maven。前面咱們已經把這些工具都給安裝了,如今配置到Jenkins中,以下圖所示
新建項目配置
新建一個maven項目(沒有maven項目選項則須要下載對應插件)
首先配置源碼管理,如圖
配置項目構建觸發器
配置maven項目編譯
項目構建成功後部署應用服務器的配置
Tomcat重啓腳本(應當放在與Tomcat目錄同路徑下)
#! /bin/sh
echo '####################開始自動部署####################'
export JAVA_HOME=/usr/local/jdk1.8.0_181
path=`pwd` #當前路徑
tomcatPath=/data/XXXX/tomcat_gxxmt_8080 #指定tomcat文件目錄名稱
cd ../$tomcatPath/bin #進入tomcat的bin目錄
PID=$(ps -fu `whoami`|grep tomcat|grep -v grep|awk '{print $2}')
if [ -z "$PID" ];then
echo "no tomcat process"
else
./shutdown.sh #中止tomcat服務
fi
cd ../webapps #進入tomcat的webapps目錄
rm -rf XXXX-api #刪除之前部署的項目
echo '####################刪除完成####################'
cd ../bin
./startup.sh #啓動tomcat服務
echo '####################部署結束####################'
複製代碼
項目構建成功併發布到了對應服務器執行對應腳本,這裏就能夠看到JenKins的靈活性,能夠配置多臺發佈的應用服務器的多個Tomcat,靈活自動部署應用服務器配置
項目構建編譯部署成功
ERROR: Exception when publishing, exception message [Exec timed out or was interrupted after 120,000 ms](執行腳本沒有正常退出,致使部署超時)
解決:腳本執行加入忽略輸入(nohup ....)
nohup sh /data/gxxmt-api/restart.sh
//當咱們使用nohup命令的的時候,日誌會被打印到nohup.out文件中去。
//若是咱們不作任何處理,會隨着每次的從新啓動,nohup.out會愈來愈大
//。因此我在我執行的腳本中添加了
cp /dev/null nohup.out
複製代碼
在jenkins項目配置SSH Publishers勾選了Exec in pty,表示執行完腳本當即退出
jenkins主目錄遷移,jenkins默認主目錄通常都是安裝在系統盤,運行一段時間後項目部署的歷史版本,日誌文件,工做控件都會佔用大量的系統空間,這樣就會引起系統盤磁盤空間不足,首先咱們能夠修改jenkins主目錄
//更改主目錄
vim /etc/sysconfig/jenkins
JENKINS_HOME="/data/jenkins"
複製 /var/lib/jenkins/ 目錄到 /data目錄下
修改目錄用戶權限
chown -R jenkins:jenkins /data/jenkins
重啓 /etc/sysconfig/jenkins restart
複製代碼
其次咱們還能夠在項目配置中設置丟棄歷史構建
Url is blocked: Requests to the local network are not allowed Gitlab 設置Jenkins的webhook地址沒法設置
升級新版Gitlab,要容許WebHook,須要在在Gitlab的Admin帳戶中,在settings標籤下面,找到OutBound Request,勾選上Allow requests to the local network from hooks and services ,保存更改便可解決問題(以下圖所示)
Gradle 編譯Android 項目 /lib64/libc.so.6: version `GLIBC_2.14’ not found,系統是CentOS 6.9,最高支持glibc的版本爲2.12,而研發程序要2.14版本,因此須要升級。
//查看系統版本
cat /etc/redhat-release
//查看glibc庫版本
strings /lib64/libc.so.6 |grep GLIBC_
//下載glibc庫 並安裝
#下載
wget http://ftp.gnu.org/gnu/glibc/glibc-2.14.tar.gz
wget http://ftp.gnu.org/gnu/glibc/glibc-ports-2.14.tar.gz
#解壓
tar -xvf glibc-2.14.tar.gz
tar -xvf glibc-ports-2.14.tar.gz
#建立相關目錄
mv glibc-ports-2.14 glibc-2.14/ports
mkdir glibc-build-2.14
cd glibc-build-2.14/
#生成C編譯的環境
yum -y install gcc
#編譯C
../glibc-2.14/configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
make
# 安裝剛纔編譯好的 libc.so
makeinstall
# 查看glibc庫版本
strings /lib64/libc.so.6 |grep GLIBC_
複製代碼
最後
到此,咱們的持續集成服務器已經搭建完成,這時候你只要動手提交一下代碼到你前面構建觸發器設置的分支(通常爲主分支),剩餘的項目構建,部署等一系列重複繁瑣的工做就交由Jenkins幫咱們自動完成就能夠了,省時又方便。文章中若是有錯誤,請你們給我提出來,你們一塊兒學習進步,若是以爲個人文章給予你幫助,也請給我一個喜歡或者關注。
參考連接: