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