1. 程式人生 > >jenkins外掛開發

jenkins外掛開發

為什麼要開發jenkins外掛:

   Jenkins是持續整合執行、管理平臺(與hudson一樣,具體說明可以檢視jenkins的wiki)。jenkins本身提供了一套外掛的管理機制,這些外掛允許可插撥形式存在。jenkins外掛雖然能提供很多種外掛,但還是不能滿足我們持續整合的需要,所以需要定製一些外掛來支撐整個持續整合平臺的執行。

Jenkins執行週期:

Jenkins有自己執行的生命週期,如下:

  1. checkout -check out出原始碼
  2. Pre-build - 預編譯
  3. Build wrapper-準備構建的環境,設定環境變數等
  4. Builder runs -執行構建,比如呼叫calling Ant, Make 等等
  5. Recording - 記錄輸出,如測試結果
  6. Notification - 通知成員

Jenkins提供的擴充套件點:

為了支撐外掛能在各個生命週期中執行,jenkins提供了各種擴充套件點,我們主類必須要extends一個擴充套件點;針對現狀,基本上只需要使用Notifier,與builder這兩個擴充套件點;詳細如下:

Ø  Builder:這個擴充套件點支撐的是構建這個階段需要做的事情,包括prebuild postbuid、構建環境等步驟,例如我們更換slave機器的hosts外掛

Ø  Notifier:包括通知、訊息通知等情況,我們的sendnapolimessage是基於這種擴充套件點來開發的

外掛開發步驟

設定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>
 


設定maven3

   Jenkins為什麼要使用maven3,在使用maven2編譯的時候都不會出現問題,但使用mvn-hpi外掛的時候,會報空指標異常錯誤,查看了wiki,這個bug未解決,但切換到maven3該問題消失,應該是maven2對這個外掛支援不夠完善。

建立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>


匯入eclipse

使用命令 mvn eclipse:eclipse,然後再eclipse中使用import功能匯入,這個不做詳細介紹,相信大家都會使用

專案目錄介紹(重要):

 

說明:src目錄有三個目錄

A、 main管理的是主程式的執行類,如圖1標誌

B、 resource管理的是該外掛需要的配置,例如外掛的區域性配置、全域性配置以及幫助,如圖2標示

C、 webapp管理是該外掛要引用的靜態檔案,例如js、html、img等,如圖2標誌

D、 如果需要做外掛的引數化配置,即需要寫jelly檔案,則必須在resource目錄下建一個與主類包名一樣(層層巢狀)的資料夾,如圖5標誌,main->java主類SendBuildResultBuilder.java在resource中有個層級一模一樣對應的資料夾。



專案檔案介紹(重要):

Ø  執行類:SendBuildResultBuilder.java因為繼承了擴充套件點的類,所以外掛執行的時候首先執行的是這個執行類,如圖4

Ø  Config.jelly:在job中配置該外掛,比如說需要配置外掛的引數,則必須要寫這個檔案了

Ø  Global.jelly:該外掛的全域性配置。

Ø  *html:jelly檔案中屬性的幫助檔案,。點選外掛的“?”即可展示:


執行類說明(包括必須方法):

  主要介紹編寫外掛需要注意的事項以及必須要實現的點

Ø  主類必須要繼承一個擴充套件點。我們一般性會使用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為外掛執行時描述步驟;如圖


這個內部類必須要使用的方法如下:





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:將顯示描述的內容

本地執行

進入workspace,找到外掛的位置,使用mvn hpi:run,然後在瀏覽器中輸入http://localhost:8080,使用mvn hpi:run會下載一個jenkins到你的work目錄。

本地除錯

  使用mvnDebughpi:run。然後在eclipse設定遠端除錯

遠端除錯(linux伺服器端):

Linux容器需要開啟hudson或者jenkins的debug模式,然後和本地除錯一樣

釋出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 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!