Jenkins插件开发

介绍
Jenkins的很多功能都是借助它的插件机制来实现的,类似Eclipse一样,没有安装任何插件Jenkins几乎没有什么可用的功能。

如果你想要使用某个功能,首先应该从插件管理里查找是否有对应的插件。没有找到的话,可以自己来开发一款插件。本文介绍Jenkins插件开发相关的内容,这里给出的代码都可以在我的Github帐号上找到。

hudson.ExtensionPoint

hudson.model.Describable

hudson.model.Descriptor

org.codehaus.cargo.container.deployer.Deployer

Maven
Jenkins提供了三个骨架(archetype)用来快速地创建一个插件工程,分别是:hello-world-plugin、empty-plugin、global-configuration-plugin。我们可以根据实际情况来进行选择。hello-world插件会帮你生成一个具有构建步骤的插件,安装后通过新建一个构建类型的任务就能看大效果。empty-plugin就是一个空白的Jenkins插件工程。

在pom.xml文件中有几个地方要注意:

打包方式必须是hpi,name标签就是该插件的名称(会在插件管理界面显示),url标签就是插件管理界面对应的超链接

运行
要运行你的插件,有几种方式。打包后通过Jenkins插件管理界面来安装,或者执行在工程的根目录下执行命令。

mvn hpi:run

扩展点
构建、流水线、服务

流水线
增加流水线步骤,需要继承类Step,下面是一个没有参数的步骤实现:

package org.jenkinsci.plugins.phoenix.steps;

import hudson.Extension;
import hudson.FilePath;
import hudson.model.TaskListener;
import org.jenkinsci.plugins.workflow.steps.*;
import org.kohsuke.stapler.DataBoundConstructor;

import javax.annotation.Nonnull;
import java.util.Collections;
import java.util.Set;

public class TriggerStep extends Step
{
@DataBoundConstructor
public TriggerStep(){}

@Override
public StepExecution start(StepContext stepContext) throws Exception
{
    return new Execution(stepContext);
}

@Extension
public static final class DescriptorImpl extends StepDescriptor
{

    @Override
    public Set> getRequiredContext()
    {
        return Collections.singleton(FilePath.class);
    }

    @Override
    public String getFunctionName()
    {
        return "suren";
    }
}

public static class Execution extends AbstractStepExecutionImpl
{
    private StepContext stepContext;

    public Execution(StepContext stepContext)
    {
        this.stepContext = stepContext;
    }

    @Override
    public boolean start() throws Exception
    {
        System.out.println("trigger start");
        System.out.println(this.stepContext.hasBody());

        TaskListener listener = this.stepContext.get(TaskListener.class);

        listener.getLogger().println("phoenix logger");
        stepContext.onSuccess("success result");

        return true;
    }

    @Override
    public void stop(@Nonnull Throwable throwable) throws Exception
    {
        System.out.println("trigger stop");
    }
}

}

你可能感兴趣的:(Jenkins插件开发)