Jenkins安装并部署Java项目完整流程 - Go语言中文社区

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


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

准备环境

Jenkins配置(Manage Jenkins)

Jenkins项目配置(New Item)

1. 配置项目github地址,git Credentials可使用用户名密码或SSH key
在这里插入图片描述
2. 配置执行脚本

BUILD_ID=DONTKILLME
# 获取正在运行的ecs-application程序pid
pid=$(ps -aux|grep ecs-application | grep -v grep| gawk '{print $2}')
if [ ${#pid} != 0 ]
    then kill -9 $pid
fi
cd /var/lib/jenkins/workspace/ecs-application
mvn clean package
nohup 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符号值,如下图:
在这里插入图片描述
如有邮箱发送需求也可在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配置):

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

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/z28126308/article/details/103701628
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢