jenkins外掛開發
為什麼要開發jenkins外掛:
Jenkins是持續整合執行、管理平臺(與hudson一樣,具體說明可以檢視jenkins的wiki)。jenkins本身提供了一套外掛的管理機制,這些外掛允許可插撥形式存在。jenkins外掛雖然能提供很多種外掛,但還是不能滿足我們持續整合的需要,所以需要定製一些外掛來支撐整個持續整合平臺的執行。
Jenkins執行週期:
Jenkins有自己執行的生命週期,如下:
- checkout -check out出原始碼
- Pre-build - 預編譯
- Build wrapper-準備構建的環境,設定環境變數等
- Builder runs -執行構建,比如呼叫calling Ant, Make 等等
- Recording - 記錄輸出,如測試結果
- Notification - 通知成員
Jenkins提供的擴充套件點:
為了支撐外掛能在各個生命週期中執行,jenkins提供了各種擴充套件點,我們主類必須要extends一個擴充套件點;針對現狀,基本上只需要使用Notifier,與builder這兩個擴充套件點;詳細如下:
Ø Builder:這個擴充套件點支撐的是構建這個階段需要做的事情,包括prebuild postbuid、構建環境等步驟,例如我們更換slave機器的hosts外掛
Ø Notifier:包括通知、訊息通知等情況,我們的sendnapolimessage是基於這種擴充套件點來開發的
外掛開發步驟
l 設定settings.xml(包括代理)
因為外掛使用的是maven的管理形式,所以需要settings檔案,瞭解maven的同學應該知道settings檔案的作用,這裡不多說。需要在我們的settings.xml中新增如下設定:
<settings> <pluginGroups> <pluginGroup>org.jenkins-ci.tools</pluginGroup> </pluginGroups> <profiles> <!-- Give access to Jenkins plugins--> <profile> <id>jenkins</id> <activation> <activeByDefault>true</activeByDefault> <!-- change thisto false, if you don't like to have it on per default --> </activation> <repositories> <repository> <id>repo.jenkins-ci.org</id> <url>http://repo.jenkins-ci.org/public/</url> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>repo.jenkins-ci.org</id> <url>http://repo.jenkins-ci.org/public/</url> </pluginRepository> </pluginRepositories> </profile> </profiles> <mirrors> <mirror> <id>repo.jenkins-ci.org</id> <url>http://repo.jenkins-ci.org/public/</url> <mirrorOf>m.g.o-public</mirrorOf> </mirror> </mirrors> </settings>
由於下載比較慢,所以我添加了一個proxy,具體設定如下:
<!--使用代理-->
<proxy>
<!-- 唯一標識 -->
<id>my-proxy</id>
<!-- 指這個代理是否被啟用,比如上面提到有多個代理,則會尋找第一個被啟用的代理 -->
<active>true</active>
<!-- 指使用http協議訪問 -->
<protocol>http</protocol>
<!-- 伺服器的IP地址 -->
<host>218.14.227.197</host>
<!-- 訪問的埠號 -->
<port>3128</port>
<!-- 如果伺服器需要驗證,那麼這裡就需要配置使用者名稱和密碼 -->
<username>***</username>
<password>***</password>
<!-- 這裡制定那些域名不需要被代理 -->
<nonProxyHosts>repository.mycom.com|*.google.com</nonProxyHosts>
</proxy>
l 設定maven3
Jenkins為什麼要使用maven3,在使用maven2編譯的時候都不會出現問題,但使用mvn-hpi外掛的時候,會報空指標異常錯誤,查看了wiki,這個bug未解決,但切換到maven3該問題消失,應該是maven2對這個外掛支援不夠完善。
l 建立maven專案(pom檔案介紹)
1、 使用mvn –cpucreate:hpi命令。會自己生成一個hellobuilder示例maven工程。,中間讓你輸入groupid與aid。
2、 在maven中新增我們需要的依賴以及jdk、開發者維護說明。和maven的方式一樣。
<developers>
<developer>
<id>alibaba</id>
<name>Developer gaofeng.qiangf</name>
<email>xxx</email>
</developer>
</developers>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>1.0.1</version>
<configuration>
<!-- your exampleconfiguration here -->
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
<debug>true</debug>
</configuration>
</plugin>
</plugins>
</build>
l 匯入eclipse
使用命令 mvn eclipse:eclipse,然後再eclipse中使用import功能匯入,這個不做詳細介紹,相信大家都會使用
l 專案目錄介紹(重要):
說明:src目錄有三個目錄
A、 main管理的是主程式的執行類,如圖1標誌
B、 resource管理的是該外掛需要的配置,例如外掛的區域性配置、全域性配置以及幫助,如圖2標示
C、 webapp管理是該外掛要引用的靜態檔案,例如js、html、img等,如圖2標誌
D、 如果需要做外掛的引數化配置,即需要寫jelly檔案,則必須在resource目錄下建一個與主類包名一樣(層層巢狀)的資料夾,如圖5標誌,main->java主類SendBuildResultBuilder.java在resource中有個層級一模一樣對應的資料夾。
l 專案檔案介紹(重要):
Ø 執行類:SendBuildResultBuilder.java因為繼承了擴充套件點的類,所以外掛執行的時候首先執行的是這個執行類,如圖4
Ø Config.jelly:在job中配置該外掛,比如說需要配置外掛的引數,則必須要寫這個檔案了
Ø Global.jelly:該外掛的全域性配置。
Ø *html:jelly檔案中屬性的幫助檔案,。點選外掛的“?”即可展示:
l 執行類說明(包括必須方法):
主要介紹編寫外掛需要注意的事項以及必須要實現的點
Ø 主類必須要繼承一個擴充套件點。我們一般性會使用notifier和builder這兩個擴充套件點,如:
Ø 類屬性,類的屬性和config.jelly需要的欄位對應。並實現set和get方法,:
privateIntegercrid//config.jelly配置
Ø 類的建構函式,本類的建構函式必須加@DataBoundConstructor,並且方法引數為類的屬性,需要呼叫super(),使用@DataBoundConstructor的目的是將config.jelly中的引數與本類繫結。如下:
Ø public boolean perform(AbstractBuild build, Launcherlauncher,BuildListener listener),該方法是必須要override的。方法說明和引數說明如下:
Ø public DescriptorImpl getDescriptor():需要得到這個外掛描述資訊。如圖:
Ø public static final class DescriptorImpl extendsBuildStepDescriptor<Publisher>
這個靜態內部類的作用如下:每次儲存全域性配置的時候,jenkins都會呼叫該descriptor物件,並呼叫其onfigure方法,可以實現該方法並提供自己的定製在DescriptorImpl中的configure方法中,可以對全域性配置進行操作,save方法用於將當前descriptor所提供的配置持久化(通過get防範)。為了使slave能正常工作,需要提供配置項的get方法;BuildStepDescriptor為外掛執行時描述步驟;如圖
這個內部類必須要使用的方法如下:
l Jelly說明:
舉例說明一下:
<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:sectiontitle="napoli config">
<f:entry title="napoliServer"field="napoliServer" help="/plugin/sendMqforSecurity/help-napoliServer.html">
<f:textboxdefault="xxxxxxxxx"/>
</f:entry>
說明:
Ø *title:為要顯示的標題,
Ø filed:將呼叫的DescriptorImpl內部類的方法getXXXXX().filed域會將方法去掉get並且將第一個字母小寫
Ø description:將顯示描述的內容。
l 本地執行
進入workspace,找到外掛的位置,使用mvn hpi:run,然後在瀏覽器中輸入http://localhost:8080,使用mvn hpi:run會下載一個jenkins到你的work目錄。
l 本地除錯
使用mvnDebughpi:run。然後在eclipse設定遠端除錯
l 遠端除錯(linux伺服器端):
Linux容器需要開啟hudson或者jenkins的debug模式,然後和本地除錯一樣
l 釋出hpi
Mvn package 會在你的target生成一個hpi檔案,這個檔案就是我們需要的,然後將則個檔案放入jenkins的plugins目錄。重啟即可。
參考文件:
相關推薦
Jenkins外掛開發進階篇之擴充套件外掛功能
之前寫過一篇文章是關於如何開發jenkins外掛,主要講述了開發jenkins外掛時需要準備的環境,如何新建一個jenkins外掛工程,以及對工程專案目錄結構的解析。本文是jenkins外掛開發的進階篇,主要講述如何擴充套件jenkins外掛的功能。如下圖所示:(1)Job任
Jenkins外掛開發(2):開發新外掛
1.修改settings.xml檔案,新增以下內容 <settings><pluginGroups><pluginGroup>org.jenkins-ci.to
Jenkins外掛開發筆記(1):匯入Jenkins原始碼
環境配置 1.下載並配置JDK 2.下載並配置Maven 匯入eclipse專案 1.通過git獲取Jekins原始碼 2.修改${USER_HOME}/.m2/settings.xml檔案,新增以下內容 <settings><plu
淺析 Jenkins 外掛開發
Jenkins 概述 Jenkins,簡單的說就是一個開源的持續整合伺服器,是 Hudson 的繼續。Jenkins 提供了易於使用的持續整合系統,使開發者更專注於業務邏輯的實現。Jenkins 能實時監控整合過程中的問題,提供詳細的日誌資訊,還能以圖表的形式顯示專案構建的情況。 Jenkins 提供
jenkins外掛開發
為什麼要開發jenkins外掛: Jenkins是持續整合執行、管理平臺(與hudson一樣,具體說明可以檢視jenkins的wiki)。jenkins本身提供了一套外掛的管理機制,這些外掛允許可插撥形式存在。jenkins外掛雖然能提供很多種外掛,但還是不能滿足我們
jenkins外掛開發過程中log4j包衝突問題解決過程
最近在做jenkins外掛,關於負載(job分配到節點)均衡問題,使用log4j做日誌,但是,在pom.xml中加入log4j依賴包,配置好log4j.properties,在需要輸出日誌的地方加入程
Jenkins外掛開發入門
Jenkins外掛開發指南 環境變數 為了能開發外掛,開發環境需安裝Maven和JDK 6.0以上版本 配置maven的settings.xml配置檔案 <settings> <pluginGroups> <pluginGroup
Jenkins外掛開發入門資源
1. 一篇不錯的外掛開發入門教程,介紹很詳細。 2. 一篇經典的外掛開發入門教程,英文,28頁,介紹很詳細。大部分團隊成員都有訪問許可權。 《Using Hudson's Plugin Development Framework to Build Your First H
Jenkins 外掛開發之旅:兩天內從 idea 到釋出(上篇)
本文首發於:Jenkins 中文社群 本文介紹了筆者首個 Jenkins 外掛開發的旅程, 包括從產生 idea 開始,然後經過
Jenkins 外掛開發之旅:兩天內從 idea 到釋出(下篇)
本文首發於:Jenkins 中文社群 本文分上下兩篇,上篇介紹了從產生 idea 到外掛開發完成的過程; 下篇將介紹將外掛託管到
火線教你如何開發Jenkins外掛
提到Jenkins,做測試工作的無論是小夥伴、大夥伴還是老司機都是比較熟悉的。網上大部分資料無非三種:Jenkins簡介、如何啟動Jenkins、如何安裝和使用Jenkins外掛。本文作為一個jenkins的進階:教你如何開發一個jenkins外掛。話不多說,讓我們直接切入
CentOS7服務器的搭建記錄(jenkins和開發方向)
centos7 服務 jenkins 搭建 方向 http weibo 記錄 服務器 http://weibo.com/p/1005056376507156http://weibo.com/p/1005056196029141http://weibo.com/p/10050
phonegap3.4外掛開發入門例子
根據官方文件(3.4.0)的外掛開發指南: http://docs.phonegap.com/en/3.4.0/guide_hybrid_plugins_index.md.html#Plugin%20Development%20Guide http://docs.phonegap.com/e
openmediavault 4.1.3 外掛開發
參考網址:https://forum.openmediavault.... 建立應用GUI 建立應用目錄:/var/www/openmediavault/js/omv/module/admin/service/example 建立選單節點: Node.js ``` // require("js/
QGIS3和QGIS2外掛開發差異記錄
qgis2外掛開發的入門級教程 http://www.qgistutorials.com/zh_TW/docs/building_a_python_plugin.html 仿造該教程在qgis3當中進行開發,會碰到許多坑。這裡簡單記錄一下。 1. QGIS3 中,QFileD
chrome外掛開發(二) 入門篇(content script
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
VSCODE外掛開發:使用者輸入輸出
閱讀這篇文章之前,假設你已經具有開發helloworld的外掛的能力。 vscode.window 簡介 vscode.window 負責當前啟用視窗的輸入輸出,比如展示資訊,和使用者輸入等功能都是用vscode.window實現 程式碼輸出提示資訊 簡單的輸出提示資訊 使用vscode.windo
Jenkins外掛之 Docker-Plugin 將slave執行在docker容器中
Jenkins外掛名稱 Docker plugin This plugin integrates Jenkins with Docker This plugin allows slaves to be dynamically provisioned using Docker. 外掛文
VSCode外掛開發全攻略(七)WebView
更多文章請戳VSCode外掛開發全攻略系列目錄導航。 什麼是Webview 大家都知道,整個VSCode編輯器就是一張大的網頁,其實,我們還可以在Visual Studio Code中建立完全自定義的、可以間接和nodejs通訊的特殊網頁(通過一個acquireVsCodeApi特殊方法),這個網頁就叫W
Chrome瀏覽器外掛開發入門
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!