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.总结:
- classpath所指向的jar包,一定要在ant构建之前存在。
- 这个jar包中一定要包含classname所指定的类的字节码文件
好了,就到这里,退下吧,老衲要沐足了,38号技师请进来一下
上一篇:Windows下安装Jenkins实现java项目的自动化部署(二)
标签:java,String,自定义,Windows,标签,ant,Jenkins,property,public From: https://blog.csdn.net/songlei69216/article/details/141963722