之前寫過一篇文章是關於如何開發jenkins插件,主要講述了開發jenkins插件時需要準備的環境,如何新建一個jenkins插件工程,以及對工程項目目錄結構的解析。
本文是jenkins插件開發的進階篇,主要講述如何擴展jenkins插件的功能。如下圖所示:
(1)Job任務側邊欄添加選項
(2)在Job任務中添加新頁面
實現Jenkins插件以上兩個功能,需要關注以下兩個問題。
1、 如何向Job項目主頁面中回傳的數據
2、 如何在Job項目中添加新頁面
廢話少說,直入正題吧。
一、傳遞數據
首先在FireLineBuilder類的同一目錄下新建一個FireLineScanCodeAction類,該類需要實現Action接口。Action接口是擴展jenkins插件的一個基本構建接口,其他還有很多不同功能的子接口,例如:BuildBadgeAction,runAction2,HealthReportingAction,SimpleBuildStep.LastBuildAction,ProminentProjectAction等等。
Action接口中有三個方法必須要實現:getUrlName()、getIconFileName()和getDisplayName()。以上三個方法分別設置該Action的URL地址名稱、顯示圖標地址以及顯示的名稱。
當需要傳遞數據到Job任務頁面中時,我們需要在FireLineScanCodeAction類中添加一個字段,以及get方法。
源代碼如下所示:
package com.qihoo.fireline;
import hudson.model.Action;
public class FireLineScanCodeAction implements Action {
private String name;
public FireLineScanCodeAction(String name) {
this.name = name;
}
public String getName() {
return name;
}
(…)
}
Action的實現類已經準備好了,現在我們需要在job構建時爲實現類添加實例。在FireLineBuilder類中的perform方法中爲本次構建添加FireLineScanCodeAction類的實例。
源代碼如下:
(...)
@Override
public void perform(Run<?, ?> run, FilePath workspace, Launcher launcher, TaskListener listener) throws InterruptedException, IOException {
run.addAction(new FireLineScanCodeAction(" FireLine "));
}
(...)
二、添加新頁面
首先,我們需要回到FireLineScanCodeAction類中爲此Action定義圖標主題名稱和URL地址名稱。
源代碼如下:
@Override
public String getIconFileName() {
return "document.png";
}
@Override
public String getDisplayName() {
return " FireLine Static Analysis ";
}
@Override
public String getUrlName() {
return "fireline";
}
添加好相關信息後,需要在src/main/resources/com/qihoo/fireline/目錄下添加FireLineScanCodeAction/目錄,此目錄與FireLineScanCodeAction類相對應。在src/main/resources/com/qihoo/fireline/FireLineScanCodeAction/目錄下新建index.jelly文件。
文件內容如下:
(…)
<l:layout title="fireline">
<l:main-panel>
<h1>
Name: ${it.name}
</h1>
</l:main-panel>
</l:layout>
此時,頁面已經添加完成。使用命令mvn hpi:run運行,瀏覽器打開頁面http://localhost:8080/jenkins新建一個任務,命名爲firelineTest。到項目配置中添加”ExecuteFireLine”構建選項後保存。返回到firelineTest項目中可看到側邊欄中增加“FireLine Static Analysis”選項。
到此一個有回傳數據的側邊欄選項就添加完成了。
後續還會介紹如何更改爲自定義的圖標,以及如何擴展ProminentProjectAction接口等進階內容。例如火線(FireLine )的jenkins插件的圖標顯示。如下圖:
目前相關Jenkins插件的開發方面的資料比較少,如有紕漏還望指正。