tomcat多实例部署jenkins

1.简介:

Jenkins是一个可扩展的、基于Web的工具,用于自动化构建、测试和部署软件项目。它支持各种版本控制系统、构建工具和测试框架,并提供了丰富的插件生态系统来满足不同的需求。

2.优缺点:

优点:

  • 灵活性:Jenkins可以与多种工具和平台集成,支持各种编程语言和技术栈,因此非常灵活适应不同的项目需求。
  • 易用性:Jenkins具有用户友好的Web界面和可视化配置,使得配置和管理任务变得简单易上手。
  • 扩展性:Jenkins拥有丰富的插件生态系统,可以通过插件来扩展其功能,满足特定项目需要。
  • 社区支持:Jenkins拥有庞大的活跃社区,它提供了大量的文档、教程和支持,可以帮助解决常见问题和获取最新的功能和改进。

缺点:

  • 配置复杂:有时,Jenkins的配置可能因其灵活性而变得复杂,特别是在处理复杂的构建和部署流程时。
  • 学习曲线:对于新手来说,学习和理解Jenkins的概念和使用方式可能需要一些时间和努力。

3.工作原理:

Jenkins的工作原理基于事件驱动和插件系统。它通过不断监测源代码管理系统中的代码变更或预定的时间触发事件,然后根据预定义的构建配置和操作来执行构建、测试和部署任务。

  1. 事件驱动机制:
    • 源代码变更事件:Jenkins可以监测源代码管理系统(如Git、SVN)中的代码变更事件。它通过轮询或钩子机制,检查源代码是否发生了变更。
    • 时间触发器:Jenkins还可以按计划(定时触发器)执行构建任务。开发人员可以设置特定的时间或时间表,使Jenkins在指定时间触发构建。
  2. 项目配置:
    • 用户通过Jenkins的Web界面创建或导入项目。在项目配置中,用户可以设置各种参数,如源代码管理、构建触发器、构建参数、构建步骤等。这些配置决定了Jenkins如何执行构建任务。
  3. 构建过程:
    • Jenkins使用定义在项目配置中的构建过程来执行构建任务。构建过程包括一系列步骤,如代码拉取、构建、测试、部署等。每个步骤可以由用户指定或使用插件提供的工具和命令来执行。
  4. 执行构建任务:
    • 当满足设定的构建触发条件(如源代码变更或时间触发)时,Jenkins将自动开始执行构建任务。它会根据项目配置中定义的构建过程逐步执行每个步骤。
  5. 结果和报告:
    • 在构建过程中,Jenkins跟踪记录构建任务的执行状态和结果。它会生成构建日志、报告和统计信息,以供用户查看和分析构建结果。
  6. 插件系统:
    • Jenkins拥有丰富的插件生态系统,用户可以根据项目需要选择并安装插件。这些插件提供了额外的功能和扩展,例如集成测试框架、静态代码分析工具、部署工具等。插件可以通过Jenkins的Web界面进行管理和配置。

4.工作流程:

  1. 配置Jenkins服务器:安装Jenkins并进行初始化配置,设置插件、环境变量、权限等。
  2. 创建或导入项目:在Jenkins中创建新项目或导入现有项目,并设置相关配置,如源代码管理、构建触发器等。
  3. 配置构建过程:定义构建过程,包括编译代码、运行测试、生成文档等。这可以通过脚本命令、构建步骤、构建脚本等方式来实现。
  4. 触发构建:Jenkins可以通过轮询源代码管理系统或根据时间计划来监测项目的变化,一旦有触发条件满足,就会触发构建过程。
  5. 构建执行:Jenkins根据配置的构建流程执行构建任务,包括代码拉取、构建、测试等操作。
  6. 构建结果和报告:Jenkins会记录构建的结果和日志,生成构建报告和统计信息,供团队查看和分析。
  7. 部署或集成:根据需要,Jenkins可以自动将构建的产物部署到目标环境,或与其他工具和平台集成,如持续部署工具、通知系统等。

5.tomcat多实例部署jenkins流程

5.1.环境说明

jenkins需部署在tomcat服务上

操作系统tomcat版本jenkins版本
centos 8tomcat-9.0.80jenkins-2.414.2

5.2.部署前准备工作

//关闭防火墙和selinux
[root@tomcat ~]# systemctl disable --now firewalld
[root@tomcat ~]# setenforce 0
[root@tomcat ~]# vim /etc/selinux/config 
[root@tomcat ~]# reboot  //重启主机生效
[root@tomcat ~]# getenforce
Disabled         //确保selinux状态为disabled

//配置yum源,建议使用阿里云的centos8源
[root@tomcat ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  2495  100  2495    0     0   2338      0  0:00:01  0:00:01 --:--:--  2338
[root@tomcat ~]# yum clean all
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
17 files removed
[root@tomcat ~]# yum makecache 
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
CentOS-8.5.2111 - Base - mirrors.aliyun.com                                           410 kB/s | 4.6 MB     00:11    
CentOS-8.5.2111 - Extras - mirrors.aliyun.com                                          19 kB/s |  10 kB     00:00    
CentOS-8.5.2111 - AppStream - mirrors.aliyun.com                                      757 kB/s | 8.4 MB     00:11    
Metadata cache created.

5.3.多实例部署tomcat

//安装java环境
[root@tomcat ~]# yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel wget vim
[root@tomcat ~]# java -version
openjdk version "1.8.0_312"
OpenJDK Runtime Environment (build 1.8.0_312-b07)
OpenJDK 64-Bit Server VM (build 25.312-b07, mixed mode)

//拉取tomcat软件包
[root@tomcat ~]# wget https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.80/bin/apache-tomcat-9.0.80.tar.gz
--2023-10-10 13:41:29--  https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.80/bin/apache-tomcat-9.0.80.tar.gz
Resolving archive.apache.org (archive.apache.org)... 65.108.204.189, 2a01:4f9:1a:a084::2
Connecting to archive.apache.org (archive.apache.org)|65.108.204.189|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 11692853 (11M) [application/x-gzip]
Saving to: ‘apache-tomcat-9.0.80.tar.gz’

apache-tomcat-9.0.80.tar.gz   100%[===============================================>]  11.15M  25.2KB/s    in 5m 55s  

2023-10-10 13:47:25 (32.1 KB/s) - ‘apache-tomcat-9.0.80.tar.gz’ saved [11692853/11692853]

[root@tomcat ~]# ls
anaconda-ks.cfg  apache-tomcat-9.0.80.tar.gz

//解压tomcat软件包
[root@tomcat ~]# tar xf apache-tomcat-9.0.80.tar.gz 
[root@tomcat ~]# ls
anaconda-ks.cfg  apache-tomcat-9.0.80  apache-tomcat-9.0.80.tar.gz  jenkins.war

//将解压后的目录复制两份放到/usr/local/目录下,一个用于运行jenkins,另一个用来运行tomcat中的项目
[root@tomcat ~]# cp -r apache-tomcat-9.0.80 /usr/local/jenkins
[root@tomcat ~]# cp -r apache-tomcat-9.0.80 /usr/local/tomcat
[root@tomcat ~]# ls /usr/local/ && cd /usr/local/
bin  etc  games  include  jenkins  lib  lib64  libexec  sbin  share  src  tomcat

//更改tomcat中的端口号,与jenkins以示区分
[root@tomcat ~]# cd /usr/local/tomcat/conf/
[root@tomcat conf]# ls
catalina.policy      context.xml           jaspic-providers.xsd  server.xml        tomcat-users.xsd
catalina.properties  jaspic-providers.xml  logging.properties    tomcat-users.xml  web.xml
[root@tomcat conf]# vim server.xml
[root@tomcat conf]# grep -A1 '<Server port' server.xml
<Server port="8006" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
[root@tomcat conf]# grep -A3 '<Connector port' server.xml
    <Connector port="8081" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8444"
               maxParameterCount="1000"
//开启服务,查看端口
[root@tomcat conf]# ../bin/catalina.sh start
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:   
Tomcat started.
[root@tomcat conf]# cd 
[root@tomcat ~]# cd /usr/local/jenkins/
[root@tomcat jenkins]# bin/catalina.sh start
Using CATALINA_BASE:   /usr/local/jenkins
Using CATALINA_HOME:   /usr/local/jenkins
Using CATALINA_TMPDIR: /usr/local/jenkins/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /usr/local/jenkins/bin/bootstrap.jar:/usr/local/jenkins/bin/tomcat-juli.jar
Using CATALINA_OPTS:   
Tomcat started.
[root@tomcat jenkins]# ss -antl
State          Recv-Q         Send-Q                      Local Address:Port                 Peer Address:Port        
LISTEN         0              128                               0.0.0.0:22                        0.0.0.0:*           
LISTEN         0              128                                  [::]:22                           [::]:*           
LISTEN         0              1                      [::ffff:127.0.0.1]:8005                            *:*           
LISTEN         0              1                      [::ffff:127.0.0.1]:8006                            *:*           
LISTEN         0              100                                     *:8080                            *:*           
LISTEN         0              100                                     *:8081                            *:*

5.4.部署jenkins

Jenkins官网https://www.jenkins.io/download/

///安装Jenkins所需要的Java-17-openjdk
[root@tomcat local]# cd jenkins/
[root@tomcat jenkins]# yum -y install java-17-openjdk java-17-openjdk-devel

//由于安装tomcat时安装的Java1.8,但是Jenkins需要Java17,为了防止版本冲突,需要配置jdk的优先级,从而能够同时使用这两个版本
[root@tomcat jenkins]# alternatives --config java  //优先使用java-17-openjdk

There are 2 programs which provide 'java'.

  Selection    Command
-----------------------------------------------
   1           java-17-openjdk.x86_64 (/usr/lib/jvm/java-17-openjdk-17.0.1.0.12-2.el8_5.x86_64/bin/java)
*+ 2           java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.312.b07-2.el8_5.x86_64/jre/bin/java)

Enter to keep the current selection[+], or type selection number: 1
[root@tomcat ~]# bash     //bash使其生效 

//下载jenkins.war的包
[root@tomcat ~]# wget wget https://get.jenkins.io/war-stable/2.414.2/jenkins.war
[root@tomcat ~]# ls
anaconda-ks.cfg  apache-tomcat-9.0.80  apache-tomcat-9.0.80.tar.gz  jenkins.war

////将Jenkins包复制到我们为其准备的其中一个tomcat的/usr/local/jenkins/webapps/目录中去,也就是我们前面复制的jenkins中去
[root@tomcat ~]# cp jenkins.war /usr/local/jenkins/webapps/
[root@tomcat ~]# cd /usr/local/jenkins/webapps/
[root@tomcat webapps]# ls
docs  examples  host-manager  jenkins.war  manager  ROOT

//重启服务后,则会自动解压jenkins.war
[root@tomcat webapps]# ../bin/catalina.sh stop
Using CATALINA_BASE:   /usr/local/jenkins
Using CATALINA_HOME:   /usr/local/jenkins
Using CATALINA_TMPDIR: /usr/local/jenkins/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /usr/local/jenkins/bin/bootstrap.jar:/usr/local/jenkins/bin/tomcat-juli.jar
Using CATALINA_OPTS:   
NOTE: Picked up JDK_JAVA_OPTIONS:  --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
[root@tomcat webapps]# ../bin/catalina.sh start
Using CATALINA_BASE:   /usr/local/jenkins
Using CATALINA_HOME:   /usr/local/jenkins
Using CATALINA_TMPDIR: /usr/local/jenkins/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /usr/local/jenkins/bin/bootstrap.jar:/usr/local/jenkins/bin/tomcat-juli.jar
Using CATALINA_OPTS:   
Tomcat started.
[root@tomcat webapps]# ss -antl
State          Recv-Q         Send-Q                      Local Address:Port                 Peer Address:Port        
LISTEN         0              128                               0.0.0.0:22                        0.0.0.0:*           
LISTEN         0              128                                  [::]:22                           [::]:*           
LISTEN         0              1                      [::ffff:127.0.0.1]:8005                            *:*           
LISTEN         0              1                      [::ffff:127.0.0.1]:8006                            *:*           
LISTEN         0              100                                     *:8080                            *:*           
LISTEN         0              100                                     *:8081                            *:*
[root@tomcat webapps]# ls      //jenkins自动解压
docs  examples  host-manager  jenkins  jenkins.war  manager  ROOT

访问jenkins页面
在这里插入图片描述

[root@tomcat webapps]# cat /root/.jenkins/secrets/initialAdminPassword
3a5952875fdc4a4c91fc87d480f32338

安装推荐插件
在这里插入图片描述
在这里插入图片描述

创建一个用户
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
部署完成

5.5.创建一个jenkins项目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

测试
在这里插入图片描述

5.6.配置jenkins自动拉取项目,进行打包(maven),并将包传输到tomcat的项目目录(webapps)中

安装所需的软件包

[root@tomcat ~]# yum -y install git maven
[root@tomcat ~]# which git
/usr/bin/git
[root@tomcat ~]# which mvn
/usr/bin/mvn

修改test项目的流水线脚本内容
在这里插入图片描述
在这里插入图片描述

脚本内容:
//在gitee网站上拉取一个项目目录,然后领用mvn命令压缩至我们想要的.war格式,再将压缩包放置到tomcat的项目目录中,重启tomcat服务后自动解压,从而能够通过tomcat服务端口号访问到我们拉取的项目网页
pipeline {
    agent any
    stages {
        stage('pull code and package') {
            steps {
                git 'https://gitee.com/forgotten/tomcat-java-demo.git'
                sh 'mvn clean package'
            }
        }
        stage('publish') {
            steps {       
                sh 'cp /root/tomcat-java-demo/target/ly-simple-tomcat-0.0.1-SNAPSHOT.war /usr/local/tomcat/webapps/ftx.war'
                sh '/usr/local/tomcat/bin/catalina.sh stop && /usr/local/tomcat/bin/catalina.sh start'
           }
        }
    }
}

在这里插入图片描述

通过jenkins压缩的包存放位置

[root@tomcat target]# ls
classes            ly-simple-tomcat-0.0.1-SNAPSHOT      maven-archiver
generated-sources  ly-simple-tomcat-0.0.1-SNAPSHOT.war  maven-status
[root@tomcat target]# pwd
/root/.jenkins/workspace/test/target

进入tomcat项目进行查看

[root@tomcat webapps]# pwd
/usr/local/tomcat/webapps
[root@tomcat webapps]# ls
docs  examples  ftx  ftx.war  host-manager  manager  ROOT

通过8081端口访问我们拉取的项目

generated-sources ly-simple-tomcat-0.0.1-SNAPSHOT.war maven-status
[root@tomcat target]# pwd
/root/.jenkins/workspace/test/target




**进入tomcat项目进行查看**

~~~powershell
[root@tomcat webapps]# pwd
/usr/local/tomcat/webapps
[root@tomcat webapps]# ls
docs  examples  ftx  ftx.war  host-manager  manager  ROOT

通过8081端口访问我们拉取的项目

在这里插入图片描述
访问成功

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐