typora-copy-images-to: pic

Jenkins部署文档

一、安装环境

1、CentOs下安装JDK

手动安装jdk

最新的JDK下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 没账号注册一个,很快的

  jdk-8u121-linux-x64.tar.gz

这里选择Linux64位后缀tar.gz的复制下载链接,在服务器上解压配置环境变量vim /etc/profile写在最后面

  1. JAVA_HOME=/data/java/jdk的目录名字 #java目录是我创建的,把jdk包解压到里面,这个写解压位置的绝对路径
  2. CLASSPATH=$JAVA_HOME/lib/
  3. PATH=$JAVA_HOME/bin:$PATH #谨慎,这里PATH写错了会发现命令都得打绝对路径才能用,悲催
  4. export PATH JAVA_HOME CLASSPATH

​ 配置没问题完成保存,source /etc/profile让配置的环境变量生效,这时候可以打命令java -version看看版本,是不是出java version "1.8.0_***",如果是1.6什么的说明没生效,看看解压的路径。

备注:如果是centos偏高的版本,会自带jdk,建议卸载重装jdk版本(jenkins需要jdk安装目录,本人查了好久没查到jdk安装目录),具体操作可参照此博客

使用CentOS7卸载自带jdk安装自己的JDK1.8

yum安装jdk

1.查看yum库中都有哪些jdk版本(暂时只发现了openjdk)

  1. [root@localhost ~]# yum search java|grep jdk
  2. ldapjdk-javadoc.x86_64 : Javadoc for ldapjdk
  3. java-1.6.0-openjdk.x86_64 : OpenJDK Runtime Environment
  4. java-1.6.0-openjdk-demo.x86_64 : OpenJDK Demos
  5. java-1.6.0-openjdk-devel.x86_64 : OpenJDK Development Environment
  6. java-1.6.0-openjdk-javadoc.x86_64 : OpenJDK API Documentation
  7. java-1.6.0-openjdk-src.x86_64 : OpenJDK Source Bundle
  8. java-1.7.0-openjdk.x86_64 : OpenJDK Runtime Environment
  9. java-1.7.0-openjdk-demo.x86_64 : OpenJDK Demos
  10. java-1.7.0-openjdk-devel.x86_64 : OpenJDK Development Environment
  11. java-1.7.0-openjdk-javadoc.noarch : OpenJDK API Documentation
  12. java-1.7.0-openjdk-src.x86_64 : OpenJDK Source Bundle
  13. java-1.8.0-openjdk.x86_64 : OpenJDK Runtime Environment
  14. java-1.8.0-openjdk-demo.x86_64 : OpenJDK Demos
  15. java-1.8.0-openjdk-devel.x86_64 : OpenJDK Development Environment
  16. java-1.8.0-openjdk-headless.x86_64 : OpenJDK Runtime Environment
  17. java-1.8.0-openjdk-javadoc.noarch : OpenJDK API Documentation
  18. java-1.8.0-openjdk-src.x86_64 : OpenJDK Source Bundle
  19. ldapjdk.x86_64 : The Mozilla LDAP Java SDK

2.选择版本,进行安装

//选择1.7版本进行安装

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

//安装完之后,默认的安装目录是在: /usr/lib/jvm/java-1.8.0-openjdk-1.7.0.75.x86_64

3.设置环境变量

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

在profile文件中添加如下内容

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

让修改生效

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

2、CentOS安装Maven

手动安装Maven

下载地址

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

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

  1. tar -xvf apache-maven-3.3.9-bin.tar.gz
  2. mv apache-maven-3.3.9 /usr/local/apache-maven

文件存放好之后,设置环境变量,打开etc/profile,在文件中加入下边的代码:

写入环境变量

  1. vi /etc/profile

最后一行加入

这个前提是安装了java1.8

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

再执行

  1. source /etc/profile

验证安装是否成功,下面是成功的显示方式:

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

yum安装Maven

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

3、CentOS安装git

安装

centos自带Git,7.x版本自带git 1.8.3.1(应该是,也可能不是),安装新版本之前需要使用yun remove git卸载(安装后卸载也可以)。 (本人用的就是自带的git,没遇到其他问题,小伙伴们可以自己玩)

如果不确定的的话,检查git 是否已经安装

  1. git --version

如果没有的话可以,可以通过下列操作安装git

1、安装所需软件包

  1. sudo su
  2. yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
  3. yum install gcc perl-ExtUtils-MakeMaker

2、下载&安装

  1. cd /usr/src # wget https://www.kernel.org/pub/software/scm/git/git-2.7.3.tar.gz(git版本,本文章以2.7.3为准)
  2. tar xzf git-2.7.3.tar.gz
  3. cd git-2.7.3
  4. make prefix=/usr/local/git all # make prefix=/usr/local/git install
  5. echo "export PATH=$PATH:/usr/local/git/bin" >> /etc/bashrc # source /etc/bashrc(此处使用需要用到的用户下执行,不在必须要root,如果是root用户那么只能在root下使用git,其它用户会有问题)

3、检查版本

  1. git --version

登录git

(1)设置Git的user name和email:(如果是第一次的话)

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

(2)生成密钥

大多数 Git 服务器都会选择使用 SSH 公钥来进行授权。系统中的每个用户都必须提供一个公钥用于授权,没有的话就要生成一个。生成公钥的过程在所有操作系统上都差不多。首先你要确认一下本机是否已经有一个公钥。

SSH 公钥默认储存在账户的主目录下的 ~/.ssh 目录。进去看看:

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

看一下有没有id_rsa和id_rsa.pub(或者是id_dsa和id_dsa.pub之类成对的文件),有 .pub 后缀的文件就是公钥,另一个文件则是密钥。

假如没有这些文件,甚至连 .ssh 目录都没有,可以用 ssh-keygen 来创建。

  1. $ ssh-keygen -t rsa -C "your_email@youremail.com"
  2. Creates a new ssh key using the provided email # Generating public/private rsa key pair.
  3. Enter file in which to save the key (/home/you/.ssh/id_rsa):

直接按Enter就行。然后,会提示你输入密码,如下(建议输一个,安全一点,当然不输也行,应该不会有人闲的无聊冒充你去修改你的代码):

  1. Enter same passphrase again: [Type passphrase again]

完了之后,大概是这样:

  1. Your public key has been saved in /home/you/.ssh/id_rsa.pub.
  2. 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按钮

(4) 到此就完成了gitlab配置ssh key的所有步骤,我们就可以愉快的使用ssh协议进行代码的拉取以及提交等操作了

(5) 再试一下拉取代码和提交代码,应该就不需要输入密码了。

4、CentOS7下yum安装Jenkins

(1)下载依赖

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

(2)导入秘钥

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

(3)安装

  1. yum install jenkins #等待安装时间较长,约25min

jenkins安装完毕

(4)启动前检查是否已安装jdk

  1. java #显示java参数即证明已安装jdk

(5)查找jenkins安装路径

  1. [root@localhost ~]# rpm -ql jenkins
  2. /etc/init.d/jenkins
  3. /etc/logrotate.d/jenkins
  4. /etc/sysconfig/jenkins
  5. /usr/lib/jenkins
  6. /usr/lib/jenkins/jenkins.war
  7. /usr/sbin/rcjenkins
  8. /var/cache/jenkins
  9. /var/lib/jenkins
  10. /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端口

  1. vim /etc/sysconfig/jenkins
  2. ## Type: integer(0:65535)
  3. ## Default: 8080
  4. ## ServiceRestart: jenkins
  5. #
  6. # Port Jenkins is listening on.
  7. # Set to -1 to disable
  8. #
  9. JENKINS_PORT="8888"

查找到jenkins默认端口为8080,可以对其进行修改

(2)查看其他端口占用情况

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

显示已被占用端口

被占用端口与jenkins端口8080无冲突,即可进入下一步启动jenkins

(3)启动jenkins

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

(4)修改jenkins端口

若默认8080端口未被占用,可不修改

若端口已被占用,则修改端口为其他端口,并将对应端口开放

  1. #端口改为8899
  2. java -jar /usr/lib/jenkins/jenkins.war --ajp13Port=-1 --httpPort=8899
  1. #启动
  2. java -jar /usr/lib/jenkins/jenkins.war --httpPort=8899
  3. #表示成功启动
  4. INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@1c810153: defining beans [filter,legacy]; root of factory hierarchy
  5. Aug 09, 2018 9:56:24 AM jenkins.InitReactorRunner$1 onAttained
  6. INFO: Completed initialization
  7. Aug 09, 2018 9:56:24 AM hudson.WebAppMain$3 run
  8. INFO: Jenkins is fully up and running

启动完成

(5)验证jenkins能否打开

在宿主机浏览器输入http://IP:Port

我这里输入:http://192.168.114.128:8080

(修改端口后输入:http://192.168.114.128:8899

进入jenkins解密界面

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

在服务器上面cat /root/.jenkins/secrets/initialAdminPassword会出现让输入的密码,一串数字字母,多等一会到出现下面界面,喝了口水,三分钟过去了,出现了接下来的界面

这个就是说推荐安装还是自己选,需要的包后面可以装,我点了第一个,知道用什么插件点第二个也可以这样装的包少一点。安装的插件都在/root/.jenkins/plugins/下面。

直接选择continue as admin

开始使用,点击就会进来

备注:jenkins配置权限不对导致无法登陆或者空白页面解决办法,如果出现

找到.jenkins/config.xml(我的是通过yum安装在root目录下面的,所以对应的目录是/root/.jenkins//config.xml,本人修改的是下列文件的第一条,如果有需要可以对应下面的权限做修改)文件: 替换为:

  1. 1、<authorizationStrategy class="hudson.security.AuthorizationStrategy$Unsecured"/>
  2. 这个权限对应“任何用户可以做任何事(没有任何限制)”
  3. 2、<authorizationStrategy class="hudson.security.FullControlOnceLoggedInAuthorizationStrategy"/>
  4. 这个权限对应“登录用户可以做任何事”
  5. 3、<authorizationStrategy class="hudson.security.GlobalMatrixAuthorizationStrategy">     <permission>hudson.model.Hudson.Administer:test</permission>     <permission>hudson.scm.SCM.Tag:test</permission>
  6. </authorizationStrategy>
  7. 这个权限对应 test用户可以是管理员、打标签权限。

​ admin用户登录还不知道密码是什么,我猜是/root/.jenkins/secrets/initialAdminPassword这个里面的密码,http://这个地方打ip:8080/jenkins/user/admin/configure修改admin密码,也可以点系统管理,在里面找管理用户,点屏幕中上方的admin进去最下面修改密码保存。

(7)安装MAVEN插件

如果在创建项目时候,没有“创建一个Maven 项目”的选项。下图是有这个选项的,如果没有

你需要安装Maven项目插件:Maven Integration plugin 。

​ 点击“可选插件” 然后在右边的过滤输入框中输入搜索关键字: Maven Integration Plugin 或者 Pipeline Maven Integration Plugin ,搜索到了以后,点击直接安装,

安装完成后重启就好了。

(8)工具配置

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

JDK

填写别名:JDK

自动安装前的勾选去掉,在出现的JAVA_HOME里输入:

Git

Path to Git executable

如果不用git,可以点击Delete Git,即可

Maven

填写别名:maven

去掉“自动安装”勾选框, 在MAVEN_HOME输入:

最后点击save按钮保存。

(9)系统配置

主目录

maven配置(仓库和一些maven打包的设置)

邮件设置(由于环境问题,小编没有测试本版块,有需要的童鞋可以自己动手试一试)。

二、构建项目

1、点击新建

出现下图,名字随便起,选择构建一个maven项目

2、构建配置

3、源码配置(git)

这里面的小编的配置的是git ssh 方式配置的git 注意这里面需要的是本机生成的私钥(小编以为是公钥,调试了半天)

点击add窗口

连接git,我们是自己搭的gitlab,需要在gitlab上搜索ssh或者key,找到一个ssh keys字样的,把jenkins服务器的公钥放在上面,另外

4、构建触发器

5、构建mvn

ROOT POM:

1.jenkins只支持一个pom.xml构建,而且要是Git根目录下的相对文件,比如cms的tsbMngr项目打包的话,需要配置ROOT POM:tsbMngr/pom.xml,不管你怎么配,第一次界面会报错,没关系,原因是你本机还没有clone代码,如果clone成功后还是报错,需要自己找下对应的相对路径了。

2、像cms这样的多pom项目,只有一个pom入口怎么办,小编贴一下我这边成功的案例(cms),就是在git根目录下新建一个pom.xml文件,具体配置如下:

  1. <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">
  2. <modelVersion>4.0.0</modelVersion>
  3. <groupId>com.gx</groupId>
  4. <artifactId>tsb</artifactId>
  5. <version>2.0</version>
  6. <packaging>pom</packaging>
  7. <modules>
  8. <module>tsbMngr</module>
  9. <module>tsbService</module>
  10. </modules>
  11. </project>

Golds and options : 对应的mvn打包命令,如果是通过配置文件的方式

例如:按环境名称建立配置文件目录

在src/main/resources目录下面,按照环境名称建立配置文件目录。这里有两个环境:test、product。

具体的打包方式可以参考下面博客。

maven根据不同的运行环境,打包不同的配置文件

6、执行shell

具体的脚本如下(以cms为例):

  1. #!/bin/bash
  2. #defined
  3. TOMCAT_HOME="/home/software/apache-tomcat-8.0.53"
  4. TOMCAT_PORT=8080
  5. PROJECT="tsb"
  6. JENKINS_WORKSPACE="/root/.jenkins/workspace/cms"
  7. WAR_HOME="/apps/jenkins_war"
  8. su service
  9. #echo "cp $JENKINS_WORKSPACE/target/&PROJECT.war $WAR_HOME"
  10. cp $JENKINS_WORKSPACE/tsbMngr/target/$PROJECT*.war $WAR_HOME
  11. cp $JENKINS_WORKSPACE/tsbService/target/$PROJECT*.war $WAR_HOME
  12. #shutdown tomcat (关闭tomcat)
  13. $TOMCAT_HOME/bin/shutdown.sh &
  14. #check tomcat process(查看tomcat对应的状态),下面提供了两种查看项目对应的pid
  15. sleep 3
  16. #tomcat_pid="lsof - i :$TOMCAT_PORT|grep "(LISTEN)" | awk '{print $2}''
  17. tomcat_pid=`ps -ef|grep tomcat|grep start|grep -v 'grep'|awk '{print $2}'`
  18. echo "scan tomcat pid :" $tomcat_pid
  19. while [ -n "$tomcat_pid" ]
  20. do
  21. kill -9 $tomcat_pid
  22. sleep 3
  23. #tomcat_pid="lsof - i :$TOMCAT_PORT|grep "(LISTEN)" | awk '{print $2}''
  24. tomcat_pid=`ps -ef|grep tomcat|grep start|grep -v 'grep'|awk '{print $2}'`
  25. echo "scan tomcat pid :" $tomcat_pid
  26. done
  27. #bak project
  28. echo "scan no tomcat pid,$PROJECT publishing"
  29. #备份War包
  30. tar -czf $WAR_HOME/bak/$PROJECT-bak`date +%H%M%S`.tar.gz $TOMCAT_HOME/webapps/$PROJECT*
  31. sleep 10
  32. rm -rf $TOMCAT_HOME/webapps/$PROJECT* $TOMCAT_HOME/webapps/$PROJECT*.war
  33. #publish project
  34. cp $WAR_HOME/$PROJECT*.war $TOMCAT_HOME/webapps
  35. #remove tmp
  36. rm -rf $WAR_HOME/$PROJECT*.war
  37. #cd $TOMCAT_HOME/webapps
  38. #jar -xvf $PROJECT.war
  39. #start tomcat
  40. export BUILD_ID=dontKillMe
  41. $TOMCAT_HOME/bin/startup.sh &
  42. echo "tomcat is starting.please try to access $PROJECT console url"

过程:jenkins调用git把Gitlab上的代码下载到jenkins服务器,maven构建成war包,调用ssh运行shell脚本完成备份,停服务,清webapps,拷war包到tomcat下,起服务,说起来好简单啊。。。

7、启动服务

jenkins->选择你需要的job->Bulid with parameters

下列是成功的部分控制台日志:查看日志方式操作如下

git拉取代码成功如下所示:

  1. Building in workspace /root/.jenkins/workspace/cms
  2. > /usr/bin/git rev-parse --is-inside-work-tree # timeout=10
  3. Fetching changes from the remote Git repository
  4. > /usr/bin/git config remote.origin.url git@192.168.1.189:OTT/CMS.git # timeout=10
  5. Fetching upstream changes from git@192.168.1.189:OTT/CMS.git
  6. > /usr/bin/git --version # timeout=10
  7. using GIT_SSH to set credentials
  8. > /usr/bin/git fetch --tags --progress git@192.168.1.189:OTT/CMS.git +refs/heads/*:refs/remotes/origin/*
  9. > /usr/bin/git rev-parse refs/remotes/origin/dev^{commit} # timeout=10
  10. > /usr/bin/git rev-parse refs/remotes/origin/origin/dev^{commit} # timeout=10
  11. Checking out Revision 99b2d4d19bb85e457db1ea38952782585200dd13 (refs/remotes/origin/dev)
  12. > /usr/bin/git config core.sparsecheckout # timeout=10
  13. > /usr/bin/git checkout -f 99b2d4d19bb85e457db1ea38952782585200dd13
  14. Commit message: "1:修改版本号为1.3.04 2:添加频道映射时,添加频道别称和标准频道名称是否一致的校验 3:系统出现异常,提示消息改为:系统异常,请联系管理员 4:添加mysql超过8小时自动断链后的处理 5:查询图标当有多个查询项时,修改显示位置 6:修改log表中content字段类型"
  15. > /usr/bin/git rev-list --no-walk 99b2d4d19bb85e457db1ea38952782585200dd13 # timeout=10

maven打包成功如下:

  1. [INFO] Reactor Summary:
  2. [INFO]
  3. [INFO] tsbMngr 1.0.0 ...................................... SUCCESS [ 23.515 s]
  4. [INFO] tsbService 1.0.0 ................................... SUCCESS [ 13.606 s]
  5. [INFO] tsb 2.0 ............................................ SUCCESS [ 0.127 s]
  6. [INFO] ------------------------------------------------------------------------
  7. [INFO] BUILD SUCCESS
  8. [INFO] ------------------------------------------------------------------------
  9. [INFO] Total time: 40.030 s
  10. [INFO] Finished at: 2018-08-18T10:06:46+08:00

启动shell成功脚本如下

  1. [cms] $ /bin/bash /tmp/jenkins5969105122672253127.sh
  2. su: user service does not exist
  3. Aug 18, 2018 10:06:47 AM org.apache.catalina.startup.Catalina stopServer
  4. SEVERE: Could not contact localhost:8005. Tomcat may not be running.
  5. Aug 18, 2018 10:06:47 AM org.apache.catalina.startup.Catalina stopServer
  6. SEVERE: Catalina.stop:
  7. java.net.ConnectException: Connection refused (Connection refused)
  8. at java.net.PlainSocketImpl.socketConnect(Native Method)
  9. at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
  10. at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
  11. at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
  12. at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
  13. at java.net.Socket.connect(Socket.java:589)
  14. at java.net.Socket.connect(Socket.java:538)
  15. at java.net.Socket.<init>(Socket.java:434)
  16. at java.net.Socket.<init>(Socket.java:211)
  17. at org.apache.catalina.startup.Catalina.stopServer(Catalina.java:457)
  18. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  19. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  20. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  21. at java.lang.reflect.Method.invoke(Method.java:498)
  22. at org.apache.catalina.startup.Bootstrap.stopServer(Bootstrap.java:398)
  23. at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:485)
  24. scan tomcat pid :
  25. scan no tomcat pid,tsb publishing
  26. tar: Removing leading `/' from member names
  27. tomcat is starting.please try to access tsb console url
  28. Tomcat started.

8、远程ssh部署tomcat

简单来理解是在jenkins的服务器上git拉取代码、maven打包,然后上传到远程服务器上,启动shell脚本部署的操作。

安装插

点击-系统管理-系统插件-可选插件中 直接搜 publish over ssh 点击安装,安装完之后,重启jenkins。

配置

点击- 系统管理-系统设置-拉到最下面就有这个窗口了,下列是我连接cms连接的环境配置,通过用户名密码连接的,可以通过其他方式连接。具体连接方式大家可以自己去试一试。

ssh Server配置:

startup.sh脚本如下:

  1. TOMCAT_HOME="/home/jenkinstest/apache-tomcat-tsb"
  2. TOMCAT_PORT=8080
  3. PROJECT="tsb"
  4. WAR_HOME="/home/jenkinstest/tmp"
  5. BAK_HOME="/home/jenkinstest/bak"
  6. su service
  7. #shutdown tomcat (关闭tomcat)
  8. $TOMCAT_HOME/bin/shutdown.sh &
  9. #check tomcat process(查看tomcat对应的状态),下面提供了两种查看项目对应的pid
  10. sleep 3
  11. #tomcat_pid="lsof - i :$TOMCAT_PORT|grep "(LISTEN)" | awk '{print $2}''
  12. tomcat_pid=`ps -ef|grep tsb|grep start|grep -v 'grep'|awk '{print $2}'`
  13. echo "scan tomcat pid :" $tomcat_pid
  14. while [ -n "$tomcat_pid" ]
  15. do
  16. kill -9 $tomcat_pid
  17. sleep 3
  18. #tomcat_pid="lsof - i :$TOMCAT_PORT|grep "(LISTEN)" | awk '{print $2}''
  19. tomcat_pid=`ps -ef|grep tsb|grep start|grep -v 'grep'|awk '{print $2}'`
  20. echo "scan tomcat pid :" $tomcat_pid
  21. done
  22. #bak project
  23. echo "scan no tomcat pid,$PROJECT publishing"
  24. #备份War包
  25. tar -czf $BAK_HOME/$PROJECT-bak`date +%H%M%S`.tar.gz $TOMCAT_HOME/webapps/$PROJECT*
  26. sleep 10
  27. rm -rf $TOMCAT_HOME/webapps/$PROJECT* $TOMCAT_HOME/webapps/$PROJECT*.war
  28. #publish project
  29. cp $WAR_HOME/$PROJECT*.war $TOMCAT_HOME/webapps
  30. #remove tmp
  31. rm -rf $WAR_HOME/$PROJECT*.war
  32. #cd $TOMCAT_HOME/webapps
  33. #jar -xvf $PROJECT.war
  34. #start tomcat
  35. export BUILD_ID=dontKillMe
  36. $TOMCAT_HOME/bin/startup.sh &
  37. echo "tomcat is starting.please try to access $PROJECT console url"

  1. Name 这里是自定义的ssh远程服务器,如果有多台,点击add post-build step 继续添加
  2. Source files 源文件地址,相对地址 比如 /root/.jenkins/workspace/jobname/target/xx.war 直接写成 target/xx.war就行
  3. Remove prefix 这里指的是忽略前面的 target/ 远程服务器直接显示就是xx.war
  4. Remote directory 远程服务器要保存的文件目录
  5. Exec command 这里直接写 bash 脚本名称 xx.sh 这里也是远程服务器的脚本

下列是成功部署的控制台日志:

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

注意:1、如果出现Transferred 0 file(s)请注意下你的 Source是jenkins的相对路径,Remote directory是远程服务器的相对路径,Exec command是服务器的绝对路径。

2、报错:请检查对应查找tomcat的脚本是否正确。

  1. ERROR: Exception when publishing, exception message [Exec exit status not zero. Status [2]]
  2. Build step 'Send build artifacts over SSH' changed build result to UNSTABLE

3、此报错信息是你的shell脚本的格式有问题,我这边的解决方案是:拷贝一份centos下tomcat的随便的.sh文件,然后修改,也可以自己修改,具体可以参考解决执行脚本报syntax error: unexpected end of file或syntax error near unexpected token `fi'错误的问题

  1. start.sh: line 47: syntax error: unexpected end of file

jenkins自动化部署的更多相关文章

  1. Linux下的Jenkins+Tomcat+Maven+Gitlab+Shell环境的搭建使用(jenkins自动化部署)

    jenkins自动化部署 目标:jenkins上点构建(也可以自动检查代码变化自动构建)>>>项目部署完成. 一.安装jenkins 1.下载jenkins 这里我选择的是war包安 ...

  2. Linux下的Jenkins+Tomcat+Maven+Git+Shell环境的搭建使用(jenkins自动化部署)【转】

    jenkins自动化部署 目标:jenkins上点构建(也可以自动检查代码变化自动构建)>>>项目部署完成. 一.安装jenkins 1.下载jenkins 这里我选择的是war包安 ...

  3. Jenkins自动化部署代码

    通过jenkins自动化部署项目代码可以大幅度节省打包上传部署的时间,提高开发测试的工作效率 ========== 完美的分割线 =========== 1.Jenkins是什么 1)Jenkins是 ...

  4. Linux下的Jenkins+Tomcat+Maven+Git+Shell环境的搭建使用(jenkins自动化部署)

    jenkins自动化部署 目标:jenkins上点构建(也可以自动检查代码变化自动构建)>>>项目部署完成. 一.安装jenkins 1.下载jenkins 这里我选择的是war包安 ...

  5. AspNetCore容器化(Docker)部署(四) —— Jenkins自动化部署

    一.前言 (Jenkins.Docker.Git/Svn组建一套简单的自动化发布流程) 文章中用到的相关服务器角色 角色 环境 功能 开发机 Win10.Docker(Linux OS) 编码.调试 ...

  6. jenkins自动化部署项目1--下载安装启动(windows)

    年初以来断断续续研究jenkins自动化部署项目,前些天终于搞定了,接下来一点点把做的时候遇到的坑以及自己的心得写下来,方便以后复用. 我的jenkins服务是是部署在windows上的 一.下载安装 ...

  7. Jenkins自动化部署入门详细教程

    大纲 1.背景 在实际开发中,我们经常要一边开发一边测试,当然这里说的测试并不是程序员对自己代码的单元测试,而是同组程序员将代码提交后,由测试人员测试: 或者前后端分离后,经常会修改接口,然后重新部署 ...

  8. Windows环境下实现Jenkins自动化部署

    详见:https://blog.csdn.net/Try_harder_every_day/article/details/79170065 Jenkins自动化部署: 几条具体的思路:1.开发人员将 ...

  9. Jenkins 自动化部署上线

    转载于互联网 jenkins自动化部署项目,通过jenkins 部署来节省运维时间,不需要手动cp上线及版本发布 Jenkins 自动化部署上线 Jenkins Jenkins 自动化部署上线一.Je ...

  10. docker安装jenkins自动化部署

    Docker之Jenkins自动化部署 1.拉取jenkins镜像images(类比:java中的类) docker pull jenkinsci/jenkins:lts 或 docker pull ...

随机推荐

  1. 四则运算(Java)--温铭淇,付夏阳

    GitHub项目地址: https://github.com/fxyJAVA/Calculation 四则运算项目要求: 程序处理用户需求的模式为: Myapp.exe -n num -r size ...

  2. Android-LoaderManager异步加载数据库数据

    LoaderManager异步加载数据库数据,是在(Activity/fragment/其他UI等) 加载大量的本地Database库表数据,由于数据大在加载过程中会导致UI线程阻塞,导致用户体验不好 ...

  3. mysql免安装版 安装配置 (转)

    1. 下载MySQL Community Server 5.6.13 2. 解压MySQL压缩包     将以下载的MySQL压缩包解压到自定义目录下,我的解压目录是:     "D:\Pr ...

  4. DBCC--SHRINKDATABASE

    --DBCC SHRINKDATABASE --收缩数据库 --USAGE: dbcc SHRINKDATABASE ( { 'database_name' | database_id | 0 } [ ...

  5. HTML/HTML5

    HTML/HTML5 一.文档加载顺序. 文档入下,数字编号为加载顺序. <html><!--1--> <head><!--2--> <link ...

  6. Unity运行时保存prefab的方法一则

    unity编辑器在运行状态时,prefab的apply按钮就消失了,其实此时代码访问的话是有效的. 代码如下,将会给transform的右键增加一个save prefab的选项. using Unit ...

  7. Comparable接口——容器中自定义类排序

    1.容器TreeMap,默认根据Key对象中某个属性的从小到大排列元素. (1)如下代码示例,Key是整型数字,所以按照其从小到大的顺序排列 public class TestTreeMap { pu ...

  8. oi之詩

    §3我看到你所说的那位OIer了. §2OIERNAME? §3是的.小心.他已达到了更高的境界.他能阅读我们的思想. §2没关系.他认为我们是代码的一部分. §3我喜欢这个OIer.他做得很好.他从 ...

  9. 在Load average 高的情况下如何鉴别系统瓶颈

    在Load average 高的情况下如何鉴别系统瓶颈.是CPU不足,还是io不够快造成? 或是内存不足? 一:查看系统负载vmstat procs -----------memory-------- ...

  10. php unset变量

    <?php $a="abc"; $b="def"; unset($a,$b); echo $a."\n"; echo $b." ...