需求
多臺服務(wù)器耙册,實現(xiàn)自動化部署,jekins作為部署工具嚼锄,maven做為編譯工具爷辱,git作為代碼管理倉庫晕翠,nginx作為負載前置
開始
安裝環(huán)境
1. 下載jekins
2. 安裝jdk
3. 安裝git
4. 安裝maven私服
5. 安裝nginx
6. 組裝調(diào)試
先說安裝jekins和jdk
- 官網(wǎng)https://jenkins.io/download/下載jekins,此處選用war版担映,各系統(tǒng)通用.
2.上傳剛才下載的war包
scp jenkins.war root@172.16.231.134:/jekins
3 .安裝jdk废士,通過官網(wǎng)https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html下載,可以直接下載rpm包如
下載完成后上傳到服務(wù)器
scp jdk-8u191-linux-x64.rpm root@172.16.231.134:/jekins
安裝jdk
#當(dāng)然一般情況下yum install java就好
rpm -ivh jdk-8u191-linux-x64.rpm
查看java安裝目錄和版本號
java -verbose
java -version
- 下載tomcat7,暫時jekins支持到此版本,上傳到服務(wù)器蝇完,我是通過vagrant部署的虛擬機官硝,所以實際掛載是同構(gòu)vagrant管理,只需要把文件拖入掛載點即可
- 本地虛擬機短蜕,關(guān)閉防火墻
systemctl stop firewalld.service
systemctl disable firewalld.servic
-
將jekins.war放到tomcat的wepaaps下氢架,啟動tomcat,進入項目朋魔,此時會讓你輸入密鑰岖研,按其指示的文件就可以找到(如果找不到密碼,可以通過find / -name initialAdminPassword命令找到文件,如54bf32b3a8334a86b5842257b75d8e88)警检,進入后孙援,我選擇標(biāo)準(zhǔn)安裝
image.png
7.下面繼續(xù)創(chuàng)建賬號,可以先不用就用剛才的admin扇雕,但密碼就是剛才那一長串拓售,然后進入,就可以創(chuàng)建項目了
jekins安裝完成后镶奉,我們說git服務(wù)器础淤,我git采用阿里云的免費版gitlib崭放,地址
https://code.aliyun.com,可用淘寶賬號登錄值骇,客戶端采用sourcetree莹菱,maven 安裝,下面該安裝maven私服了,先安裝maven
#首先安裝maven
wget /apps http://mirror.bit.edu.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz
tar -zxvf apache-maven-3.3.9-bin.tar.gz
#配置maven環(huán)境
vi /etc/profile
#文件中添加
export M2_HOME=/apps/apache-maven-3.3.9
export PATH=$PATH:$M2_HOME/bin
#然后發(fā)布
source /etc/profile
#測試
mvn -version
#修改settings中指定倉庫位置
mkdir /apps/mvn-repo
#在settings中指定倉庫地址吱瘩,添加如下
#<localRepository>/apps/mvn-repo</localRepository>
- 下面安裝nexus道伟,http://www.sonatype.org/nexus/archived/ 下載所需要的版本
#下載完后解壓
tar -zxvf nexus-3.7.1-02-unix.tar.gz
#解壓后有兩個文件夾
#nexus-3.7.1-02 是nexus的核心文件
#sonatype-work maven下載jar存放地址
#修改nexus的默認端口號,我采用的是3.7的版本使碾,配置在etc中蜜徽,老版本在conf下
cd /usr/local/nexus/etc
vi nexus-default.properties
#記得一定要先配置好M2_HOME路徑,否則容易報錯
#啟動nexus
/apps/nexus-3.7.1-02/bin/nexus start
#查看狀態(tài)
/apps/nexus-3.7.1-02/bin/nexus status
#先說running表示成功票摇,此時輸入http://127.0.0.1:8081先說nexus頁面表示成功
- 安裝nginx
#我一樣采用最簡單的yum安裝
#加入nginx.repo
vim /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
#安裝
yum install nginx
#啟動nginx
systemctl start nginx
#查看nginx狀態(tài)
ps -fe|grep Nginx
#顯示root 4641 1 0 07:56 ? 00:00:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
#配置文件在/etc/nginx/nginx.conf拘鞋,后續(xù)我們會修改此文件做相關(guān)操作
- 組裝調(diào)試
a. 配置jenkins額外的插件
安裝插件
- Maven Integration
- Git plugin
b. 配置全局工具
首先配置maven路徑,使用settings改為我們剛才的maven配置文件地址
c. 新建項目矢门,我選擇自由風(fēng)格盆色,畢竟我通過腳本控制
配置git管理代碼方式
新增認證信息
cd ~/.ssh
#查看服務(wù)器公鑰,拷貝到git服務(wù)器上
cat id_rsa.pub
#查看私鑰祟剔,拷貝到j(luò)enkins中
cat id_rsa
公鑰拷到對應(yīng)阿里云gitlib上
配置jenkins憑證
如上隔躲,拷貝服務(wù)器私鑰到此,點擊添加ok
點擊Pre Steps
此處一會放置構(gòu)建腳本使用物延。
下面宣旱,我習(xí)慣性的把jenkins的工作空間改到了我指定的目錄,
vi /root/.jenkins/config.xml
#找到 <workspaceDir>${JENKINS_HOME}/workspace/${ITEM_FULL_NAME}</workspaceDir> 改成
<workspaceDir>/jenkins/workspace/${ITEM_FULL_NAME}</workspaceDir>
# 創(chuàng)建工作目錄
mkdir /jenkins
然后重啟jenkins
d. 下面配置我們的兩個腳本文件,因為我們模擬的是tomcat和jenkins在一個服務(wù)器上叛薯,所以浑吟,我們的maven先忽略私服的問題,且本地jar包只需install到本地即可耗溜。因此我們有以下兩個腳本
install.sh----本地打包jar使用
#!/bin/sh -
set -x
targetName=${project_name}
export BUILD_ID=deploy_id_${targetName}
workspace=`find /jenkins/ -name ${JOB_NAME}`
if [ -d ${webName} ]
then
echo "workspace is exists ${workspace}" > /dev/null
`cd ${webName}`
mvn clean install -Dmaven.test.skip=true
if [ $? -eq 0 ]
then
echo "本地打包${targetName}完成" > /dev/null
else
echo "本地打包${targetName}失敗" > /dev/null
exit 1
fi
else
echo "workspace is not exists ${workspace}" > /dev/null
fi
~
deplay_war.sh 構(gòu)建項目组力,啟動tomcat服務(wù)
#!/bin/sh -
set -x
targetName=${project_name}
targetWar=
base_tomcat=
port=${port}
tomcat_name="tomcat-${project_name}-${port}"
tomcat_target=
export BUILD_ID=tomcat_deploy_id_${tomcat_name}
workspace=`find /jenkins/ -name ${JOB_NAME}`
echo "$M2_REPO"
if [ -d ${workspace} ]
then
echo "workspace is exists ${workspace} \n" > /dev/null
cd ${workspace}
mvn clean install -Dmaven.test.skip=true
if [ $? -eq 0 ]
then
echo "本地打包${targetName}完成 \n" > /dev/null
else
echo "本地打包${targetName}失敗 \n" > /dev/null
exit 1
fi
else
echo "workspace is not exists ${workspace} \n" > /dev/null
fi
targetWar=`find /apps/mvn-space -name $targetName*.war`
if [ -n "${targetWar}" ]
then
echo "echo ${targetWar} build success, start tomcat "
else
echo "echo ${targetWar} is not exists,部署失敗\n"
exit 1
fi
# # # 清除空間內(nèi)的basetomcat
rm -rf tomcat-base
#撿出tomcat
git clone git@code.aliyun.com:tlgj704/tomcat-base.git
# #
base_tomcat=`find /jenkins/ -name tomcat-base`
if [ -d "${base_tomcat}" ]
then
echo "base_tomcat is ${base_tomcat}"
else
echo "未找到base_tomcat抖拴,部署失敗"
exist 1
fi
#將war拷貝到base-tomcat中
cp ${targetWar} ${base_tomcat}/webapps/${targetName}.war
pushd ${base_tomcat}/conf/
#更新tomcat端口
`sed -i "s/8080/${port}/g" server.xml`
pushd
#查找原有tomcat是否在運行
tomcat_target=`find /apps/ -name ${tomcat_name}`
if [ -d "${tomcat_target}" ]
then
#找到舊tomcat忿项,將會先殺4死舊服務(wù)
echo "${tomcat_name} arealy exists ,will stop ,and remove \n"
#查找原有服務(wù)
oldPid=`lsof -i:${port} | grep java |awk -F " " '{ print $2}' `
#如果原服務(wù)存在,先殺死原服務(wù)
if [ -n "${oldPid}" ]
then
`kill -9 "${oldPid}"`
else
echo "old pid is null\n"
fi
rm -rf ${tomcat_target}
else
#沒找到舊tomcat城舞,將會創(chuàng)建新服務(wù)
echo "${tomcat_name} not exist,create new tomcat\n"
fi
cp -r ${base_tomcat} /apps/${tomcat_name}
#啟動服務(wù)
sh /apps/${tomcat_name}/bin/startup.sh
#刪除臨時tomcat
rm -rf ${base_tomcat}
echo "部署工程${JOB_NAME}完成"
sleep 5
exit 0
將兩個腳本文件我放到了/jenkins/script目錄下,下面配置jenkins使用寞酿。
e . 配置工程
首先家夺,我配置完剛才的父pom工程,記得腳本中的export project_name=wechant-sdk指定當(dāng)前工程jar包名即可
配置完git后伐弹,如上圖拉馋,配置調(diào)用腳本信息即可,點擊構(gòu)建
如上,構(gòu)建完成了煌茴,然后我們配置wab服務(wù)的工程job
注:如果此時你的linux報錯No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
可以參考 https://stackoverflow.com/questions/26313902/maven-error-perhaps-you-are-running-on-a-jre-rather-than-a-jdk 內(nèi)容随闺,大意就是maven打包時需要jdk,你的環(huán)境可能只配了jre蔓腐,需要安裝jdk矩乐,我的操作是如下
#不同版本可能不一樣,我是ubuntu的
apt-get install openjdk-8-jdk
下面說web工程的腳本回论,project_name是war工程名
此時用到的就發(fā)布的腳本散罕,構(gòu)建成功,就表示tomcat啟動完成傀蓉。恭喜我們完成了一大步欧漱。
- 下面我們部署兩個web服務(wù),然后通過nginx進行負載均衡葬燎,實現(xiàn)熱備的方式
來實現(xiàn)不停機發(fā)布
误甚。。谱净。