1. 程式人生 > >火線教你如何開發Jenkins外掛

火線教你如何開發Jenkins外掛

提到Jenkins,做測試工作的無論是小夥伴、大夥伴還是老司機都是比較熟悉的。網上大部分資料無非三種:Jenkins簡介、如何啟動Jenkins、如何安裝和使用Jenkins外掛。本文作為一個jenkins的進階:教你如何開發一個jenkins外掛。話不多說,讓我們直接切入正題。如本文題目所示,我會以火線為例,逐步講述一個jenkins外掛從無到有的整個過程。有些細心的小夥伴可能就疑惑了,jenkins我聽說過,“火線”又是個啥呢?由於本文主題是Jenkins外掛,對於火線的介紹請戳官網介紹。http://magic.360.cn/ 也許你會有意外收穫。

1、  工欲善其事,必先利其器。

巧婦還難為無米之炊呢,更何況我們這些程式猿呢?來,先把今天的“器”備齊了以便我們之後的衝鋒上陣,勇猛殺敵。

1)環境:Maven3、JDK6.0以上版本、Eclipse(選擇自己使用的IDE就可以)

2)新增Maven配置,請將如下配置內容新增到您的*\.m2\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>

      </activation>

      <repositories>

        <repository>

          <id>repo.jenkins-ci.org</id>

          <url>https://repo.jenkins-ci.org/public/</url>

        </repository>

      </repositories>

      <pluginRepositories>

        <pluginRepository>

          <id>repo.jenkins-ci.org</id>

          <url>https://repo.jenkins-ci.org/public/</url>

        </pluginRepository>

      </pluginRepositories>

    </profile>

  </profiles>

  <mirrors>

    <mirror>

      <id>repo.jenkins-ci.org</id>

      <url>https://repo.jenkins-ci.org/public/</url>

      <mirrorOf>m.g.o-public</mirrorOf>

    </mirror>

  </mirrors>

</settings>

注意:以上各個環境的安裝步驟這裡不在絮叨,網上一搜,一大丟。如果你是第一次安裝使用Maven,編譯專案時需要下載很多依賴包,此時此刻,你可以去洗個頭,做個娘娘的髮型,美美噠再回來。

2、  萬事具備,只欠東風。

選擇一個你喜歡的開發外掛路徑。例如我的選擇在FireLine\jenkinsPlugin\

執行如下maven命令:

 mvn -Uorg.jenkins-ci.tools:maven-hpi-plugin:create

執行中間需要輸入你的groupId和artifactId,如下圖:


完成後會在當前目錄下生成FireLinePlugin檔案目錄,此時此刻一個簡單的jenkins外掛模板就光榮誕生啦!!

3、  知其然知其所以然

以上準備工作完成後,即可動手操練起來,開發自己的jenkins外掛。

3.1    外掛專案目錄結構

src/main/java:存放專案的java原始碼;

src/main/resources:存放外掛的Jelly/Groovy檢視檔案;

src/main/webapp:存放外掛的靜態資原始檔,例如圖片、html檔案等。(自動生成外掛模板時無此目錄,如需新增靜態資源可自行建立)。

Jenkins使用了Jelly頁面渲染技術,jelly檔案以.jelly為字尾,在hudson中使用類全名的形式來查詢模型類對應的jelly頁面檔案,例如名為src/main/java/com/qihoo/fireline/FireLineBuilder.java的類,其對應的頁面檔案應該存在於src/main/resources/com/qihoo/fireline/FireLineBuilder/目錄下。如下圖:

resources檔案中的config.jelly檔案為job配置的檢視檔案,如圖:


global.jelly檔案為jenkins外掛的系統全域性配置檢視檔案,如圖:


3.2    生成eclipse專案

如果你的Eclipse開發環境未安裝Maven外掛,可以使用命令mvneclipse:eclipse 將maven專案轉化成eclipse專案直接匯入。若已安裝maven外掛,直接匯入maven專案。使用maven命令建立外掛會自動生成類檔案HelloWorldBuilder.java,此處我將類名更改成FireLineBuilder。

3.3    程式碼詳解

本模板中使用了jenkins的Builder作為擴充套件點,Jenkins中有多種不同擴充套件點,你也可以建立一個新的擴充套件點。詳情可參考:https://wiki.jenkins-ci.org/display/JENKINS/Extension+points

FireLineBuilder類中通過@DataBoundConstructor註釋來宣告建構函式,建構函式引數與config.jelly配置檔案中的欄位一一對應。

在Jenkins中,job每次執行編譯時,都會執行perform()方法,可在此方法內實現自己的外掛定義。方法中有四個引數:

build:描述任務的一次構建,通過該物件可獲取到當前構建的專案、工作空間、當前構建的執行結果等資訊。

workspace:當前構建的工作路徑。

launcher:用來啟動構建。

listener:監控構建過程的狀態。

注意:通過build物件可以獲取到jenkins的構建路徑,workspace獲取的是構建專案的工作路徑,此處注意區分。

在類FireLineBuilder中有個DescriptorImpl的內部實現類,其必須使用@extension來宣告。可通過DescriptorImpl來處理全域性系統配置,例如設定外掛在專案構建配置中顯示的名稱等。

public String getDisplayName(){

           return"ExecuteFireLine";

    }

顯示如圖:


通過DescriptorImpl類中FormValidationdoCheckName(@QueryParameter String value)方法可以對*.jelly配置中傳遞的引數進行基本的校驗。

注意:doCheck方法需要與配置中引數名稱一一對應。(此坑本人已跳,無奈臉)

3.4    debug 外掛

在專案目錄下執行如下命令:

>set MAVEN_OPTS=-Xdebug-Xrunjdwp:transport=dt_socket,server=y,address=8000,suspend=n

>mvn hpi:run

在瀏覽器中訪問http://localhost:8080/Jenkins,即可檢視除錯外掛。

注意:如果修改resources和webapp中的內容,重新整理頁面即可看到最新修改,若修改了java原始檔,需要重新編譯,才能更新到最新的修改。

3.5    打包並部署自定義外掛

執行mvn命令mvn package。打包完成後,在根目錄下的target檔案目錄下會生成firelineplugin.hpi外掛安裝包。將firelineplugin.hpi安裝到jenkins中即可使用自定義外掛。

安裝jenkins自定義外掛有兩種方式:

Ø  終止Jenkins,將firelineplugin.hpi拷貝到$JENKINS_HOME/plugins目錄下並新建一個名為firelineplugin.hpi.pinned的空檔案。重啟Jenkins。

Ø  開啟jenkins頁面到“系統管理”à“管理外掛”à“高階”,上傳firelineplugin.hpi外掛重啟Jenkins。

菜鳥一枚,如果紕漏,還請斧正。