linux操作集-通过jekins+maven+git+nginx实现自动化部署

需求

多台服务器,实现自动化部署,jekins作为部署工具,maven做为编译工具,git作为代码管理仓库,nginx作为负载前置

开始

安装环境
1. 下载jekins
2. 安装jdk
3. 安装git
4. 安装maven私服
5. 安装nginx
6. 组装调试

先说安装jekins和jdk

  1. 官网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包如

image.png

下载完成后上传到服务器

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
  1. 下载tomcat7,暂时jekins支持到此版本,上传到服务器,我是通过vagrant部署的虚拟机,所以实际挂载是同构vagrant管理,只需要把文件拖入挂载点即可
  1. 本地虚拟机,关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.servic
  1. 将jekins.war放到tomcat的wepaaps下,启动tomcat,进入项目,此时会让你输入密钥,按其指示的文件就可以找到(如果找不到密码,可以通过find / -name initialAdminPassword命令找到文件,如54bf32b3a8334a86b5842257b75d8e88),进入后,我选择标准安装


    image.png

7.下面继续创建账号,可以先不用就用刚才的admin,但密码就是刚才那一长串,然后进入,就可以创建项目了


image.png
  1. jekins安装完成后,我们说git服务器,我git采用阿里云的免费版gitlib,地址
    https://code.aliyun.com,可用淘宝账号登录,客户端采用sourcetree,

  2. 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>


  1. 下面安装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页面表示成功
  1. 安装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,后续我们会修改此文件做相关操作
  1. 组装调试

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.png
cd ~/.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包名即可

image.png

配置完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
  1. 下面我们部署两个web服务,然后通过nginx进行负载均衡,实现热备的方式
    来实现不停机发布

。。。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,711评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,079评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,194评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,089评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,197评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,306评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,338评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,119评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,541评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,846评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,014评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,694评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,322评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,026评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,257评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,863评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,895评论 2 351

推荐阅读更多精彩内容