天翎MyApps技术社区 - 低代码平台 | 流程管理系统 | BPM软件

 找回密码
 注册成为天翎用户
查看: 2481|回复: 2

[运维] Jenkins部署MyApps4.1(Linux)

[复制链接]
Chain 发表于 2020-9-13 14:18:33 | 显示全部楼层 |阅读模式
1.安装java jdk

1.1把下载好的jdk 上传到自己创建的目录或者指定的目录中

1.2例如自己创建一个文件夹为java  使用命令 mkdir java

1.3解压上传的java jdk 使用  jdk-8u251-linux-x64.tar.gz

1.4配置java系统环境变量
  1. vi /etc/profile
  2. 在profile文件最后面加上;
  3. export JAVA_HOME=/java/jdk1.8.0_251
  4. export PATH=$JAVA_HOME/bin:$PATH
  5. export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
复制代码
1.5 重新加载环境变量
  1. source /etc/profile
复制代码


2.安装maven

2.1.1把下载好的maven上传自己创建的目录或者指定的目录中

2.1.2解压上传 maven
  1. tar -zxvf apache-maven-3.6.3-bin.tar.gz
复制代码
2.1.3配置maven系统环境变量
  1. vi /etc/profile
  2. 在profile文件最后面加上;
  3. export PATH=apache-maven-3.6.3-bin/bin:$PATH
复制代码
2.1.4 重新加载环境变量
  1. source /etc/profile
复制代码


3.安装Jenkins

3.1 yum库的repo中默认没有Jenkins,需要先将Jenkins存储库添加到yum repos enkins的RPM仓库配置被加/etc/yum.repos.d/jenkins.repo

Jenkins部署.jpg
  1. #添加jenkins官方repos
  2. sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
  3. sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key #导入秘钥
  4. #安装jenkins
  5. yum install jenkins
复制代码
  1. vi /etc/sysconfig/jenkins
复制代码
注意:找到修改端口号:JENKINS_PORT="8080"  此端口不冲突可以不修改

4.启动Jenkins
  1. service jenkins start/stop/restart
复制代码
4.1安装成功后Jenkins将作为一个守护进程随系统启动

4.2系统会创建一个“jenkins”用户来允许这个服务,如果改变服务所有者,同时需要修改/var/log/jenkins, /var/lib/jenkins, 和/var/cache/jenkins的所有者

4.3启动的时候将从/etc/sysconfig/jenkins获取配置参数

4.4默认情况下,Jenkins运行在8080端口,在浏览器中直接访问该端进行服务配置



5.打开jenkins界面

5.1在浏览器中访问  我的地址是这个:192.168.88.215:8080

首次进入会要求输入初始密码如下图:


Jenkins部署01.jpg


初始密码在:
  1. /var/lib/jenkins/secrets/initialAdminPassword
复制代码
选择“Install suggested plugins”安装默认的插件,下面Jenkins就会自己去下载相关的插件进行安装。

Jenkins部署02.jpg

Jenkins部署03.jpg

创建超级管理员账号

Jenkins部署04.jpg

Jenkins部署05.jpg

配置完毕后前端打开的界面是这个样子的:


Jenkins部署06.jpg

6.配置全局环境变量设置

6.1进入:系统管理 / Global Tool Configuration

JDK 下不勾选“自动安装”,指定别名=jdk1.8.0_215  JAVA_HOME=/usr/java/jdk1.8.0_215

Jenkins部署07.jpg

6.2 Maven 配置:

Maven 下不勾选“自动安装”,指定别名=Maven-3.6.3, MAVEN_HOME=/opt/apache-maven-3.6.3


Jenkins部署08.jpg

7.插件说明和安装教程

Subversion Plug-in # 版本管理 SVN 的插件

Git plugin #版本管理 GIT 的插件

Maven Integration plugin #项目构建 Maven 的插件

Publish Over SSH #实现文件上传到远程服务器

进入:Manage Jenkins / Manage Plugins / 可选插件

查找并勾选所需插件,点击“直接安装”;

无需重启 Jenkins 插件即生效。如遇失败可重试或离线安装。


Jenkins部署09.jpg

Jenkins部署10.jpg

8.Publish Over SSH插件配置

8.1进入:Manage Jenkins / Configure System  

Jenkins部署11.jpg

我是使用密码的方式进行ssh服务器,在Passphrase/Password填写对应的密码即可,还有其他四项内容如下:

Name是给sshserver自定义一个名称

Hostname是ssh服务器的地址

Username是ssh服务器的用户名

Remote Directory是需要上传文件到服务器的远程目录 直接写/即可

填写基本信息完成后可以点击Test Configuration测试下是否连接正常,信息都正确后点击应用Apply,一个ssh服务器就配置好了,剩下的就是要在项目配置的时候使用已填的ssh服务器进行操作。


9.构建项目

Jenkins部署12.jpg

Jenkins部署13.jpg

确定后,配置项目的源码管理,构建触发器

Jenkins部署14.jpg

Jenkins部署15.jpg

9.1 Module:指svn上的模块。一个任务中可以添加多个不同来源的svn模块。
注解:
Repository URL:svn代码仓库的地址。
Credentials:访问svn代码仓库所需的账号密码。进入:Manage Jenkins / Manage Credentials 中添加svn对于的账号和密码
Local module directory:svn检出到本机的文件夹路径
Repository depth:需要检出的文件夹深度,一般设为infinity(配置文件夹下的所有文件,包括子文件夹)具体说明可见插件帮助。
Ignore externals / Additional Credentials:未用到,不作说明。
Check-out Strategy:更新svn到本地的几种方式。建议使用 Use 'svn update' as much as possible, with 'svn revert' before update (先放弃所有本地修改,然后尽可能进行svn更新。避免本地修改导致本地项目与代码仓库不一致)

通过插件进行svn更新的情况,插件可提供若干参数(svn版本号及svn路径),供其它shell或插件使用,可参考官方文档(注意当配置了多个模块时的参数名命名方式):

Jenkins部署15.1.jpg

脚本方式(Shell)
脚本方式下,只需了解svn所支持的命令列表,即可在shell中自行配置。其自由度相比插件更高,可以方便地对特殊需求进行处理。
常用命令包括:
检出  svn checkout
更新  svn update
取消本地修改 svn revert
清理本地项目 svn cleanup
向代码仓库新增文件 svn add
提交到代码仓库  svn commit
脚本方式下取得svn 版本号可以通过shell的sed命令:
  1. build_svn_version=`svnversion  ${clientPath} |sed 's/^.*://' |sed 's/[A-Z]*$//'`
复制代码
上述语句中${clientPath}为本地svn项目的根目录(即包含了.svn隐藏文件夹的目录),build_svn_version存放了取出的svn版本号。

9.2Build 设置
Root POM: 指定 pom.xml 相对路径
Goals and options: 指定 mvn 执行目标或选项,设置为
clean install -Dmaven.test.skip=true

Jenkins部署16.jpg

9.3Post Steps 设置
定制构建后的操作,通常选择“Run only if build succeeds”,然后选择 Send files or execute commands over SSH

Jenkins部署17.jpg

Jenkins部署18.jpg

注解:
Name : 这里是自定义的ssh远程服务器,如果有多台,点击add post-build step 继续添加
Source files : 源文件地址,相对地址
Remove prefix : 忽略前缀路径
Remote directory : 远程服务器要保存的文件目录
Exec command : 直接写shell脚本,或远程服务器的脚本名称
  1. #!bin/bash
  2. TOMCAT_JENKINS='/opt/tomcat/apache-tomcat-8.5.53/jenkins'
  3. TOMCAT_HOME='/opt/tomcat/apache-tomcat-8.5.53'
  4. TOMCAT_BACK='/opt/tomcat/apache-tomcat-8.5.53/back'
  5. PROJECT_WARNAME='obpm'
  6. PROJECT_WORKSPACE='WEB-INF/workspace'
  7. PROJECT_UPLOADS='uploads'
  8. TOMCAT_DATE=$(date '+%Y-%m-%d_%H:%M')

  9. #echo '停止Tomcat'
  10. Monitor(){
  11.         echo "[$(date +'%F %H:%M:%S')]"
  12.         #第一次检查,是否存在,然后尝试使用shutdown关闭tomcat
  13.         tomcatPid_1=$(ps -ef|grep tomcat |grep jdk | awk '{print $2}')
  14.         echo "Tomcat的pid为:$tomcatPid_1"
  15.     if [ "$tomcatPid_1" ]
  16.                 then
  17.                 echo "=*=Tomcat运行正常,现在关闭,并清空缓存"
  18.                 sh ${TOMCAT_HOME}/bin/shutdown.sh
  19.                 #第二次检查,shutdown结果,然后尝试使用kill关闭tomcat
  20.                 tomcatPid_2=$(ps -ef|grep tomcat |grep jdk | awk '{print $2}')
  21.                 if [ "$tomcatPid_2" ]
  22.                         then
  23.                         kill -9 $tomcatPid_2
  24.                         #第三次检查,kill结果
  25.                         tomcatPid_3=$(ps -ef|grep tomcat |grep jdk | awk '{print $2}')
  26.                         if [ "$tomcatPid_3" ]
  27.                                 then
  28.                                 echo "        Tomcat进程kill失败,这个基本不可能"
  29.                         else
  30.                                 echo "        Tomcat关闭成功For Kill"
  31.                         fi
  32.                 else
  33.                         echo "        shutdown.sh停止Tomcat成功"
  34.                 fi               
  35.         else
  36.                 echo "        Tomcat之前并没有启动"
  37.         fi
  38.        
  39. }
  40. Monitor
  41. #尝试清缓存/work/Catalina
  42. if [ ! -d ${TOMCAT_HOME}"/work/Catalina" ];
  43.         then
  44.         echo "/work/Catalian不存在"
  45. else
  46.         rm -rf ${TOMCAT_HOME}"/work/Catalina"
  47.         echo "/work/Catalina存在,现已删除"
  48. fi
  49. #尝试清日志
  50. if ![ -f ${TOMCAT_HOME}"/logs/catalina.out" ]
  51.         then
  52.         echo "/logs/catalina.out不存在"
  53. else
  54.         cd ${TOMCAT_HOME}/logs
  55.         rm -rf *
  56.         echo "tomcat日志文件存在,现已删除"
  57. fi
  58. #尝试清缓存/conf/Catalina
  59. if [ ! -d ${TOMCAT_HOME}"/conf/Catalina" ]
  60.         then
  61.         echo "/conf/Catalina不存在"
  62. else
  63.         rm -rf ${TOMCAT_HOME}"/conf/Catalina"
  64.         echo "/conf/Catalina存在,现已删除"
  65. fi

  66. #echo '备份obpm.war 备份obpm'
  67. cp ${TOMCAT_HOME}/webapps/${PROJECT_WARNAME}.war ${TOMCAT_BACK}/${TOMCAT_DATE}.war
  68. cp -r ${TOMCAT_HOME}/webapps/${PROJECT_WARNAME} ${TOMCAT_BACK}/${TOMCAT_DATE}

  69. #echo '删除文件'
  70. rm -rf ${TOMCAT_HOME}/webapps/${PROJECT_WARNAME}.war
  71. rm -rf ${TOMCAT_HOME}/webapps/${PROJECT_WARNAME}

  72. #echo '复制最新的项目war 到 webapps'
  73. cp ${TOMCAT_JENKINS}/${PROJECT_WARNAME}.war ${TOMCAT_HOME}/webapps/

  74. #echo '解压war'
  75. jar -xvf ${TOMCAT_HOME}/webapps/${PROJECT_WARNAME}.war

  76. #echo '删除解压后的war文件中的 workspace'
  77. rm -rf ${TOMCAT_HOME}/webapps/${PROJECT_WARNAME}/${PROJECT_WORKSPACE}

  78. #echo '删除解压后的war文件中的 uploads'
  79. rm -rf ${TOMCAT_HOME}/webapps/${PROJECT_WARNAME}/${PROJECT_UPLOADS}

  80. #echo '复制备份的项目 webapps 到 最新解压后的项目的webapps'
  81. cp -r ${TOMCAT_BACK}/${TOMCAT_DATE}/${PROJECT_WARNAME}/${PROJECT_WORKSPACE} ${TOMCAT_HOME}/webapps/${PROJECT_WARNAME}/${PROJECT_WORKSPACE}

  82. #echo '复制备份的项目 uploads 到 最新解压后的项目的uploads'
  83. cp -r ${TOMCAT_BACK}/${TOMCAT_DATE}/${PROJECT_WARNAME}/${PROJECT_UPLOADS} ${TOMCAT_HOME}/webapps/${PROJECT_WARNAME}/${PROJECT_UPLOADS}

  84. #echo '启动Tomcat'
  85. sh ${TOMCAT_HOME}/bin/startup.sh
复制代码


Source files必须配置为jar包的相对地址,此相对地址即workspace后面的地址(不包含workspace)
例如:目标文件路径是/var/lib/jenkins/jobs/xxx-web/workspace/target/xxx-web-1.1.war
那么你的
Source files的值就是target/*.war
Remove prefix就是target/
Remote directory的值取决于Jenkins -> configuration -> Publish over SSH设置中的Remote Directory参数

Jenkins部署19.jpg

Jenkins -> configuration -> Publish over SSH设置中的Remote Directory参数值拼上 任务构建-> Post-build Actions 的 Remote directory参数值即为 远程服务器要保存的文件目录

9.4 手工触发构建
进入 My Views, 右侧看到各个项目;
点击进入关注的项目,点击左侧的“立即构建”;

Jenkins部署20.jpg

开始构建或构建完毕后,左下方列出每次构建的链接,点击进入某次构建;
点击左侧的“Console Output”,可查看构建日志,如有报错可以看到;


Jenkins部署21.jpg
 楼主| Chain 发表于 2020-9-13 14:59:56 | 显示全部楼层
10.报错排查记录

10.1远程启动tomcat报错:
  1. either the JAVA_HOME nor the JRE_HOME environment variable is defined
  2. At least one of these environment variable is needed to run this program
复制代码
10.2在执行jenkins 通过ssh远程操作重启tomcat时,出现了以上错误。明显是环境变量问题,但是服务环境变量是无误的。
有2种解决方案

10.3如果是在 /etc/profile 中导入的环境变量,那么在/root/.bashrc中加入相同环境变量
  1. export JAVA_HOME=/home/jdk1.8.0_181
  2. export PATH=$JAVA_HOME/bin:$PATH
  3. export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
  4. #并执行 使其用户的环境变量生效
  5. source /root/.bashrc
复制代码
10.4直接在重启脚本中加入
  1. #!/bin/sh
  2. export JAVA_HOME=/home/jdk1.8.0_181
  3. export PATH=$JAVA_HOME/bin:$PATH
  4. export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

  5. TOMCAT_PATH=$1bin

  6. echo "TOMCAT_PATH is $TOMCAT_PATH"

  7. PID=`ps aux | grep $1 | grep java | awk '{print $2}'`

  8. if [ -n "$PID" ]; then
  9.     echo "Will shutdown tomcat: $PID"
  10.     $TOMCAT_PATH/shutdown.sh -force
  11.     sleep 5
  12. else echo "No Tomcat Process $PID"
  13. fi

  14. sleep 1

  15. $TOMCAT_PATH/startup.sh
复制代码

 楼主| Chain 发表于 2020-9-13 15:01:41 | 显示全部楼层
原文转载:https://blog.csdn.net/qq_33645580/article/details/108531341

文档版本: Centos Jenkins 部署MyApps 4.1文档.rar (1.28 MB, 下载次数: 2015)

本版积分规则

QQ|手机版|天翎MyApps技术社区 ( 粤ICP备11093750号 )

GMT+8, 2026-8-12 06:36

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表