1987WEB视界-分享互联网热点话题和事件

您现在的位置是:首页 > WEB开发 > 正文

WEB开发

Jenkins安装,部署Java项目完整流程,一气呵成!

1987web2023-10-06WEB开发54
大家好,我是小于哥,在IT行业有很多技术岗位,可以从事开发、测试、运维,又或者这几年很火的云计算、DBA、安全...但,

大家好,我是小于哥,在IT行业有很多技术岗位,可以从事开发、测试、运维,又或者这几年很火的云计算、DBA、安全...但,这些行业,无论哪个,几乎都离不开Linux,都是以Linux作为入行门槛的。而Jenkins 是一个基于 Java 开发的持续集成工具,能够很简单地作为一个可扩展的自动化服务器,为项目提供持续集成(Continuous Integration)的能力;

这篇文章里,我将手把手带你搭建 Jenkins 局域网服务,并实现一个简单的 Jenkins 项目。希望让你对 Jenkins 有一个基本的印象,知道搭建一个 Jenkins 项目大概的模型是怎么样的,就够了。如果能帮上忙,请务必点赞加关注,这真的对我非常重要。

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

PS:这里推荐一个利用Docker和nginx部署项目的帖子,也给大家参考一下:终端研发部:Docker + Nginx 部署 Vue 项目

准备环境

  • JDK1.8
yuminstalljava-1.8.0-openjdk*-yjava-version

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

  • Git
yuminstallgit

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

  • Maven

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

mkdir/usr/bin/mavenwgethttp://mirror.bit.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gztarxzvfapache-maven-3.6.3-bin.tar.gzcd/usr/bin/maven/apache-maven-3.6.3/conf

将settings.xml仓库更改为阿里云仓库并配置服务器仓库路径,如本地已有Maven配置文件,直接把本地文件上传到服务器并更改仓库路径即可

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

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

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

  • Jenkins

Jenkins安装命令:

wget-O/etc/yum.repos.d/jenkins.repohttp://pkg.jenkins-ci.org/redhat/jenkins.reporpm--importhttps://jenkins-ci.org/redhat/jenkins-ci.org.keyyuminstall-yjenkins

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

servicejenkinsstart启动servicejenkinsrestart重启servicejenkinsstop停止

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

Jenkins配置(Manage Jenkins)

  • System Configuration(系统管理)

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

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

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

注:java地址可通过ls -lrt /etc/alternatives/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

2. 配置执行脚本

BUILD_ID=DONTKILLME获取正在运行的ecs-application程序pidpid=$(ps-aux|grepecs-application|grep-vgrep|gawk{print$2})if[${pid}!=0]thenkill-9$pidficd/var/lib/jenkins/workspace/ecs-applicationmvncleanpackagenohupjava-jar/var/lib/jenkins/workspace/ecs-application/target/ecs-application.jar-Xmx512m-Xms512m-Xss4m&pid=$(ps-aux|grepecs-application|grep-vgrep|gawk{print$2})获取正在运行的ecs-application的pid并判断其字符串长度0为不存在(即构建失败)if[${pid}==0]thenecho"*****  BUILD FAILED  ******"exit1elseecho"*****  BUILD SUCCESS  *****"fi

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

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

3.构建

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

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

xmlversion="1.0"encoding="UTF-8"?><configurationdebug="true"scan="true"><propertyname="PATTERN"value="%-12(%d{yyyy-MM-dd HH:mm:ss.SSS}) %-5level [%thread] %c [%L] : %msg%n"/><propertyname="LOG_PATH"value="/var/lib/jenkins/workspace/ecs-application/logs"/><propertyname="CONSOLE_LOG_PATTERN"value="%date{yyyy-MM-dd HH:mm:ss.SSS} %highlight(%-5level) %([%thread])  %cyan(%logger) : %msg%n"/><appendername="console"class="ch.qos.logback.core.ConsoleAppender"><encoder><charset>UTF-8charset><pattern>${CONSOLE_LOG_PATTERN}pattern>encoder>appender><appendername="info"class="ch.qos.logback.core.rolling.RollingFileAppender"><File>${LOG_PATH}/info.logFile><encoderclass="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><pattern>${PATTERN}pattern><charset>UTF-8charset>encoder><filterclass="ch.qos.logback.classic.filter.ThresholdFilter"><level>INFOlevel>filter><rollingPolicyclass="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><FileNamePattern>${LOG_PATH}/info.%d{yyyy-MM-dd}.log.zipFileNamePattern><MaxHistory>30MaxHistory>rollingPolicy>appender><appendername="error"class="ch.qos.logback.core.rolling.RollingFileAppender"><File>${LOG_PATH}/error.logFile><encoderclass="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><charset>UTF-8charset><pattern>${PATTERN}pattern>encoder><filterclass="ch.qos.logback.classic.filter.ThresholdFilter"><level>ERRORlevel>filter><rollingPolicyclass="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><FileNamePattern>${LOG_PATH}/error.%d{yyyy-MM-dd}.log.zipFileNamePattern><MaxHistory>30MaxHistory>rollingPolicy>appender><springProfilename="dev"><rootlevel="info"><appender-refref="console"/><appender-refref="info"/><appender-refref="error"/>root>springProfile>configuration>

4. 配置Webhook

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

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

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

虽然配置了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。

注:如果没有硬件防护建议开启防火墙只暴露有需要的端口,避免服务器被挖矿(亲身体验),相关指令如下(在本文中的服务器是进行了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的分支也可能需要切换,当项目有一定规模开发人员有一定数量时则必须做好权限的管理了,把分支的整合部署集权在少数人上,避免每次的小更改都需重新部署。以上流程看看就好,因为没必要记住自己吃过多少面包片,了解一些吃法就行。

作者:梦幻黑铁玩家来源:https://toutiao.com/article/6774653293302907395

不会有人刷到这还想白嫖吧?不会吧?点赞对真的我很重要!要不加个关注?

我是小于哥呀

@终端研发部

专注于职场经验和技术开发的分享,希望我的回答能对同学有一些帮助,笔芯~