点击上方“方志朋”,选择“设为星标”

回复”666“获取新整理的面试资料

作者:mousycoder(极简小站)

来源地址:segmentfault.com/a/1190000002895521

Jenkins 是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变得可能。现在软件开发追求的是效率以及质量,Jenkins使得自动化成为可能!

亮点

1.采用shell自定义脚本,控制集成部署环境更加方便灵活

2.精简war包中的lib包,常驻tomcat里,减少war包传输时间

3.Jenkins 用户权限管理,不让淘气鬼乱动

4.构建失败发邮件通知相关人员解决

5.自动按天备份war包,Jenkins配置备份以及版本控制化

环境

Ubuntu 14.10 (GNU/Linux 3.16.0-33-generic x86_64)

准备工作

1.Git版本控制服务器

2.Tomcat发布服务器

3.Jenkins服务器(提前安装好Maven,Git,Jdk)

实验时可以在同一台机器配置,但是生产不建议,一台机器挂了,所有服务器都挂了。

废话不多说,直接上干货!

步骤

安装Jenkins

下载Jenkins War包,Jenkins官网 。

启动Jenkins ,将War包放入Tomcat容器里,启动Tomcat。

提示:

此时Jenkins在初始化配置目录,其默认配置目录路径为当前用户下的.jenkins目录,用户也可以自定义目录,Jenkins默认是把配置文件中的数据读到内存中,如果你替换了之前的配置文件,此时需要点击Jenkins的读取设置或者重启Tomcat,如果此时Jenkins页面无响应,则应该查看Tomcat的Catalina.out,多半是由于内存溢出造成(解决方法增大Tomcat调用Java虚拟机时内存大小,本文不做重点),运行Jenkins的服务器配置最好内存1G以上,因为后续会加入一些Jenkins插件,有一些会比较占用内存,导致Jenkins启动不了。

安装Jenkins插件

1.Email Extension Plugin (邮件通知)

2.GIT plugin (可能已经默认安装了)

3.Publish Over SSH (远程Shell)

安装方法:

首页->系统管理->管理插件->可选插件->过滤(搜索插件名)->勾选->点击最下面直接安装即可(需要等待一段时间,详情可以看catalina.out日志变化)

配置Jenkins

配置基本信息

每个选项后都有个问号解释当前含义(此步新手可以略过,默认不填即可)

配置方法:首页->系统管理->系统设置

配置邮件

管理员邮件地址就是邮件的发件人地址(必须和后面邮件配置发件人邮箱一致,否则发不成功邮件)

配置Jdk

JAVA_HOME为Jdk路径 其中Jdk也可以从这里下载安装解压(不推荐,需要填写oracle account)

配置 Maven

配置 Maven Configuration

路径为maven的setting.xml路径(Maven安装略)

配置Maven项目

配置Maven安装目录

配置 Git

其中Path to Git executable为你git执行的路径 一般默认是/usr/bin/git ,如有差异,可以whereis git

配置 Publish over SSH

远程执行shell脚本 采用公钥私钥连接 其中Key里贴的是私钥 远程被管理的主机里贴的是公钥,这2台主机就是相互信任,这样scp等操作就不需要输入用户名和密码。

公钥私钥生成方法:

1.管理主机linux 上 ssh-keygen -t rsa -C "mousycoder@foxmail.com 一路回车 会在/root/.ssh下生成id_rsa(私钥) id_rsa.pub(公钥)。

2.copy 公钥的内容到远程需要通信(被管理)的主机 /root/.ssh/authorized_keys 如无此目录文件则手动创建。

配置完之后可以Test Configuration

配置 Job

步骤:首页->新建->构建一个maven项目(输入item名称)->进入该项目->配置

JOB基本信息

项目源码管理

Repository UR 项目地址 Credentials授权可以是SSH也可以是用户名密码(SSH方法同上)

选择需要构建的分支,我们项目采用git工作流 默认master和develop 平时开发构建develop分支,正式上线构建master并且打标签(前公司git提交标准化相当复杂,分支相当多,这里大家可以根据实际情况来)。

构建触发器

这里我们选择poll轮询每隔1分钟去检测git仓库代码库版本,如果有更改则立刻构建,这里大家可以根据自己团队实际情况去制定,当然还有另外一个插件gitlab-hook可以主动去通知jenkins构建,不过插件所占内存比较大,需要增大tomcat虚拟机内存配置,不然会内存溢出,个人觉得如果一个团队人很多的话,选择poll更适合并且时间间隔设置长一些,避免频繁构建,gitlab-hook 适合人很少甚至一个人的情况。

构建命令

我们采用最简单的clean install 当然这里可以根据各自需求

例如 部署后的产物上传到nexus等,详情参考 Maven命令

clean install deploy:deploy-file -DgroupId=com.weitoo -DartifactId=common -Dversion=0.1-SNAPSHOT -Dpackaging=jar -Dfile=D:\workspace\server-aggregator\common\target\common-0.1-SNAPSHOT.jar -Durl=http://192.168.0.200:8081/nexus/content/repositories/thirdparty/ -DrepositoryId=thirdparty

Add post-build step

构建成功后执行shell命令

该shell的目的是取出war包lib中其他所有lib包 只留下common-0.1-SNAPSHOT.jar 大大减少war包大小(完整war包30M 传包到阿里云服务器需要2分多,精简后2M,10秒多,大大提高构建速度)。

分享我的Shell

mv ~/.jenkins/jobs/server/workspace/server/target/server/WEB-INF/lib/common-0.1-SNAPSHOT.jar ~/.jenkins/jobs/server/workspace/server/target/
rm -rf ~/.jenkins/jobs/server/workspace/server/target/server/WEB-INF/lib/*
rm -rf ~/.jenkins/jobs/server/workspace/server/target/server.war
mv ~/.jenkins/jobs/server/workspace/server/target/common-0.1-SNAPSHOT.jar ~/.jenkins/jobs/server/workspace/server/target/server/WEB-INF/lib/
cd ~/.jenkins/jobs/server/workspace/server/target/server/
zip -r ~/.jenkins/jobs/server/workspace/server/target/server.war * -r
scp /root/.jenkins/jobs/server/workspace/server/target/server.war root@123.56.xxx.xx:/opt/war/

构建成功远程执行shell脚本

exec command 是远程sh的路径

分享我的publish.sh文件

作用是备份每次上传的war包 重启Tomcat。

export JAVA_HOME=/opt/software/jdk1.7.0_25
TOMCAT_HOME="/opt/software/apache-tomcat-7.0.59"
TOMCAT_PORT=80
PROJECT="server"
BAK_DIR=/opt/war/bak/$PROJECT/`date +%Y%m%d`mkdir -p "${BAK_DIR}"
cp /opt/war/"${PROJECT}".war "${BAK_DIR}"/"${PROJECT}"_`date +%Y%m%d%H%M%S`.war#shutdown tomcat
/opt/sh/kill-tomcat-force.sh#publish project
rm -rf "${TOMCAT_HOME}"/webapps/${PROJECT}
cp /opt/war/"${PROJECT}".war "${TOMCAT_HOME}"/webapps/${PROJECT}.war#remove tmp
rm -rf /opt/war/${PROJECT}.war#unzip war
unzip "${TOMCAT_HOME}"/webapps/${PROJECT}.war -d "${TOMCAT_HOME}"/webapps/${PROJECT}rm -rf "${TOMCAT_HOME}"/webapps/${PROJECT}.war##copy lib
cp /opt/lib/* "${TOMCAT_HOME}"/webapps/${PROJECT}/WEB-INF/lib/## start tomcatsleep 3#start tomcat
/opt/software/apache-tomcat-7.0.59/bin/startup.sh
echo "tomcat is starting!"   

分享我的kill-tomcat-force.sh文件

作用是强制关闭tomcat进程

set fileformat=unixpath=/opt/software/apache-tomcat-7.0.59/binps -ef|grep $path|grep tomcat|awk '{print $2}'echo "exec $path/shutdown.sh"
$path/shutdown.shsleep 3s#kill -9 pid
ps -ef|grep $path|grep tomcat|awk '{print $2}'|xargs kill -9#success msg
echo "shutdown success"ps -ef|grep $path|grep java|awk '{print $2}'

分享我的Tomcat精简方法

1.在tomcat_home/lib下新建自定义jar包文件,导入项目所需其他jar包(以后有新增的话,单独再导一次)

2.修改tomcat_home/conf/catalina.properties 搜索=shared.loader加上路径

shared.loader=${catalina.base}/lib/server,${catalina.base}/lib/server/*.jar,${catalina.home}/lib/server,${catalina.home}/lib/server/*.jar

此时Tomcat运行前会加载server下的lib包,如果是多个项目公用一个tomcat的时候,就需要这里放公共的lib包,避免tomcat加载多余的jar包,消耗内存。

构建后邮件设置

邮件主题收件人配置

邮件触发器

局部配置会覆盖掉全局配置,我们之前在全局配置里配置了构建失败邮件触发器,这里是更加精细的配置,

我们选择构建失败Failure-1st触发器,失败以后发邮件给开发者,(这里可以根据实际需要,配置,可以配置多个触发器)开发者的邮件在Recipient List里配置。

Jenkins用户权限管理

步骤:首页-> 系统管理-> Configure Global Security

基本配置:

只有注册的用户才能操作,当然如果是大企业的话,可以采用项目矩阵授权策略,详情可以Google。

Jenkins配置的备份和版本控制

很多情况下稍不注意改变了Jenkins的配置,把平台弄坏了,又想去恢复,这个时候就得把Jenkins的配置文件进行配置或者版本化,只需要把/root/.jenkins/加入git版本库里即可,该目录下包含Jenkins所有信息,包括每次构建历史信息和历史jar包

进行全备份然后覆盖掉该文件夹的时候,重新构建JOB会出现文件夹已经存在等exception,只需要手动删掉这些目录即可,不会丢失数据。(这是Jenkins的一个bug,参考 JENKINS-21330)

热门内容:   

  • 线上服务 CPU 又 100% 啦?一键定位 so easy!

  • GitHub 上有个沙雕开发者,做了款斗图工具后火了...

  • 大白话带你认识Kafka

  • 如何参与一个顶级开源项目    

  • 深入理解 Spring Cloud 核心组件与底层原理

  • 最强 Java Redis 客户端

  • 微服务 2.0 技术栈选型手册

  • 为什么魂斗罗只有128KB却可以实现那么长的剧情?

  • IDEA高级用法:集成JIRA、UML类图插件、SSH、FTP、Database管理...

最近面试BAT,整理一份面试资料《Java面试BAT通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。

获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。

明天见(。・ω・。)ノ♡

「Jenkins+Git+Maven+Shell+Tomcat持续集成」经典教程相关推荐

  1. CI/CD——构建企业级Docker+Jenkins+Git+Harbor流水线自动化持续集成持续发布平台

    构建企业级Docker+Jenkins+Git+Harbor流水线自动化持续集成持续发布平台 CI/CD是什么? 持续集成(CI)/持续交付(CD)的优势 自动化部署流程图 Git Github Gi ...

  2. Jenkins学习总结(7)——搭建Jenkins+Maven+SVN+Tomcat持续集成环境

    一.下载 http://mirrors.jenkins-ci.org/war/latest/ 直接下载war包,我下载的最新的版本2.61,此版本需要jdk1.8环境运行,否则启动报错 cd /usr ...

  3. jenkins+git+maven搭建项目自动化持续集成

    2019独角兽企业重金招聘Python工程师标准>>> 1.概要说明 为了开发人员和测试人员的解耦,让开发和测试流程更加便捷,所以采用jenkins+git+maven这套可持续性集 ...

  4. Jenkins + Git + Maven + tomcat集成环境搭建

    折腾了好几天,终于把Jenkins + Git + Maven + tomcat集成环境搭建起来了,最终主要实现"自动构建.部署"web应用. 1.安装环境 操作系统:Centos ...

  5. jenkins 安装及配置部署操作 (jenkins+svn+tomcat and jenkins+git+maven+tomcat)

    jenkins 安装及配置部署操作 jenkins+svn+tomcat and jenkins+git+maven+tomcat jenkins rpm软件包下载地址: https://pkg.je ...

  6. Jenkins+Git+Gitlab+Ansible实现持续集成自动化部署动态网站(二)--技术流ken

    项目前言 在上一篇博客<Jenkins+Git+Gitlab+Ansible实现持续化集成一键部署静态网站(一)--技术流ken>中已经详细讲解了如何使用这四个工具来持续集成自动化部署一个 ...

  7. 使用Jenkins来实现内部的持续集成流程(下)

    目录 配置项目构建 添加任务 添加源代码地址和登录凭据 添加构建触发器  TFS添加WebHook  添加构建步骤 后端UI  API端  配置项目构建1添加任务 2添加源代码地址和登录凭据 添加源代 ...

  8. 末学者笔记--Jenkins+Git+Gitlab+Ansible实现持续集成自动化部署静态网站

    Jenkins+Git+Gitlab+Ansible实现持续集成自动化部署静态网站 一.Jinkens安装                                                ...

  9. Jenkins+Git+Maven持续集成经典教程

    作者:mousycoder(极简小站) segmentfault.com/a/1190000002895521 Jenkins 是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变得 ...

最新文章

  1. 并发编程中的大坑:你的直觉有序性问题
  2. DeepFake 新高度:一阶运动模型让“万物皆可动”
  3. android 换肤之style,android换肤总结
  4. python语言及其应用-Python语言及其应用.PDF
  5. 【HDU 2255】奔小康赚大钱 (最佳二分匹配KM算法)
  6. 在线考试新入.html,JSP+SSM+MySql实现的在线考试系统毕设指导思路模板
  7. php get 分页,PHP_codeigniter实现get分页的方法,本文实例讲述了codeigniter实现ge - phpStudy...
  8. 消息中间件学习总结(6)——RocketMQ之RocketMQ大数据畅想
  9. 将Sublime Text 添加到鼠标右键菜单的教程方法
  10. ORACLE查询保留字
  11. Atitit opencv3.0  3.1 3.2 新特性attilax总结
  12. (转)Matlab映射表数据结构(containers.Map)
  13. Java后台开发学习进阶路线
  14. 机器学习-降维方法-有监督学习:LDA算法(线性判别分析)【流程:①类内散度矩阵Sw->②类间散度矩阵Sb->计算Sw^-1Sb的特征值、特征向量W->得到投影矩阵W->将样本X通过W投影进行降维】
  15. Visual Studio Code的下载与安装
  16. 使用谷歌地图拾取异国坐标
  17. linux字体不识别不了怎么办,Docker容器不识别宋体等字体的解决方案
  18. Proxmox——虚拟机使用
  19. linux原生桌面,亲手打造自己的Linux桌面环境
  20. 配置 centos yum源

热门文章

  1. $.ajax居然触发popstate事件?
  2. 读书笔记--C陷阱与缺陷(三)
  3. SQLMap安装步骤
  4. Linux下Debug模式启动Tomcat进行远程调试
  5. libmemcached 1.0.11 发布
  6. 重读TCP协议(3)
  7. Task04:青少年软件编程(Python)等级考试模拟卷(一级)
  8. Matlab编程与数据类型 -- 出错处理语句try/catch/end
  9. Matlab与线性代数--矩阵的正交分解
  10. 【MATLAB】符号数学计算(三):符号的精度计算