美文网首页
Jenkins插件开发

Jenkins插件开发

作者: 猴子精h | 来源:发表于2021-05-13 11:59 被阅读0次

使用脚手架创建插件项目

安装 JDK Maven 并配置 Maven 仓库 settings.xml

<settings>
  <pluginGroups>
    <pluginGroup>org.jenkins-ci.tools</pluginGroup> 
  </pluginGroups>

  <profiles>
    <profile>
      <id>jenkins</id>
      <activation>
        <activeByDefault>true</activeByDefault> 
      </activation>
      <repositories> 
        <repository>
          <id>repo.jenkins-ci.org</id>
          <url>https://repo.jenkins-ci.org/public/</url>
        </repository>
      </repositories>
      <pluginRepositories>
        <pluginRepository>
          <id>repo.jenkins-ci.org</id>
          <url>https://repo.jenkins-ci.org/public/</url>
        </pluginRepository>
      </pluginRepositories>
    </profile>
  </profiles>
</settings>

使用脚手架创建项目

mvn archetype:generate -B -DarchetypeGroupId=io.jenkins.archetypes -DarchetypeArtifactId=hello-world-plugin -DhostOnJenkinsGitHub=true -DarchetypeVersion=1.7 -DartifactId=hello-world-plugin

运行,注意需要在 pipeline 下测试插件,jenkins 需要先安装 pipeline 插件

mvn hpi:run
image.png

打包插件并安装
mvn package 生成一个 hpi 文件,直接在 jenkins 后台上传即可。

开发

Jenkins 插件开发就是对于一系列的「扩展点」进行扩展实现自定义的功能。

扩展点 ExtensitionPoint

扩展点是 Jenkins 系统某个方面的接口或抽象类。这些接口定义了需要实现的方法,而 Jenkins 插件就需要实现这些方法,比如我写的插件需要实现 Builder 这个扩展点:

public class MavenCheck extends Builder {}

Descriptor 静态内部类

Descriptor 静态内部类是一个类的描述者,用于指明这是一个扩展点的实现,Jenkins 通过这个描述者才能知道我们写的插件。每一个描述者静态类都需要呗 @Extension 注解,Jenkins 内部会扫描 @Extension 注解来获取注册了哪些插件:

@Extension
public static final class DescriptorImpl extends BuildStepDescriptor<Builder> {
    public DescriptorImpl() {
        load();
    }

    // 表示这个 Builder 在 Jenkins Project 是否可用
    @Override
    public boolean isApplicable(Class<? extends AbstractProject> aClass) {
        return true;
    }

    // 用于在 Jenkins 页面上的显示
    @Override
    public String getDisplayName() {
        return "Maven SNAPSHOT Check";
    }
}

数据的绑定

@DataBoundConstructor 注解作用于构造器上,用于在页面上配置的插件参数

    ...
    @DataBoundConstructor
    public MavenCheck(boolean check) {
        this.check = check;
    }

Jenkins 插件的页面使用 jelly, 一个正常的插件可以分成 3 个 jelly 文件:

  • index.jelly: 代表此插件的概要描述,可以在插件列表中看到;
  • global.jelly: 代表此插件的全局配置;
  • config.jelly: 代表此插件在单个 job 中的配置;

请注意 config.jelly 文件的位置,它的文件名需要与插件的类名一致

image.png

config.jelly 文件示例:

<?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="check" field="check">
    <f:checkbox />
  </f:entry>
</j:jelly>

参考

相关文章

网友评论

      本文标题:Jenkins插件开发

      本文链接:https://www.haomeiwen.com/subject/oaitjltx.html