Jenkins安装,部署Java项目完整流程,一气呵成!
大家好,我是小于哥,在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
不会有人刷到这还想白嫖吧?不会吧?点赞对真的我很重要!要不加个关注?
我是小于哥呀
专注于职场经验和技术开发的分享,希望我的回答能对同学有一些帮助,笔芯~
-
上一篇
◆Jenkins是什么
Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行(这个比较抽象,暂且写上,不做解释)。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。通常与版本管理工具(SCM)、构建工具结合使用。常用的版本控制工具有SVN、GIT,构建工具有Maven、Ant、Gradle。
◆使用Jenkins对Java代码进行打包
Jenkins是一个强大的CI工具,虽然本身使用Java开发,但也能用来做其他语言开发的项目CI。下面讲解如何使用Jenkins创建一个构建任务。
◆1. 登录Jenkins,点击新建任务
之后进入到这个界面,任务名称可以自行设定,但需要全局唯一。输入名称后选择构建一个自由风格的软件项目(有时选择第二个:构建一个maven项目),并点击下方的确定按钮即创建了一个构建任务,然后就会自动跳转到该job的配置页面。
◆2. 配置界面,配置项详解
2.1 General:是构建任务的一些基本配置。名称,描述之类的。
2.2 源码管理:源码管理就是配置你代码的存放位置。
超详细Jenkins构建步骤图解及安装部署教程
-
下一篇
Jenkins使用痛点基于k8s编译的job的Workspace访问改造