火線教你如何開發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。


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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章