Jenkins持續集成web項目(七)


功能:用戶開發完maven構建的web項目后,從本地提交代碼到gogs遠程倉庫中,在執行 git commit 命令之前會先執行 maven配置的 findbugs插件,來檢測項目是否有明顯bug,如果有就讓項目構建失敗,git commit 失敗。 如果沒有明顯bug,則提交成功。 gogs配置web鈎子,對 push 命令有效。 當用戶從本地成功push代碼到gogs倉庫中時,會觸發jenkins項目的構建,jenkins中也會使用findbugs(checkstyle,pmd)再檢測一次,設置容錯bug數目,如果小於配置bug數則構建成功,自動完成部署。 用戶在本地push代碼后,可以直接在瀏覽器中訪問項目。

主要工具以及技術:  eclipse ,java,maven,Git,gogs,jenkins,Git鈎子,web鈎子

maven的pom.xml中的主要插件: findbugs plugin

 

(1)、新建maven項目,寫個簡單的類,然后寫出該類對應的測試類

    編寫jsp頁面(用於訪問部署后的項目,直接使用index.jsp也行)

 pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>cn.demo</groupId>
    <artifactId>jenkins_webtest</artifactId> <!--這是我的項目名-->
    <packaging>war</packaging> <!--web項目的打包方式-->
    <version>0.0.1-SNAPSHOT</version>
    <name>jenkins_webtest Maven Webapp</name>
    <url>http://maven.apache.org</url>
    <build>
        <finalName>jenkins_webtest</finalName>
        <plugins>
            <plugin>
                <inherited>true</inherited>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.5.1</version>
                <configuration>
                    <source>${compiler.source}</source>
                    <target>${compiler.target}</target>
                    <encoding>${project.build.sourceEncoding}</encoding>
                    <compilerArguments>
                        <extdirs>${project.basedir}/src/main/webapp/WEB-INF/lib</extdirs>
                    </compilerArguments>
                </configuration>
            </plugin>
          
        <!-- findbugs插件 :靜態檢查代碼的錯誤-->
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>findbugs-maven-plugin</artifactId>
            <version>3.0.4</version>
            <configuration>
                <!-- 設置分析工作的等級,可以為Min、Default和Max -->
                <effort>Low</effort>
                <!-- Low、Medium和High (Low最嚴格) -->
                <threshold>Medium</threshold>
                <failOnError>true</failOnError>
                <includeTests>true</includeTests>
                <!--findbugs需要忽略的錯誤的配置文件-->
               <!--  <excludeFilterFile>compile.bat</excludeFilterFile> -->
            </configuration> 
            <executions>
                <execution>
                    <id>run-findbugs</id>
                    <!-- 在install 階段觸發執行findbugs檢查,比如執行 mvn clean package-->
                    <phase>install</phase>  
                    <goals>
                        <goal>check</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>    
        
        
        <!--將腳本文件件放在項目war包以外一起打包的插件  這個配置主要用戶java項目執行時打包腳本的,web項目可以不用配置此插件-->
         <plugin>
               <groupId>org.apache.maven.plugins</groupId> 
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.4.1</version>
                <executions>
                    <execution>
                        <id>${project.version}</id><!--名字任意 -->
                        <phase>package</phase>   <!-- 綁定到package生命周期階段上 -->
                        <goals>
                            <goal>single</goal>   <!-- 只運行一次 -->   
                        </goals>
                        
                        <configuration>
                            <descriptors>   <!--描述文件路徑--> 
                                <descriptor>script.xml</descriptor>
                            </descriptors>
                            <!--這樣配置后,mvn deploy不會把assembly打的zip包上傳到nexus-->
                            <attach>false</attach>
                        </configuration>
                    </execution>
                </executions>

            </plugin>   
            
        </plugins>
    </build>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <compiler.source>1.7</compiler.source>
        <compiler.target>1.7</compiler.target>

        <!-- servlet/jsp/EL (2.4/2.0/?)(2.5/2.1/2.1),(3.0/2.2/2.2),(3.1/2.3/3.0) -->
        <servlet.version>3.1.0</servlet.version>
        <jsp.version>2.3.1</jsp.version>
        <jstl.version>1.2</jstl.version>
        <junit.version>4.12</junit.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>${servlet.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>${jsp.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>${jstl.version}</version>
        </dependency>
    </dependencies>
</project>

 

 

(2)、新建gogs倉庫,倉庫名為 jenkins_webtest ,然后進入git bush here ,通過 git clone  http://localhost:3000/test/jenkins_webtest.git 命令,將倉庫克隆到本地

  使用 cd 命令 ,進入克隆下來的項目   $ cd jenkins_webtest

  里面有個 .git文件夾 ,打開.git文件夾后 里面有個文件名為 hooks的文件夾 在hooks目錄下新建 pre-commit 文件 (這個文件沒有后綴名,在用戶使用 git  commit 命令時會自動先調用該文件 ,腳本命令就寫在該文件(pre-commit)中)    $ cd .git/hooks     $ touch pre-commit   然后編輯該文件  $ vi pre-commit

將這段內容復制進去:  (整個腳本的返回值為0時,才能commit 成功;當腳本返回值為非0時,git commit 失敗)

#!/bin/sh
#execute shell before commit,check the code
mvn clean install   #這里執行install命令時,根據前面pom.xml的配置,會執行findbugs:findbugs命令

#recieve the  execute result   接收執行結果
result=$?
#output the result ,if the result more than or equal 0 ,it proves this project has bugs,otherwise don't.
#如果執行結果為0 ,表示沒有bug,maven項目build成功
#如果執行結果為非0,表示有bug,maven項目 build 失敗 echo $result if [ $result -ne 0 ] #判斷執行結果是否等於0 (-ne : 不等於) then mvn findbugs:gui #彈出findbugs的gui,里面會顯示bug的具體位置以及原因 echo "REGRETFUL! BUILD FAILURE" exit 1 #有bug時,讓Git commit失敗,無法提交上去 else echo "CONGRATURATION! BUILD SUCCESS" exit 0 #沒有bug時,以 0 退出,是的commit成功,可以繼續push fi

 

 

(3)在gogs倉庫中配置 web鈎子

進入項目倉庫 --》 點擊倉庫設置 --》 管理web鈎子 --》 添加web鈎子 --》gogs --》 推送地址:http://172.150.16.53:8080/gogs-webhook/?job=jenkins_webtest

 

 

(4)在jenkins上構建maven風格的項目,參照jenkins項目的基本配置就行了

  主要配置   源碼管理  : Git

            構建觸發器: 觸發遠程構建

         Build: pom.xml  ,后面那行寫 clean package findbugs:findbugs  checkstyle:checkstyle  (前提:在可選插件中下載好了 findbugs,checkstyle插件)

      在Post Step 下面 選擇 --》 add post-build step :  選擇 --》send files or execute command over SSH (前提已經下載了 Publish over  SSH插件,並且測試連接主機)

  在這里的配置

  Name:是在系統設置里面配置的

  Source Files: 這里填寫你需要傳輸的文件  jenkins工作區間中的文件

  Remove prefix: 傳輸到遠程主機后 需要移除的文件前綴 ,這里寫了 target 

  Remote directory:傳輸過去到遠程主機的什么位置

  Exec Command :這里的命令很簡單 只要將war包移到 遠程主機的 Tomcat的webapps目錄下就行了

  

 

在往下的配置就是 構建設置

在 Publish Checkstyle analysis results 和  Publish  findbugs analysis results 打鈎,就是選中就行了。。點擊高級配置 具體看關於靜態檢測的那篇博文

 然后就可以構建了

 

 

(web部署到本機的Tomcat中,不需要 在Post Step 下面 選擇 --》 add post-build step :  選擇 --》send files or execute command over SSH 這一步,直接在構建后操作中  選中 Deploy war/ear to a container 進行簡單配置就行了 )

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM