Jenkins插件开发入门

2022-08-23  本文已影响0人  国服最坑开发

参考https://github.com/jenkinsci/agent-server-parameter-plugin

0.环境

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 "一血参数";
        }
    }
}

<?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.小结

上一篇 下一篇

猜你喜欢

热点阅读