您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > JAVA

Jenkins安装并部署Java项目完整流程

时间:2019-12-27 09:41:12  来源:  作者:

介绍centos系统上安装Jenkins部署Spring Boot项目流程,并通过github Webhooks通知Jenkins代码更新信息并自动重新部署项目。

准备环境

  • JDK1.8
  yum install JAVA-1.8.0-openjdk* -y  java -version

能显示版本即安装成功,无需再配置环境

  • Maven

个人的Maven安装目录是/usr/bin/maven

mkdir /usr/bin/mavenwget http://mirror.bit.edu.cn/Apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gztar xzvf apache-maven-3.6.3-bin.tar.gzcd /usr/bin/maven/apache-maven-3.6.3/conf

将settings.xml仓库更改为阿里云仓库并配置服务器仓库路径,如本地已有Maven配置文件,直接把本地文件上传到服务器并更改仓库路径即可(推荐一款有理想的国产SSH工具-FinalShell,可直接拖到文件到指定文件夹)

Jenkins安装并部署Java项目完整流程

 

配置Maven环境变量(vi /etc/profile):

export M2_HOME=/usr/bin/maven/apache-maven-3.6.3PATH=$M2_HOME/bin:$PATH

保存退出,source /etc/profile重载环境变量,mvn -v能正确显示maven版本即配置成功

Jenkins安装并部署Java项目完整流程

 

  • Jenkins

Jenkins安装命令:

wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.reporpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.keyyum install -y jenkins

修改配置文件vi /etc/sysconfig/jenkins并将端口号配置为8500:JENKINS_PORT=“8500”
jenkins启动相关指令:

service jenkins start #启动service jenkins restart #重启service jenkins stop#停止

初始密码在/var/lib/jenkins/secrets/initialAdminPassword文件中,访问http://ip:8500/安装推荐插件。

Jenkins配置(Manage Jenkins)

  • System Configuration(系统管理)

配置maven、git、email并Save,其中maven与git配置为必须,maven配置用于jenkins找到mvn指令位置,git用于jenkins从仓库拉取文件:

Jenkins安装并部署Java项目完整流程

 

  • Global Tool Configuration(全局工具管理)

配置全局工具路径,主要配置JDK、Git、Maven并Save:

Jenkins安装并部署Java项目完整流程

 

注:java地址可通过ls -lrt /etc/alternatives/java查找,截取jre之前的路径。

Jenkins安装并部署Java项目完整流程

 

  • Manage Plugins(插件管理)

如果需要构建Jenkins的Maven项目则需安装Maven Integration插件,但使用jenkins maven插件创建的项目执行mvn install后就会显示sucess,如需再执行指令设置构建unstable的话使用Freestyle项目也可。由于Freestyle的把控性更强且更自由,配置了maven环境后也可通过maven指令构建而不需再按照Jenkins Maven Integration插件,所以该文着重介绍Freestyle且更推荐使用Freestyle构建。

Jenkins项目配置(New Item)

1. 配置项目github地址,git Credentials可使用用户名密码或SSH key

Jenkins安装并部署Java项目完整流程

 

2. 配置执行脚本

BUILD_ID=DONTKILLME# 获取正在运行的ecs-Application程序pidpid=$(ps -aux|grep ecs-application | grep -v grep| gawk '{print $2}')if [ ${#pid} != 0 ]    then kill -9 $pidficd /var/lib/jenkins/workspace/ecs-applicationmvn clean packagenohup java -jar /var/lib/jenkins/workspace/ecs-application/target/ecs-application.jar -Xmx512m -Xms512m -Xss4m &pid=$(ps -aux|grep ecs-application | grep -v grep| gawk '{print $2}')# 获取正在运行的ecs-application的pid并判断其字符串长度,0为不存在(即构建失败)if [ ${#pid} == 0 ]    then     echo "*****  BUILD FAILED  ******"     exit 1     else     echo "*****  BUILD SUCCESS  *****"fi

需要注意的是Jenkins执行脚本中若不添加BUILD_ID=DONTKILLME的话则会在执行完脚本后会把脚本中的程序关闭。jenkins创建的所有项目都可以在/var/lib/jenkins/workspace中找到。为了避免程序运行失败结果却显示成功,当执行程序后pid不存在则exit 1,且需设置build unstable符号值,如下图:

Jenkins安装并部署Java项目完整流程

 

如有邮箱发送需求也可在Post-build Actions设置Email Notification

3.构建

Jenkins安装并部署Java项目完整流程

 

直接在项目Build Now或在jenkins主页面中点击项目最右侧符号即可。通过项目Workspace可查看/var/lib/jenkins/workspace当前项目中的所有文件,将日志文件配置为该workspace目录下文件时即可查看当前程序的运行日志,如在jenkins查看当前项目日志/var/lib/jenkins/workspace/ecs-application/logs/info.log

Jenkins安装并部署Java项目完整流程

 

附日志配置文件logback-spring.xml(为了出错更容易定位添加error.log配置):

<?xml version="1.0" encoding="UTF-8"?><configuration debug="true" scan="true">    <!-- 文件输出格式 -->    <property name="PATTERN"              value="%-12(%d{yyyy-MM-dd HH:mm:ss.SSS}) %-5level [%thread] %c [%L] : %msg%n"/>    <!-- log文件路径 -->    <property name="LOG_PATH" value="/var/lib/jenkins/workspace/ecs-application/logs"/>    <!--彩色日志定义-->    <property name="CONSOLE_LOG_PATTERN"              value="%date{yyyy-MM-dd HH:mm:ss.SSS} %highlight(%-5level) %([%thread])  %cyan(%logger) : %msg%n"/>    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">        <encoder>            <charset>UTF-8</charset>            <pattern>${CONSOLE_LOG_PATTERN}</pattern>        </encoder>    </appender>    <appender name="info" class="ch.qos.logback.core.rolling.RollingFileAppender">        <File>${LOG_PATH}/info.log</File>        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->            <pattern>${PATTERN}</pattern>            <charset>UTF-8</charset>        </encoder>        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">            <level>INFO</level>        </filter>        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">            <FileNamePattern>${LOG_PATH}/info.%d{yyyy-MM-dd}.log.zip</FileNamePattern>            <MaxHistory>30</MaxHistory>        </rollingPolicy>    </appender>    <appender name="error" class="ch.qos.logback.core.rolling.RollingFileAppender">        <File>${LOG_PATH}/error.log</File>        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">            <charset>UTF-8</charset>            <pattern>${PATTERN}</pattern>        </encoder>        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">            <level>ERROR</level>        </filter>        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">            <FileNamePattern>${LOG_PATH}/error.%d{yyyy-MM-dd}.log.zip</FileNamePattern>            <MaxHistory>30</MaxHistory>        </rollingPolicy>    </appender>    <springProfile name="dev">        <root level="info">            <appender-ref ref="console"/>            <appender-ref ref="info"/>            <appender-ref ref="error"/>        </root>    </springProfile></configuration>

4. 配置Webhook

每次推完代码之后都要上Jenkins重新点击启动项目,这肯定是很麻烦的,但可以通过安装Webhook插件,让github或gitlab接收到代码更新后把该信息发送到服务器jenkins上,让jenkins自动去拉代码重新部署项目。在Jenkins插件管理安装Generic Webhook Trigger Plugin插件:

Jenkins安装并部署Java项目完整流程

 

当然了,只装不看就没有用了,点击插件看一下了解一下用法:

Jenkins安装并部署Java项目完整流程

 

该Webhook插件的一个规则是接收所有HTTP请求,接收地址为JenkinsURL/generic-webhook-trigger/invoke 。既然有接收地址自然有发送地址,github配置Webhook入口在项目的Settings菜单下,配置如下:

Jenkins安装并部署Java项目完整流程

 

虽然配置了github Webhooks,但Jenkins接收到github的消息后仍不知要更新哪个项目,因为可能jenkins下有多个同一github地址下的项目,此时就需要对Jenkins的项目进行Webhook配置了。上图中的URL地址栏添加了token参数,该参数是根据Jenkins的Webhook插件规则配置的。Jenkins安装Webhook插件后Jenkins项目Configure中的Build Triggers中会出现Generic Webhook Trigger选项,勾选该选项Jenkins即可监听到该项目对应的github仓库代码更新后自动重新部署项目。为了提高安全性可以在地址栏参数或header添加Token。

Jenkins安装并部署Java项目完整流程

 

注:如果没有硬件防护建议开启防火墙只暴露有需要的端口,避免服务器被挖矿(亲身体验),相关指令如下(在本文中的服务器是进行了8500端口的开放):
重启:firewall-cmd --reload
永久开放端口:firewall-cmd --zone=public --add-port={port}/tcp --permanent
永久关闭端口:firewall-cmd --remove-port={port}/tcp --permanent
查看开放端口:firewall-cmd --list-ports
关闭防火墙命令:systemctl stop firewalld.service
开启防火墙:systemctl start firewalld.service
更多指令可通过tab键或firewall-cmd -h查看

结语

在实际生产中如果项目只有几个人负责没有更多的要求的话按以上流程就基本可以完成项目的自动部署流程了(曾经工作过的小公司大致流程跟以上差不多,开发公众号时自己一个负责也就没有太多的Jenkins鉴权管理),当然git的分支也可能需要切换,当项目有一定规模开发人员有一定数量时则必须做好权限的管理了,把分支的整合部署集权在少数人少,避免每次的小更改都需重新部署。以上流程看看就好,因为没必要记住自己吃过多少面包片,了解一些吃法就行。



Tags:Jenkins   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
第一步、部署环境1、安装nodeJs1、下载nodewget https://nodejs.org/dist/v16.8.0/node-v16.8.0-linux-x64.tar.xz2、解压压缩包xz -d node-v8.11.2-linux-x64.tar.xztar -x...【详细内容】
2021-09-06  Tags: Jenkins  点击:(70)  评论:(0)  加入收藏
前提条件:已成功安装JDK。官网下载地址: https://www.jenkins.io/download 二、安装1、jenkins安装包安装(1)直接双击运行已经下载好的jenkins.msi安装包 (2)点击"运行" (3)点击"Nex...【详细内容】
2021-06-23  Tags: Jenkins  点击:(116)  评论:(0)  加入收藏
目前主流的开发采用的是devops模式(开发、测试、运维一体化)。随着互联网安全要求越来越高,对网络安全就越发变得重要了。传统的测试工程师主要是对功能、接口、性能方面做测试...【详细内容】
2021-06-23  Tags: Jenkins  点击:(113)  评论:(0)  加入收藏
Jenkins 是目前最常用的持续集成工具,拥有近50%的市场份额,他还是很多技术团队的第一个使用的自动化工具。由此可见他的重要性!这份Jenkins宝典从入门介绍到结合Docker+SpringC...【详细内容】
2021-06-09  Tags: Jenkins  点击:(145)  评论:(0)  加入收藏
在当今互联网行业乃至一些大厂,大部分公司都采用敏捷项目管理模式来管理项目,在敏捷十二条宣言中有一条是这样说:“我们的最高目标是,通过尽早和持续地交付有价值的软件来满足...【详细内容】
2021-04-30  Tags: Jenkins  点击:(167)  评论:(0)  加入收藏
以下是详细的步骤1. JDK \Jmeter \ Ant安装:1.1.安装JDK:双击jdk-7u80-windows-x64.exe安装,默认安装到C:\ProgramFiles\Java目录1.2.安装Jmeter:在我的电脑&mdash;E盘(建议与...【详细内容】
2021-04-16  Tags: Jenkins  点击:(224)  评论:(0)  加入收藏
在互联网时代,对于每一家公司,软件开发和发布的重要性不言而喻,目前已经形成一套标准的流程,最重要的组成部分就是持续集成(CI)及持续部署、交付(CD)。本文基于Jenkins+Docker+Git实...【详细内容】
2021-03-19  Tags: Jenkins  点击:(260)  评论:(0)  加入收藏
在用python做自动化测试时,我们写好代码,然后需要执行才能得到测试报告,这时我们可以通过 Jenkins 来进一步完成自动化工作。借助Jenkins,我们可以结合 Git/SVN 自动拉取代码,通...【详细内容】
2021-02-19  Tags: Jenkins  点击:(230)  评论:(0)  加入收藏
Jenkins是一款开源的CI&CD软件, 提供超过1000个插件来支持构建、部署、自动化, 满足任何项目的需要。JenkinsJenkins基于Java环境,可以部署在windows/Mac OS/linux上,通过其网页...【详细内容】
2020-11-06  Tags: Jenkins  点击:(611)  评论:(0)  加入收藏
相信vue很多人都已经很熟悉了,利用脚手架很容易搭建一个vue项目 但项目多了以后每次部署测试环境就相当麻烦,还容易出错 所以趁这两天不忙,研究一下jenkins,也总算是入门了 jen...【详细内容】
2020-10-17  Tags: Jenkins  点击:(92)  评论:(0)  加入收藏
▌简易百科推荐
面向对象的特征之一封装 面向对象的特征之二继承 方法重写(override/overWrite) 方法的重载(overload)和重写(override)的区别: 面向对象特征之三:多态 Instanceof关键字...【详细内容】
2021-12-28  顶顶架构师    Tags:面向对象   点击:(2)  评论:(0)  加入收藏
一、Redis使用过程中一些小的注意点1、不要把Redis当成数据库来使用二、Arrays.asList常见失误需求:把数组转成list集合去处理。方法:Arrays.asList 或者 Java8的stream流式处...【详细内容】
2021-12-27  CF07    Tags:Java   点击:(3)  评论:(0)  加入收藏
文章目录 如何理解面向对象编程? JDK 和 JRE 有什么区别? 如何理解Java中封装,继承、多态特性? 如何理解Java中的字节码对象? 你是如何理解Java中的泛型的? 说说泛型应用...【详细内容】
2021-12-24  Java架构师之路    Tags:JAVA   点击:(5)  评论:(0)  加入收藏
大家好!我是老码农,一个喜欢技术、爱分享的同学,从今天开始和大家持续分享JVM调优方面的经验。JVM调优是个大话题,涉及的知识点很庞大 Java内存模型 垃圾回收机制 各种工具使用 ...【详细内容】
2021-12-23  小码匠和老码农    Tags:JVM调优   点击:(11)  评论:(0)  加入收藏
前言JDBC访问Postgresql的jsonb类型字段当然可以使用Postgresql jdbc驱动中提供的PGobject,但是这样在需要兼容多种数据库的系统开发中显得不那么通用,需要特殊处理。本文介绍...【详细内容】
2021-12-23  dingle    Tags:JDBC   点击:(13)  评论:(0)  加入收藏
Java与Lua相互调用案例比较少,因此项目使用需要做详细的性能测试,本内容只做粗略测试。目前已完成初版Lua-Java调用框架开发,后期有时间准备把框架进行抽象,并开源出来,感兴趣的...【详细内容】
2021-12-23  JAVA小白    Tags:Java   点击:(11)  评论:(0)  加入收藏
Java从版本5开始,在 java.util.concurrent.locks包内给我们提供了除了synchronized关键字以外的几个新的锁功能的实现,ReentrantLock就是其中的一个。但是这并不意味着我们可...【详细内容】
2021-12-17  小西学JAVA    Tags:JAVA并发   点击:(11)  评论:(0)  加入收藏
一、概述final是Java关键字中最常见之一,表示“最终的,不可更改”之意,在Java中也正是这个意思。有final修饰的内容,就会变得与众不同,它们会变成终极存在,其内容成为固定的存在。...【详细内容】
2021-12-15  唯一浩哥    Tags:Java基础   点击:(17)  评论:(0)  加入收藏
1、问题描述关于java中的日志管理logback,去年写过关于logback介绍的文章,这次项目中又优化了下,记录下,希望能帮到需要的朋友。2、解决方案这次其实是碰到了一个问题,一般的情况...【详细内容】
2021-12-15  软件老王    Tags:logback   点击:(19)  评论:(0)  加入收藏
本篇文章我们以AtomicInteger为例子,主要讲解下CAS(Compare And Swap)功能是如何在AtomicInteger中使用的,以及提供CAS功能的Unsafe对象。我们先从一个例子开始吧。假设现在我们...【详细内容】
2021-12-14  小西学JAVA    Tags:JAVA   点击:(22)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条