介绍
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<? extends Class<?>> 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");
}
}
}
网友评论