首页 > 系统相关 >Windows下安装Jenkins实现java项目的自动化部署(三)

Windows下安装Jenkins实现java项目的自动化部署(三)

时间:2024-09-07 10:53:22浏览次数:11  
标签:java String 自定义 Windows 标签 ant Jenkins property public

Windows下安装Jenkins实现java项目的自动化部署(三)

目录:

摘要:

本文主要内容:ant配置文件中自定义标签的实现

介绍:

首先,介绍一下我整个项目操作的流程,我们这是一个java的springboot项目,JDK的版本的是17。项目使用maven的3.6.3版本去管理依赖,在打包的过程当中的使用到了ant,用ant实现自定义打包的功能。

项目的自动化部署分为几部分:
1.从git上拉去代码到jenkins服务器。
2.利用maven管理依赖,然后用ant进行项目打包。
3.通过SSH将打包完成的可执行jar包发送到目标服务器(windows)。
4.在目标服务器上,通过python程序实现项目文件的自动更新和启动。

1.创建ant自定义标签

在上文中已经贴出了ant打包的配置文件build.xml的全部内容,如果有需要的话,请查看文末上一篇文章的链接。
现在贴出来build.xml中自定义标签的部分:

	<target name="generatePath">
        <taskdef name="pathgenerator" classname="com.lanchuang.tuk.l31.ant.AntPathGenerator" classpath="tukclient_compute31/target/tukCompute31.jar">
        </taskdef>
        <pathgenerator property="folderName" name="pathgen1" buildnum="${buildnumber}" branch="${branch}"/>
        <echo file="package/saas31/ver_path_${branch}.txt" message="${folderName}" />
        <echo file="package/saas31/upgrade.tag" message=" " />
    </target>

    <target name="libMD5">
        <taskdef name="libformd5" classname="com.lanchuang.tuk.l31.ant.antLibPathMD5" classpath="tukclient_compute31/target/tukCompute31.jar">
        </taskdef>
        <libformd5 property="md5Info" name="pathgen2"/>
        <echo file="${maven.project.build.directory}/lib_md5_${md5Info}.txt" message="${md5Info}" />
    </target>

“taskdef”标签:用来定义自定义标签的名称(name),并且指明实现自定义标签功能的类名(classname),以及功能类所在的具体位置(classpath)。这里应该不难理解吧,name就是你自定义标签的名字,如果name=“abc”,那么下边你就可以用<abc /标签了。

注意:这里有个坑,classpath所指向的jar包,一定要在ant构建之前存在。并且这个jar包中一定要包含classname所指定的类的字节码文件。如果你要将classname所指定的类放在当前打包的工程里面,那你一定要先通过maven打出来一个jar包,放到classpath所指向的地方,否则ant构建会报错。这里有点绕,多读几遍。

2.编写自定义标签的功能类
package com.shensu.tuk.l31.ant;

import com.shensu.tuk.common.tukConsts;
import lombok.SneakyThrows;
import org.apache.maven.model.Model;
import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Task;

import java.io.*;
import java.util.Properties;

/**
 * @className: AntPathGenerator
 * @description: 自动拼接文件夹名称的自定义ant任务类
 * @date  2024-08-20
 */
public class AntPathGenerator extends Task {
    private String name;
    private String property;
    private String buildnum;
    private String branch;

    public String getName()                     { return name;               }
    public String getProperty()                 { return property;           }
    public String getBuildnum()                 { return buildnum;           }
    public String getBranch()                   { return branch;             }

    public void setName     (String name)       { this.name     = name;      }
    public void setProperty (String property)   { this.property = property;  }
    public void setBuildnum (String buildnum)   { this.buildnum = buildnum;  }
    public void setBranch   (String branch)     { this.branch   = branch;    }

    /**
     * 自定义任务的执行内容
     * @throws BuildException 构建异常
     */
    @Override
    public void execute() throws BuildException {
        String branchName = getBranch();
        String version    = getVersion();
        String startTag   = tukConsts.sysInfo.startTag;
        String folderName = branchName + "_" + version + "_" + getBuildnum() + "_" + startTag;

        getProject().log("动态文件夹名称为:" + folderName);
        getProject().setNewProperty(property, folderName);                          // 设置自定义标签的property属性,通过property属性来获取标签的返回值
    }

    /**
     * 获取common服务的版本号
     * @return common服务的版本号
     */
    @SneakyThrows
    private String getVersion() {
        String          pomFilePath  = System.getProperty("user.dir") + "/tukclient_compute31/pom.xml";
        try (FileReader fileReader   = new FileReader(pomFilePath)) {
            // 读取POM模型
            MavenXpp3Reader reader       = new MavenXpp3Reader();
            Model            model        = reader.read(fileReader);
            return model
                    .getDependencies()
                    .stream().filter(s -> "com.shensu".equals(s.getGroupId()) && "tukclient_common".equals(s.getArtifactId()))
                    .map(s -> s.getVersion())
                    .findFirst()
                    .orElseThrow(() -> new RuntimeException("未找到需要的包!"));
        }
    }

}

这个类要继承org.apache.tools.ant.Task,然后重写execute()方法,这个类的属性,就对应这自定义标签的属性。如下图所示:
在这里插入图片描述
其中property作为标签pathgenerator的返回值。
其实,到这里,ant标签都可以调用java代码了,还有什么是ant不能实现的呢,在自定义类里实现你想要的功能就行了。

3.总结:
  1. classpath所指向的jar包,一定要在ant构建之前存在。
  2. 这个jar包中一定要包含classname所指定的类的字节码文件

好了,就到这里,退下吧,老衲要沐足了,38号技师请进来一下

上一篇:Windows下安装Jenkins实现java项目的自动化部署(二)

标签:java,String,自定义,Windows,标签,ant,Jenkins,property,public
From: https://blog.csdn.net/songlei69216/article/details/141963722

相关文章

  • 1.Java基础变量和数据类型练习题
    我写的都是键盘录入,运行没结果,不妨按几下试试 1.输出个人简历packagecom.hz.test01;publicclassZuoye{ publicstaticvoidmain(String[]args){ //inti=0;整形 //byteb=0;字节类型 //shorts=0;短整型 //longl=20l;长整型 //floatf=3.33F;单精度......
  • JAVA学习-练习试用Java实现“删除有序数组中的重复项”
    问题:给你一个有序数组nums,请你原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用O(1)额外空间的条件下完成。说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以......
  • java计算机毕业设计考研信息管理(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展,教育领域正经历着前所未有的变革。传统的信息管理方式已难以满足当前高校对高效、精准、个性化信息服务的迫切需求。特别是在......
  • java计算机毕业设计每日一课微党课学习管理平台(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在信息化高速发展的今天,党员教育工作面临着新的机遇与挑战。传统的党员学习模式往往受限于时间、空间及资源,难以适应新时代党员教育高效化、个性化的......
  • java计算机毕业设计姜太公渔具销售系统(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在数字化浪潮的推动下,传统渔具销售行业正经历着前所未有的变革。随着消费者购物习惯向线上迁移,以及个性化、高效化服务需求的日益增长,传统渔具店铺面......
  • JAVA线程池监控以及动态调整线程池
    1背景Java线程池源码分析 里虽然介绍了线程池的核心配置(核心线程数、最大线程数和队列大小)该如何配置,但是实际上业界也没有一个统一的标准。虽然有些所谓的"公式",但是不同的业务场景复杂多变,配置原则也不尽相同。从实际经验来看,IO密集型、CPU密集型应用在线程配置上就比较悬殊,因......
  • 基于ssm+vue电商直播订单管理系统(开题报告+程序+论文+java)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展,电子商务行业迎来了前所未有的繁荣。近年来,电商直播作为一种新兴的购物模式,凭借其直观性、互动性和即时性,迅速成为电商领域......
  • 11.jenkins调整上线的脚本实现tag方式上线
    jenkins调整上线的脚本实现tag方式上线多次打标签重新提交到gitlab远程仓库-基于multi-linestringparameter修改脚本html_deploy_tar.sh#!/usr/bin/bashDate=$(date+%F-%H-%M)web_server="192.168.111.22192.168.111.23"Name=${Date}-${git_version}code_tar(){......
  • 【Java基础】程序填空题
    这个系列主要是对历年的考试题目中容易模糊的点进行汇总,其中很多内容也附带的了解析。这个系列的所有内容应该是全网最详细的内容了,希望可以帮助大家考试顺利。2024-042023-102023-042022-102022-042021-102021-042020-102020-082019-102019-04求三连!!感谢~~......
  • 计算机毕业设计必看必学!! 10192 springboot巡更系统,原创定制程序, java、PHP、python
    摘 要目前,在日常生活中随处可见社区巡更人员对特定的区域进行定期或者不定期的安全巡查管理。包括勤前训示、必到点签到、巡更路线等,各项勤务工作均由巡更员本人在执勤日志本中手工填写,且工作点分散,不利于统一监管,存在信息化手段不足,勤务信息获取、输入复杂,监管信息不能......