天天看點

自定義開發jenkins插件實作案例

案例:簡單實作監控所有jenkins job,實作當jenkins job執行完成之後進行消息通知

1、案例模版下載下傳

前置條件:jdk環境、maven、網絡暢通(下載下傳依賴)

具體步驟可以照着jenkins官方文檔: https://www.jenkins.io/doc/developer/tutorial/prepare/

jenkins提供了幾套模版案例,我們可以按照需求進行案例下載下傳,節省開發時間。

mvn -U archetype:generate -Dfilter="io.jenkins.archetypes:"
           

 可能出現的問題:執行指令後可能你會發現執行sucess了,沒有文檔中出現的1-5選擇。本地也是空的。解決方法是進入maven的conf/settings.xml中,把遠端倉庫位址改成預設官方maven2遠端倉庫位址:http://repo1.maven.org/maven2 。我之前配置的是aliyun倉庫,出現的情況就是無法下載下傳。

2、環境調試

為了友善開發調試,我下載下傳的是4。這邊有一點好處是,開發調試比較友善。執行 mvn hpi:run ,不需要自己再下載下傳安裝jenkins了,直接執行指令,當運作成功後通路http://localhost:8080/jenkins/就可以通路到調試jenkins平台,另外内容是儲存着的,停止後下次執行建立的job資訊這些都是存在的,不會還原。

3、開發測試

因為是需要監聽job執行完畢後進行消息通知,是以自己需要用到RunListener

自己建一個類,比如BuildStatsListener.java,一定要加@Extension,不然不會被執行到。

@Extension
public class BuildStatsListener extends RunListener<Run<?,?>>{      

因為是監聽job執行完畢,并且發送消息,是以需要複寫onCompleted方法。以下列舉了幾個自帶的jenkins job參數和jenkins job自定義參數的擷取(這裡在job中配置一個自定義參數triggerUser)。

@Override
public void onCompleted(Run<?,?> run, @NonNull TaskListener listener){
    String jobName = run.getParent().getName();
    try {
        //擷取jenkins job配置中的自定義參數
        String triggerUser = run.getEnvironment(listener).get("triggerUser");
    } catch (IOException e) {
        e.printStackTrace();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    int number = run.getNumber();
    String jobUrl = run.getUrl();
    String status = run.getResult().toString();
    ......
    //調用消息通知接口,推送消息
}      

其它功能實作(所有的jenkins類都在這裡,可以自行檢視): https://javadoc.jenkins.io/allclasses-noframe.html