Jenkins插件开发入门
2022-08-23 本文已影响0人
国服最坑开发
参考https://github.com/jenkinsci/agent-server-parameter-plugin
0.环境
- mvn: 3.8.6
-
jdk: 11
idea配置
1.创建工程
echo '<settings/>' > /tmp/empty.xml ✘ INT !1/1 10:41:03
mvn -s /tmp/empty.xml -U archetype:generate -Dfilter=io.jenkins.archetypes:
选择empty-plugin
, 创建空项目
2.下载依赖:
mvn verify
提示Build Success后
可以执行启动命令:
mvn hpi:run
# 或指定端口
mvn -s ~/.m2/empty.xml hpi:run -Djetty.port=9090
成功后, 打开本地调试页: http://localhost:8080/jenkins/
用IDE打开工程, 清理一下目录, 在 java 和resources下分别创建目录me

3. 入参输入界面开发

按图创建相应文件和目录,
- 界面定义类:
package me;
import edu.umd.cs.findbugs.annotations.NonNull;
import hudson.Extension;
import hudson.model.ParameterValue;
import hudson.model.SimpleParameterDefinition;
import net.sf.json.JSONObject;
import org.kohsuke.stapler.StaplerRequest;
import java.util.UUID;
public class BloodParamDefinition extends SimpleParameterDefinition implements Comparable<BloodParamDefinition> {
// 用于区分参数实例
private final UUID uuid;
@DataBoundConstructor
protected BloodParamDefinition(@NonNull String name) {
super(name);
this.uuid = UUID.randomUUID();
}
@Override
public ParameterValue createValue(String value) {
return null;
}
@Override
public ParameterValue createValue(StaplerRequest req, JSONObject jo) {
return null;
}
@Override
public int compareTo(BloodParamDefinition o) {
return o.getUuid().equals(this.uuid) ? 0 : -1;
}
public UUID getUuid() {
return uuid;
}
@Extension
public static final class BloodDescriptor extends ParameterDescriptor {
@Override
public String getDisplayName() {
return "一血参数";
}
}
}
- 界面UI
<?jelly escape-by-default='true'?>
<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define" xmlns:l="/lib/layout"
xmlns:t="/lib/hudson" xmlns:f="/lib/form">
<f:entry title="${%name}" field="name">
<f:textbox/>
</f:entry>
</j:jelly>
- 字符串
name=参数名称
启动: mvn -s ~/.m2/empty.xml hpi:run -Djetty.port=9090
访问: http://localhost:9090/jenkins
创建一个freetype的JOB后, 选择参数


输入参数名称后, 可以正在保存.
但是此时, 如果点击 "Build with Parameters", 会出现一个大大的"Oops!"
接下来进入, 参数输入界面开发:
4.输入框界面显示开发
添加 输入框 文件:

文本内容:
<?jelly escape-by-default='true'?>
<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define"
xmlns:l="/lib/layout" xmlns:t="/lib/hudson" xmlns:f="/lib/form"
xmlns:i="jelly:fmt" xmlns:p="/lib/hudson/project">
<f:entry title="${it.name}" >
<div name="parameter" style="white-space: nowrap">
<input type="hidden" name="name" value="${it.name}"/>
<f:textbox field="value"/>
</div>
</f:entry>
</j:jelly>
这里有个细节: 一定要包一层 <div name="parameter"
, 是为了执行Build
的时候, 可以正确提交参数.
重新执行, 可以正常打开界面:

到此, 最简配的自定义参数插件.
5.小结
- Java类和Resource 文件夹要对应
- Java类中包含 Descriptor 实现类
- config.jelly用于添加配置参数
- index.jelly 用于编译时输入参数
- 调试时, 查看 http 参数