jenkins自動化部署


typora-copy-images-to: pic

Jenkins部署文檔

1、安裝環境

一、CentOs下安裝JDK

手動安裝jdk

最新的JDK下載地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 沒帳號註冊一個,很快的java

  jdk-8u121-linux-x64.tar.gz
這裏選擇Linux64位後綴tar.gz的複製下載連接,在服務器上解壓配置環境變量vim /etc/profile寫在最後面mysql

JAVA_HOME=/data/java/jdk的目錄名字   #java目錄是我建立的,把jdk包解壓到裏面,這個寫解壓位置的絕對路徑
CLASSPATH=$JAVA_HOME/lib/
PATH=$JAVA_HOME/bin:$PATH   #謹慎,這裏PATH寫錯了會發現命令都得打絕對路徑才能用,悲催
export PATH JAVA_HOME CLASSPATH

​ 配置沒問題完成保存,source /etc/profile讓配置的環境變量生效,這時候能夠打命令java -version看看版本,是否是出java version "1.8.0_***",若是是1.6什麼的說明沒生效,看看解壓的路徑。linux

備註:若是是centos偏高的版本,會自帶jdk,建議卸載重裝jdk版本(jenkins須要jdk安裝目錄,本人查了很久沒查到jdk安裝目錄),具體操做可參照此博客git

使用CentOS7卸載自帶jdk安裝本身的JDK1.8web

yum安裝jdk

1.查看yum庫中都有哪些jdk版本(暫時只發現了openjdk)spring

[root@localhost ~]# yum search java|grep jdk
ldapjdk-javadoc.x86_64 : Javadoc for ldapjdk
java-1.6.0-openjdk.x86_64 : OpenJDK Runtime Environment
java-1.6.0-openjdk-demo.x86_64 : OpenJDK Demos
java-1.6.0-openjdk-devel.x86_64 : OpenJDK Development Environment
java-1.6.0-openjdk-javadoc.x86_64 : OpenJDK API Documentation
java-1.6.0-openjdk-src.x86_64 : OpenJDK Source Bundle
java-1.7.0-openjdk.x86_64 : OpenJDK Runtime Environment
java-1.7.0-openjdk-demo.x86_64 : OpenJDK Demos
java-1.7.0-openjdk-devel.x86_64 : OpenJDK Development Environment
java-1.7.0-openjdk-javadoc.noarch : OpenJDK API Documentation
java-1.7.0-openjdk-src.x86_64 : OpenJDK Source Bundle
java-1.8.0-openjdk.x86_64 : OpenJDK Runtime Environment
java-1.8.0-openjdk-demo.x86_64 : OpenJDK Demos
java-1.8.0-openjdk-devel.x86_64 : OpenJDK Development Environment
java-1.8.0-openjdk-headless.x86_64 : OpenJDK Runtime Environment
java-1.8.0-openjdk-javadoc.noarch : OpenJDK API Documentation
java-1.8.0-openjdk-src.x86_64 : OpenJDK Source Bundle
ldapjdk.x86_64 : The Mozilla LDAP Java SDK

2.選擇版本,進行安裝sql

//選擇1.7版本進行安裝shell

[root@localhost ~]# yum install java-1.8.0-openjdk

//安裝完以後,默認的安裝目錄是在: /usr/lib/jvm/java-1.8.0-openjdk-1.7.0.75.x86_64apache

3.設置環境變量

[root@localhost ~]# vi /etc/profile

在profile文件中添加以下內容

#set java environment
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.75.x86_64
JRE_HOME=$JAVA_HOME/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH

讓修改生效

[root@localhost java]# source /etc/profile

二、CentOS安裝Maven

手動安裝Maven

下載地址

http://maven.apache.org/download.cgi

版本 apache-maven-3.3.9 -bin.tar.gz

tar -xvf apache-maven-3.3.9-bin.tar.gz 

mv apache-maven-3.3.9 /usr/local/apache-maven

文件存放好以後,設置環境變量,打開etc/profile,在文件中加入下邊的代碼:

寫入環境變量

vi /etc/profile

最後一行加入

這個前提是安裝了java1.8

export MAVEN_HOME=/usr/local/maven3
export PATH={MAVEN_HOME}/bin:{PATH}

再執行

source /etc/profile

驗證安裝是否成功,下面是成功的顯示方式:

[root@localhost ~]# mvn -v
Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-18T02:33:14+08:00)
Maven home: /usr/local/maven3
Java version: 1.8.0_181, vendor: Oracle Corporation, runtime: /usr/local/java/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-862.el7.x86_64", arch: "amd64", family: "unix"

yum安裝Maven

wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo
yum -y install apache-maven

三、CentOS安裝git

安裝

centos自帶Git,7.x版本自帶git 1.8.3.1(應該是,也可能不是),安裝新版本以前須要使用yun remove git卸載(安裝後卸載也能夠)。 (本人用的就是自帶的git,沒遇到其餘問題,小夥伴們能夠本身玩)

若是不肯定的的話,檢查git 是否已經安裝

git --version

若是沒有的話能夠,能夠經過下列操做安裝git

一、安裝所需軟件包

sudo su
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
yum install gcc perl-ExtUtils-MakeMaker

二、下載&安裝

cd /usr/src # wget https://www.kernel.org/pub/software/scm/git/git-2.7.3.tar.gz(git版本,本文章以2.7.3爲準)
tar xzf git-2.7.3.tar.gz
cd git-2.7.3
make prefix=/usr/local/git all # make prefix=/usr/local/git install
echo "export PATH=$PATH:/usr/local/git/bin" >> /etc/bashrc # source /etc/bashrc(此處使用須要用到的用戶下執行,不在必需要root,若是是root用戶那麼只能在root下使用git,其它用戶會有問題)

三、檢查版本

git --version

登陸git

(1)設置Git的user name和email:(若是是第一次的話)

$ git config --global user.name "zhizhao"
  $ git config --global user.email "zhizhao@ahgxtx.com"

(2)生成密鑰

大多數 Git 服務器都會選擇使用 SSH 公鑰來進行受權。系統中的每一個用戶都必須提供一個公鑰用於受權,沒有的話就要生成一個。生成公鑰的過程在全部操做系統上都差很少。首先你要確認一下本機是否已經有一個公鑰。

SSH 公鑰默認儲存在帳戶的主目錄下的 ~/.ssh 目錄。進去看看:

[root@localhost ~]# cd /root/.ssh/
[root@localhost .ssh]# ls
id_rsa  id_rsa.pub  known_hosts

看一下有沒有id_rsa和id_rsa.pub(或者是id_dsa和id_dsa.pub之類成對的文件),有 .pub 後綴的文件就是公鑰,另外一個文件則是密鑰。

假如沒有這些文件,甚至連 .ssh 目錄都沒有,能夠用 ssh-keygen 來建立。

$ ssh-keygen -t rsa -C "your_email@youremail.com"

Creates a new ssh key using the provided email # Generating public/private rsa key pair.

Enter file in which to save the key (/home/you/.ssh/id_rsa):

直接按Enter就行。而後,會提示你輸入密碼,以下(建議輸一個,安全一點,固然不輸也行,應該不會有人閒的無聊冒充你去修改你的代碼):

Enter same passphrase again: [Type passphrase again]

完了以後,大概是這樣:

Your public key has been saved in /home/you/.ssh/id_rsa.pub.
The key fingerprint is: # 01:0f:f4:3b:ca:85:d6:17:a1:7d:f0:68:9d:f0:a2:db your_email@youremail.com

到此爲止,你本地的密鑰對就生成了。

最後獲得了兩個文件:id_rsa和id_rsa.pub。

(3)添加ssh key到GitLab

打開gitlab,找到Profile Settings-->SSH Keys--->Add SSH Key,並把上一步中複製的內容粘貼到Key所對應的文本框,在Title對應的文本框中給這個sshkey設置一個名字,點擊Add key按鈕

1534567112983

1534567138610

(4) 到此就完成了gitlab配置ssh key的全部步驟,咱們就能夠愉快的使用ssh協議進行代碼的拉取以及提交等操做了

(5) 再試一下拉取代碼和提交代碼,應該就不須要輸入密碼了。

四、CentOS7下yum安裝Jenkins

(1)下載依賴

sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo

(2)導入祕鑰

sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key

(3)安裝

yum install jenkins #等待安裝時間較長,約25min

img

jenkins安裝完畢

(4)啓動前檢查是否已安裝jdk

java   #顯示java參數即證實已安裝jdk

(5)查找jenkins安裝路徑

[root@localhost ~]# rpm -ql jenkins
/etc/init.d/jenkins
/etc/logrotate.d/jenkins
/etc/sysconfig/jenkins
/usr/lib/jenkins
/usr/lib/jenkins/jenkins.war
/usr/sbin/rcjenkins
/var/cache/jenkins
/var/lib/jenkins
/var/log/jenkins

jenkins安裝路徑

jenkins相關目錄釋義:
(1)/usr/lib/jenkins/:jenkins安裝目錄,war包會放在這裏。
( 2 ) /etc/sysconfig/jenkins:jenkins配置文件,「端口」,「JENKINS_HOME」等均可以在這裏配置。
(3)/var/lib/jenkins/:默認的JENKINS_HOME。
(4)/var/log/jenkins/jenkins.log:jenkins日誌文件。

(6)配置jenkins

(1)查找jenkins端口

vim /etc/sysconfig/jenkins

## Type:        integer(0:65535)
## Default:     8080
## ServiceRestart: jenkins
#
# Port Jenkins is listening on.
# Set to -1 to disable
#
JENKINS_PORT="8888"

查找到jenkins默認端口爲8080,能夠對其進行修改

(2)查看其餘端口占用狀況

[root@localhost ~]# netstat -ntlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name   
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      764/rpcbind         
tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN      1714/dnsmasq       
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1197/sshd           
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      1194/cupsd         
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1576/master         
tcp6       0      0 :::3306                 :::*                    LISTEN      1845/mysqld         
tcp6       0      0 :::111                  :::*                    LISTEN      764/rpcbind         
tcp6       0      0 :::22                   :::*                    LISTEN      1197/sshd           
tcp6       0      0 ::1:631                 :::*                    LISTEN      1194/cupsd         
tcp6       0      0 ::1:25                  :::*                    LISTEN      1576/master

顯示已被佔用端口

被佔用端口與jenkins端口8080無衝突,便可進入下一步啓動jenkins

(3)啓動jenkins

java -jar /usr/lib/jenkins/jenkins.war --httpPort=8080

(4)修改jenkins端口
若默認8080端口未被佔用,可不修改
若端口已被佔用,則修改端口爲其餘端口,並將對應端口開放

#端口改成8899
java -jar /usr/lib/jenkins/jenkins.war --ajp13Port=-1 --httpPort=8899
#啓動
java -jar /usr/lib/jenkins/jenkins.war --httpPort=8899

#表示成功啓動
INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@1c810153: defining beans [filter,legacy]; root of factory hierarchy
Aug 09, 2018 9:56:24 AM jenkins.InitReactorRunner$1 onAttained
INFO: Completed initialization
Aug 09, 2018 9:56:24 AM hudson.WebAppMain$3 run
INFO: Jenkins is fully up and running

啓動完成

(5)驗證jenkins可否打開
在宿主機瀏覽器輸入http://IP:Port
我這裏輸入:http://192.168.114.128:8080
(修改端口後輸入:http://192.168.114.128:8899)

img

進入jenkins解密界面

[root@localhost ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
264cecec9a2c4abb9ce4ba2de0d033d3

在服務器上面cat /root/.jenkins/secrets/initialAdminPassword會出現讓輸入的密碼,一串數字字母,多等一會到出現下面界面,喝了口水,三分鐘過去了,出現了接下來的界面

img

這個就是說推薦安裝仍是本身選,須要的包後面能夠裝,我點了第一個,知道用什麼插件點第二個也能夠這樣裝的包少一點。安裝的插件都在/root/.jenkins/plugins/下面。

img

img

直接選擇continue as admin

img

開始使用,點擊就會進來

備註:jenkins配置權限不對致使沒法登錄或者空白頁面解決辦法,若是出現

找到.jenkins/config.xml(個人是經過yum安裝在root目錄下面的,因此對應的目錄是/root/.jenkins//config.xml,本人修改的是下列文件的第一條,若是有須要能夠對應下面的權限作修改)文件: 替換爲:

一、<authorizationStrategy class="hudson.security.AuthorizationStrategy$Unsecured"/> 
這個權限對應「任何用戶能夠作任何事(沒有任何限制)」  
二、<authorizationStrategy class="hudson.security.FullControlOnceLoggedInAuthorizationStrategy"/> 
這個權限對應「登陸用戶能夠作任何事」 
三、<authorizationStrategy class="hudson.security.GlobalMatrixAuthorizationStrategy">     <permission>hudson.model.Hudson.Administer:test</permission>     <permission>hudson.scm.SCM.Tag:test</permission> 
</authorizationStrategy> 
這個權限對應 test用戶能夠是管理員、打標籤權限。

img

​ admin用戶登陸還不知道密碼是什麼,我猜是/root/.jenkins/secrets/initialAdminPassword這個裏面的密碼,http://這個地方打ip:8080/jenkins/user/admin/configure修改admin密碼,也能夠點系統管理,在裏面找管理用戶,點屏幕中上方的admin進去最下面修改密碼保存。

(7)安裝MAVEN插件

若是在建立項目時候,沒有「建立一個Maven 項目」的選項。下圖是有這個選項的,若是沒有

1534567596129

你須要安裝Maven項目插件:Maven Integration plugin 。

​ 點擊「可選插件」 而後在右邊的過濾輸入框中輸入搜索關鍵字: Maven Integration Plugin 或者 Pipeline Maven Integration Plugin ,搜索到了之後,點擊直接安裝,

1534567658692

安裝完成後重啓就行了。

(8)工具配置

系統管理 —— Global Tool Configuration —— 配置JDK、Git、Maven

JDK
填寫別名:JDK
自動安裝前的勾選去掉,在出現的JAVA_HOME裏輸入:

1534562129571

Git
Path to Git executable
若是不用git,能夠點擊Delete Git,便可
git

Maven
填寫別名:maven
去掉「自動安裝」勾選框, 在MAVEN_HOME輸入:
1534562182383

最後點擊save按鈕保存。

(9)系統配置

主目錄

QQ截圖20180810090833

maven配置(倉庫和一些maven打包的設置)

1534562217731

郵件設置(因爲環境問題,小編沒有測試本版塊,有須要的童鞋能夠本身動手試一試)。

2、構建項目

一、點擊新建

出現下圖,名字隨便起,選擇構建一個maven項目

img

二、構建配置

img

三、源碼配置(git)

這裏面的小編的配置的是git ssh 方式配置的git 注意這裏面須要的是本機生成的私鑰(小編覺得是公鑰,調試了半天)

1534566889714

點擊add窗口

1534566949113

鏈接git,咱們是本身搭的gitlab,須要在gitlab上搜索ssh或者key,找到一個ssh keys字樣的,把jenkins服務器的公鑰放在上面,另外

四、構建觸發器

img

五、構建mvn

ROOT POM:

1.jenkins只支持一個pom.xml構建,並且要是Git根目錄下的相對文件,好比cms的tsbMngr項目打包的話,須要配置ROOT POM:tsbMngr/pom.xml,無論你怎麼配,第一次界面會報錯,不要緊,緣由是你本機尚未clone代碼,若是clone成功後仍是報錯,須要本身找下對應的相對路徑了。

img

二、像cms這樣的多pom項目,只有一個pom入口怎麼辦,小編貼一下我這邊成功的案例(cms),就是在git根目錄下新建一個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">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.gx</groupId>
  <artifactId>tsb</artifactId>
  <version>2.0</version>
  <packaging>pom</packaging>

  <modules>
    <module>tsbMngr</module>
    <module>tsbService</module>
  </modules>
</project>

Golds and options: 對應的mvn打包命令,若是是經過配置文件的方式

例如:按環境名稱創建配置文件目錄
在src/main/resources目錄下面,按照環境名稱創建配置文件目錄。這裏有兩個環境:test、product。

img

具體的打包方式能夠參考下面博客。

maven根據不一樣的運行環境,打包不一樣的配置文件

六、執行shell

img

1534567010423

具體的腳本以下(以cms爲例):

#!/bin/bash
#defined
TOMCAT_HOME="/home/software/apache-tomcat-8.0.53"
TOMCAT_PORT=8080
PROJECT="tsb"
JENKINS_WORKSPACE="/root/.jenkins/workspace/cms"
WAR_HOME="/apps/jenkins_war"

su service
#echo "cp $JENKINS_WORKSPACE/target/&PROJECT.war $WAR_HOME"
cp $JENKINS_WORKSPACE/tsbMngr/target/$PROJECT*.war $WAR_HOME
cp $JENKINS_WORKSPACE/tsbService/target/$PROJECT*.war $WAR_HOME

#shutdown tomcat (關閉tomcat)
$TOMCAT_HOME/bin/shutdown.sh &

#check tomcat process(查看tomcat對應的狀態),下面提供了兩種查看項目對應的pid
sleep 3
#tomcat_pid="lsof - i :$TOMCAT_PORT|grep "(LISTEN)" | awk '{print $2}'' 
tomcat_pid=`ps -ef|grep tomcat|grep start|grep -v 'grep'|awk '{print $2}'`
echo "scan tomcat pid :" $tomcat_pid

while [ -n "$tomcat_pid" ]
do
  kill -9 $tomcat_pid
  sleep 3
  #tomcat_pid="lsof - i :$TOMCAT_PORT|grep "(LISTEN)" | awk '{print $2}''
  tomcat_pid=`ps -ef|grep tomcat|grep start|grep -v 'grep'|awk '{print $2}'`
  echo "scan tomcat pid :" $tomcat_pid
  
done
#bak project
echo "scan no tomcat pid,$PROJECT publishing"
#備份War包
tar -czf $WAR_HOME/bak/$PROJECT-bak`date +%H%M%S`.tar.gz $TOMCAT_HOME/webapps/$PROJECT* 
sleep 10

rm -rf $TOMCAT_HOME/webapps/$PROJECT* $TOMCAT_HOME/webapps/$PROJECT*.war

#publish project
cp $WAR_HOME/$PROJECT*.war $TOMCAT_HOME/webapps

#remove tmp
rm -rf $WAR_HOME/$PROJECT*.war

#cd $TOMCAT_HOME/webapps
#jar -xvf $PROJECT.war

#start tomcat

export BUILD_ID=dontKillMe

$TOMCAT_HOME/bin/startup.sh &

echo "tomcat is starting.please try to access $PROJECT console url"

過程:jenkins調用git把Gitlab上的代碼下載到jenkins服務器,maven構建成war包,調用ssh運行shell腳本完成備份,停服務,清webapps,拷war包到tomcat下,起服務,提及來好簡單啊。。。

七、啓動服務

jenkins->選擇你須要的job->Bulid with parameters

下列是成功的部分控制檯日誌:查看日誌方式操做以下

1534558966946

git拉取代碼成功以下所示:

Building in workspace /root/.jenkins/workspace/cms
 > /usr/bin/git rev-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository
 > /usr/bin/git config remote.origin.url git@192.168.1.189:OTT/CMS.git # timeout=10
Fetching upstream changes from git@192.168.1.189:OTT/CMS.git
 > /usr/bin/git --version # timeout=10
using GIT_SSH to set credentials 
 > /usr/bin/git fetch --tags --progress git@192.168.1.189:OTT/CMS.git +refs/heads/*:refs/remotes/origin/*
 > /usr/bin/git rev-parse refs/remotes/origin/dev^{commit} # timeout=10
 > /usr/bin/git rev-parse refs/remotes/origin/origin/dev^{commit} # timeout=10
Checking out Revision 99b2d4d19bb85e457db1ea38952782585200dd13 (refs/remotes/origin/dev)
 > /usr/bin/git config core.sparsecheckout # timeout=10
 > /usr/bin/git checkout -f 99b2d4d19bb85e457db1ea38952782585200dd13
Commit message: "1:修改版本號爲1.3.04 2:添加頻道映射時,添加頻作別稱和標準頻道名稱是否一致的校驗 3:系統出現異常,提示消息改成:系統異常,請聯繫管理員 4:添加mysql超過8小時自動斷鏈後的處理 5:查詢圖標當有多個查詢項時,修改顯示位置 6:修改log表中content字段類型"
 > /usr/bin/git rev-list --no-walk 99b2d4d19bb85e457db1ea38952782585200dd13 # timeout=10

maven打包成功以下:

[INFO] Reactor Summary:
[INFO] 
[INFO] tsbMngr 1.0.0 ...................................... SUCCESS [ 23.515 s]
[INFO] tsbService 1.0.0 ................................... SUCCESS [ 13.606 s]
[INFO] tsb 2.0 ............................................ SUCCESS [  0.127 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 40.030 s
[INFO] Finished at: 2018-08-18T10:06:46+08:00

啓動shell成功腳本以下

[cms] $ /bin/bash /tmp/jenkins5969105122672253127.sh
su: user service does not exist
Aug 18, 2018 10:06:47 AM org.apache.catalina.startup.Catalina stopServer
SEVERE: Could not contact localhost:8005. Tomcat may not be running.
Aug 18, 2018 10:06:47 AM org.apache.catalina.startup.Catalina stopServer
SEVERE: Catalina.stop: 
java.net.ConnectException: Connection refused (Connection refused)
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:589)
    at java.net.Socket.connect(Socket.java:538)
    at java.net.Socket.<init>(Socket.java:434)
    at java.net.Socket.<init>(Socket.java:211)
    at org.apache.catalina.startup.Catalina.stopServer(Catalina.java:457)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.catalina.startup.Bootstrap.stopServer(Bootstrap.java:398)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:485)

scan tomcat pid :
scan no tomcat pid,tsb publishing
tar: Removing leading `/' from member names
tomcat is starting.please try to access tsb console url
Tomcat started.

八、遠程ssh部署tomcat

簡單來理解是在jenkins的服務器上git拉取代碼、maven打包,而後上傳到遠程服務器上,啓動shell腳本部署的操做。

安裝插
點擊-系統管理-系統插件-可選插件中 直接搜 publish over ssh 點擊安裝,安裝完以後,重啓jenkins。

配置
點擊- 系統管理-系統設置-拉到最下面就有這個窗口了,下列是我鏈接cms鏈接的環境配置,經過用戶名密碼鏈接的,能夠經過其餘方式鏈接。具體鏈接方式你們能夠本身去試一試。

1534559440667

ssh Server配置:

startup.sh腳本以下:

TOMCAT_HOME="/home/jenkinstest/apache-tomcat-tsb"
TOMCAT_PORT=8080
PROJECT="tsb"
WAR_HOME="/home/jenkinstest/tmp"
BAK_HOME="/home/jenkinstest/bak"

su service

#shutdown tomcat (關閉tomcat)
$TOMCAT_HOME/bin/shutdown.sh &

#check tomcat process(查看tomcat對應的狀態),下面提供了兩種查看項目對應的pid
sleep 3
#tomcat_pid="lsof - i :$TOMCAT_PORT|grep "(LISTEN)" | awk '{print $2}'' 
tomcat_pid=`ps -ef|grep tsb|grep start|grep -v 'grep'|awk '{print $2}'`
echo "scan tomcat pid :" $tomcat_pid

while [ -n "$tomcat_pid" ]
do
  kill -9 $tomcat_pid
  sleep 3
  #tomcat_pid="lsof - i :$TOMCAT_PORT|grep "(LISTEN)" | awk '{print $2}''
  tomcat_pid=`ps -ef|grep tsb|grep start|grep -v 'grep'|awk '{print $2}'`
  echo "scan tomcat pid :" $tomcat_pid
  
done
#bak project
echo "scan no tomcat pid,$PROJECT publishing"
#備份War包
tar -czf $BAK_HOME/$PROJECT-bak`date +%H%M%S`.tar.gz $TOMCAT_HOME/webapps/$PROJECT* 
sleep 10

rm -rf $TOMCAT_HOME/webapps/$PROJECT* $TOMCAT_HOME/webapps/$PROJECT*.war

#publish project
cp $WAR_HOME/$PROJECT*.war $TOMCAT_HOME/webapps

#remove tmp
rm -rf $WAR_HOME/$PROJECT*.war

#cd $TOMCAT_HOME/webapps
#jar -xvf $PROJECT.war

#start tomcat
export BUILD_ID=dontKillMe

$TOMCAT_HOME/bin/startup.sh &

echo "tomcat is starting.please try to access $PROJECT console url"

1534559586128

Name        : 這裏是自定義的ssh遠程服務器,若是有多臺,點擊add post-build step 繼續添加
Source files    : 源文件地址,相對地址 好比 /root/.jenkins/workspace/jobname/target/xx.war  直接寫成 target/xx.war就行
Remove prefix   : 這裏指的是忽略前面的 target/   遠程服務器直接顯示就是xx.war
Remote directory    : 遠程服務器要保存的文件目錄
Exec command    : 這裏直接寫 bash 腳本名稱 xx.sh    這裏也是遠程服務器的腳本

下列是成功部署的控制檯日誌:

SSH: Connecting from host [localhost.localdomain]
SSH: Connecting with configuration [tomcat-server] ...
SSH: Disconnecting configuration [tomcat-server] ...
SSH: Transferred 1 file(s)
SSH: Connecting from host [localhost.localdomain]
SSH: Connecting with configuration [tomcat-server] ...
SSH: EXEC: STDOUT/STDERR from command [bash  /home/jenkinstest/startup.sh] ...
su: user service does not exist
scan tomcat pid :
scan no tomcat pid,tsb publishing
tar: Removing leading `/' from member names
tar: /home/jenkinstest/apache-tomcat-tsb/webapps/tsb*: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors
tomcat is starting.please try to access tsb console url
Tomcat started.
SSH: EXEC: completed after 13,821 ms
SSH: Disconnecting configuration [tomcat-server] ...
SSH: Transferred 1 file(s)
Finished: SUCCESS

注意:一、若是出現Transferred 0 file(s)請注意下你的 Source是jenkins的相對路徑,Remote directory是遠程服務器的相對路徑,Exec command是服務器的絕對路徑。

二、報錯:請檢查對應查找tomcat的腳本是否正確。

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

三、此報錯信息是你的shell腳本的格式有問題,我這邊的解決方案是:拷貝一份centos下tomcat的隨便的.sh文件,而後修改,也能夠本身修改,具體能夠參考解決執行腳本報syntax error: unexpected end of file或syntax error near unexpected token `fi'錯誤的問題

start.sh: line 47: syntax error: unexpected end of file
相關文章
相關標籤/搜索