需求
多台服务器,实现自动化部署,jekins作为部署工具,maven做为编译工具,git作为代码管理仓库,nginx作为负载前置
开始
安装环境
1. 下载jekins
2. 安装jdk
3. 安装git
4. 安装maven私服
5. 安装nginx
6. 组装调试
先说安装jekins和jdk
- 官网https://jenkins.io/download/下载jekins,此处选用war版,各系统通用.
2.上传刚才下载的war包
scp jenkins.war root@172.16.231.134:/jekins
3 .安装jdk,通过官网https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html下载,可以直接下载rpm包如
下载完成后上传到服务器
scp jdk-8u191-linux-x64.rpm root@172.16.231.134:/jekins
安装jdk
#当然一般情况下yum install java就好
rpm -ivh jdk-8u191-linux-x64.rpm
查看java安装目录和版本号
java -verbose
java -version
- 下载tomcat7,暂时jekins支持到此版本,上传到服务器,我是通过vagrant部署的虚拟机,所以实际挂载是同构vagrant管理,只需要把文件拖入挂载点即可
- 本地虚拟机,关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.servic
-
将jekins.war放到tomcat的wepaaps下,启动tomcat,进入项目,此时会让你输入密钥,按其指示的文件就可以找到(如果找不到密码,可以通过find / -name initialAdminPassword命令找到文件,如54bf32b3a8334a86b5842257b75d8e88),进入后,我选择标准安装
image.png
7.下面继续创建账号,可以先不用就用刚才的admin,但密码就是刚才那一长串,然后进入,就可以创建项目了
image.png
-
jekins安装完成后,我们说git服务器,我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环境
vi /etc/profile
#文件中添加
export M2_HOME=/apps/apache-maven-3.3.9
export PATH=$PATH:$M2_HOME/bin
#然后发布
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
#查看状态
/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状态
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,后续我们会修改此文件做相关操作
- 组装调试
a. 配置jenkins额外的插件
image.png
安装插件
- Maven Integration
- Git plugin
b. 配置全局工具
image.png image.png
首先配置maven路径,使用settings改为我们刚才的maven配置文件地址
image.png
c. 新建项目,我选择自由风格,毕竟我通过脚本控制
image.png
配置git管理代码方式
image.png
新增认证信息
image.pngcd ~/.ssh
#查看服务器公钥,拷贝到git服务器上
cat id_rsa.pub
#查看私钥,拷贝到jenkins中
cat id_rsa
公钥拷到对应阿里云gitlib上
image.png
配置jenkins凭证
image.png
如上,拷贝服务器私钥到此,点击添加ok
image.png点击Pre Steps
image.png
此处一会放置构建脚本使用。
下面,我习惯性的把jenkins的工作空间改到了我指定的目录,
vi /root/.jenkins/config.xml
#找到 <workspaceDir>${JENKINS_HOME}/workspace/${ITEM_FULL_NAME}</workspaceDir> 改成
<workspaceDir>/jenkins/workspace/${ITEM_FULL_NAME}</workspaceDir>
# 创建工作目录
mkdir /jenkins
然后重启jenkins
d. 下面配置我们的两个脚本文件,因为我们模拟的是tomcat和jenkins在一个服务器上,所以,我们的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 构建项目,启动tomcat服务
#!/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
# # # 清除空间内的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死旧服务
echo "${tomcat_name} arealy exists ,will stop ,and remove \n"
#查找原有服务
oldPid=`lsof -i:${port} | grep java |awk -F " " '{ print $2}' `
#如果原服务存在,先杀死原服务
if [ -n "${oldPid}" ]
then
`kill -9 "${oldPid}"`
else
echo "old pid is null\n"
fi
rm -rf ${tomcat_target}
else
#没找到旧tomcat,将会创建新服务
echo "${tomcat_name} not exist,create new tomcat\n"
fi
cp -r ${base_tomcat} /apps/${tomcat_name}
#启动服务
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指定当前工程jar包名即可
配置完git后,如上图,配置调用脚本信息即可,点击构建
image.png
如上,构建完成了,然后我们配置wab服务的工程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 内容,大意就是maven打包时需要jdk,你的环境可能只配了jre,需要安装jdk,我的操作是如下
#不同版本可能不一样,我是ubuntu的
apt-get install openjdk-8-jdk
下面说web工程的脚本,project_name是war工程名
此时用到的就发布的脚本,构建成功,就表示tomcat启动完成。恭喜我们完成了一大步。
image.png
- 下面我们部署两个web服务,然后通过nginx进行负载均衡,实现热备的方式
来实现不停机发布
。。。
网友评论