1. 程式人生 > 實用技巧 >Jenkins+maven+SVN+Tomcat一鍵自動打包war部署到應用伺服器

Jenkins+maven+SVN+Tomcat一鍵自動打包war部署到應用伺服器

一、準備2臺伺服器(CentOS 7+),一臺用於jenkins構建用,一臺用於專案 tomcat應用部署

二、安裝jenkins伺服器

2.1 安裝JDK1.8(/usr/java/jdk1.8.0_131)、安裝apache-maven-3.6.3-bin.tar.gz(/home/apache-maven-3.6.3)

2.2 編輯 /etc/profile 檔案:

export JAVA_HOME=/usr/java/jdk1.8.0_131
export JRE_HOME=${JAVA_HOME}/jre
export MAVEN_HOME=/home/apache-maven-3.6.3
export CLASSPATH
=$CLASSPATH:$JAVA_HOME/lib export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin

執行:source/etc/profile 命令生效

2.3 下載jenkins war 包上傳至/home 目錄下(地址:https://www.jenkins.io/download/ 選擇Generic Java package (.war))

啟動jenkins服務:

cd /home
nohup java -jar jenkins.war --httpPort=8080 &

訪問jenkins:http://伺服器IP:8080/

三、配置jenkins

3.1 進入“系統管理”-“外掛管理”-“可選外掛”中搜索安裝以下3類外掛:

(1)Subversion Revert Plugin、Subversion Workspace Cleaner、SVN 1.4 Compatibility Plugin

(2)Maven Integration plugin、Deploy to container Plugin、WebSphereDeployerPlugin

(3)Publish Over SSH、SSH Build Agents plugin、SSH plugin

3.2進入“系統管理”-“全域性工具配置”

(1)Maven 配置

預設 settings 提供:檔案系統中的settings檔案, 檔案路徑:/home/apache-maven-3.6.3/conf/settings.xml

預設全域性 settings 提供:檔案系統中的全域性settings檔案,檔案路徑:/home/apache-maven-3.6.3/conf/settings.xml

(2)JDK配置

別名:jdk1.8.0_131

JAVA_HOME:/usr/java/jdk1.8.0_131

(3)Maven

name:maven3.6.3

MAVEN_HOME:/home/apache-maven-3.6.3

3.3進入“系統管理”-“系統配置”

(1)Maven專案配置

全域性MAVEN_OPTS:-Xms128m -Xmx512m

(2)Publish over SSH

3.4進入“新建任務”-“構建一個自由風格的軟體專案”

(1)原始碼管理

選擇Subversion,設定Repository URL、Credentials

(2)構建觸發器

(3)構建-增加構建步驟-執行shell命令:

cd $WORKSPACE
MAVEN_BIN=/home/apache-maven-3.6.3/bin
$MAVEN_BIN/mvn clean install -Dmaven.test.skip=true

(4)構建後操作-增加構建後操作步驟-send build artifacts over SHH

name:伺服器IP

Source files:target/jjdemo.war

Remove prefix:target

Exec command:

#jdk環境
export JAVA_HOME=/usr/java/jdk-11.0.4
export CLASSPATH=.:$JAVA_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$PATH
#進入sh檔案目錄
cd /home
#執行該sh檔案
dos2unix autoDeploy.sh
sh autoDeploy.sh

3.5 配置pom.xml檔案

進入/root/.jenkins/workspace/jjdemo2 任務資料夾目錄:

(1)建立resource資料夾,將一些專案配置資原始檔(如.properties、.xml等)統一放到此目錄;

(2)建立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/xsd/maven-4.0.0.xsd">
    <!-- 模型版本。maven2.0必須是這樣寫,現在是maven2唯一支援的版本 -->
    <modelVersion>4.0.0</modelVersion>
    <!-- 公司或者組織的唯一標誌,並且配置時生成的路徑也是由此生成, 
       如com.winner.trade,maven會將該專案打成的jar包放本地路徑:/com/winner/trade -->  
    <groupId>com.xrh</groupId>
    <!-- 本專案的唯一ID,一個groupId下面可能多個專案,就是靠artifactId來區分的 -->  
    <artifactId>jjdemo</artifactId>
     <!-- 本專案目前所處的版本號 -->  
    <version>1.0</version>  
    <!-- 打包的機制,如pom,jar, maven-plugin, ejb, war, ear, rar, par,預設為jar -->  
    <packaging>war</packaging>
    <!-- 為pom定義一些常量,在pom中的其它地方可以直接引用 使用方式 如下 :${file.encoding} -->
    <properties>
        <file.encoding>UTF-8</file.encoding>
        <java.source.version>1.8</java.source.version>
        <java.target.version>1.8</java.target.version>
        <java.home>/usr/java/jdk1.8.0_131</java.home>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <!-- 產生的構件的檔名,預設值是${artifactId}-${version}。 -->  
        <finalName>jjdemo</finalName> 
        <!-- 構建產生的所有檔案存放的目錄,預設為${basedir}/target,即專案根目錄下的target -->  
        <directory>${basedir}/target</directory>
        <!--專案原始碼目錄,當構建專案的時候,構建系統會編譯目錄裡的原始碼。該路徑是相對於pom.xml的相對路徑。 -->  
        <sourceDirectory>${basedir}/src</sourceDirectory>  
        <!--被編譯過的應用程式class檔案存放的目錄。 -->  
        <outputDirectory>${basedir}/WebRoot/WEB-INF/classes</outputDirectory> 
        <!--描述存放資源的目錄,該路徑相對POM路徑--> 
        <resources>  
           <resource>
            <!--描述存放資源的目錄,該路徑相對POM路徑 -->  
            <directory>resource</directory>  
            <!--包含的模式列表 -->  
            <includes>  
                <include>*.properties</include> 
                <include>*.json</include>            
                <include>*.xml</include>  
            </includes>
            <!--排除的模式列表 如果<include>與<exclude>劃定的範圍存在衝突,以<exclude>為準
            <excludes>  
                <exclude>jdbc.properties</exclude>  
            </excludes>
             -->
           </resource>
        </resources>
        
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.6.2</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                    <compilerArguments>
                        <extdirs>${basedir}/WebRoot/WEB-INF/lib</extdirs>
                        <bootclasspath>${java.home}/jre/lib/rt.jar:${java.home}/jre/lib/jce.jar:${java.home}/jre/lib/servlet-api.jar</bootclasspath>
                    </compilerArguments>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.3.1</version>
                <configuration>
                 <webResources>
                    <resource>
                        <directory>${basedir}/WebRoot</directory>
                        <targetPath></targetPath>
                    </resource>
                 </webResources>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

目錄結構,如下所示:

四、配置遠端應用伺服器

(1)編輯autoDeploy.sh 並上傳至/home 目錄下,sh內容如下:

#tomcat路徑

TOMCAT_HOME=/home/tomcat-8.5.46-jjdemo

#檢視程序並殺掉程序

ID=`ps -ef | grep "$TOMCAT_HOME" | grep -v "$0" | grep -v "grep" | awk '{print $2}'`
echo $ID
for id in $ID
do
kill -9 $id
echo "killed $id"
done

#刪除舊的war包等

cd $TOMCAT_HOME/webapps
rm -rf jjdemo*

#拷貝新war包到Tomcat下

cd /home
cp jjdemo.war $TOMCAT_HOME/webapps
cd /home/tomcat-8.5.46-jjdemo/bin

#啟動tomcat

nohup ./startup.sh

tomcat 部署目錄結構:

五、自動構建部署

進入任務介面,點選“立即構建”,順利的話控制檯輸出可以看到如下效果:

這樣就可以體驗最新版本的web應用服務了!

六、注意事項

應用伺服器執行sh出現錯誤資訊:

sh autoDeploy.sh] ...
autoDeploy.sh: line 2: $'\r': command not found
autoDeploy.sh: line 4: $'\r': command not found
autoDeploy.sh: line 6: $'\r': command not found


autoDeploy.sh: line 10: syntax error near unexpected token `$'do\r''
autoDeploy.sh: line 10: `do
'
SSH: EXEC: completed after 201 ms
SSH: Disconnecting configuration [47.107.86.152] ...
ERROR: Exception when publishing, exception message [Exec exit status not zero. Status [2]]
Build step 'Send build artifacts over SSH' changed build result to UNSTABLE
Finished: UNSTABLE

處理方法:

Linux下有命令dos2unix

你只要輸入dos2unix *.sh就可以完成轉換工作了

如果命令不存在的話就用如下命令在遠端web伺服器上安裝:

yum install dos2unix -y