jenkins持续集成

一、持续集成

1. 什么是持续集成

     持续集成指的是频繁地将代码jicheng到主干。将团建个人研发的部分向关键整体部分交付,频繁进行集成以便更快的发现其中的错误。

1)开发人员定期向享存储库提交代码

2)监视版本控制系统,当检测到提交时,将自动触发构建

3)如果构建不是绿色的,将立即通知开发人员

2. 持续集成的原因

     尽可能早的在开发生命周期中检测问题或bug(由于整个代码库是不断集成、构建和测试的,所以潜在的bug和错误在生命周期的早期被捕获,从而带来更好的软件质量)。

 3. 持续交付

     持续交付指的是频繁的将软件的新版本交付给质量团队或用户,以供评审。评审通过,代码就进入生产阶段。

     持续交付在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的【类生产环境】中。持续交付优先于整个产品生命周期的软件部署,建立在高水平自动化持续集成之上。

4. 持续部署

    持续部署是持续交付的下一步,指的是代码通过评审后,自动部署到生产环境。

    持续部署的目标是,代码在任何时刻都是可部署的,可以进入生产阶段。

    持续部署的前提是能自动化完成测试、构建、部署等步骤。

总的来说,持续集成、持续交付、持续部署提供了一个优秀的 DevOps 环境。

软件的开发和发布,已经形成了一套标准的流程,假如把开发流程分为以下几个阶段:

编码—>构建—>集成—>测试—>交付—>部署

   可以看出:持续集成(Continuous Integration)、持续交付(Continuous Delivery)和持续部署(Continuous Deployment)有着不同的软件自动化交付周期

二、Jenkins介绍与安装

1、Jenkins基础介绍

Jenkins是一个开源的、可扩展的持续集成、交付、部署(软件/代码的编译、打包、部署)的基于web界面的平台。允许持续集成和持续交付项目,无论用的是什么平台,可以处理任何类型的构建或持续集成。它是一个用java编写的开源持续集成工具。

官网:https://jenkins.io/

2、Jenkins的安装需求与安装过程

1)服务器要求:

256 MB 内存,建议大于 512 MB、1GB的硬盘空间

2)需要安装以下软件:

Java 8 ( JRE 或者 JDK 都可以)

[root@web01 tools]# rpm -ivh jdk-8u251-linux-x64.rpm

配置环境变量

[root@web01 tools]# cat >> /etc/profile << EOF
> export JAVA_HOME=/usr/java/jdk1.8.0_251-amd64
> export PATH=$JAVA_HOME/bin:$PATH
> export CLASSPATH=.:JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPATH
> EOF
[root@web01 tools]# source /etc/profile
[root@web01 tools]# java -version
java version "1.8.0_251"
Java(TM) SE Runtime Environment (build 1.8.0_251-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.251-b08, mixed mode)

下载与安装过程:

首先,从Jenkins官方网站https://jenkins.io/下载最新的war包。虽然Jenkins提供了Windows、Linux、OS X等各种安装程序,但是,这些安装程序都没有war包好使。

[root@web01 tools]# pwd
/server/tools
[root@web01 tools]# ll
total 689180
-rw-r--r--. 1 root root 458966418 Mar  5  2019 gitlab-ce-11.6.10-ce.0.el7.x86_64.rpm
-rw-r--r--  1 root root 179472367 May 19  2020 jdk-8u251-linux-x64.rpm
-rw-r--r--  1 root root  67270143 Jan 10 19:18 jenkins.war

这里以Linux为例,下载Jenkins的war包以后,打开终端进入到下载目录,运行如下命令:

java -jar jenkins.war

[root@web01 tools]# java -jar jenkins.war --httpPort=8090

 

2021-01-10 12:04:34.064+0000 [id=28]    INFO    jenkins.InitReactorRunner$1#onAttained: Completed initialization
2021-01-10 12:04:34.111+0000 [id=20]    INFO    hudson.WebAppMain$3#run: Jenkins is fully up and running

Jenkins就启动成功了!它的war包自带Jetty服务器,剩下的工作我们全部在浏览器中进行。

第一次启动Jenkins时,出于安全考虑,Jenkins会自动生成一个随机的按照口令。

[root@web01 ~]# cat /root/.jenkins/secrets/initialAdminPassword
634e9bfe4ced4e48a5adf7716d43ed96

注意控制台输出的口令,复制下来,然后在浏览器输入:http://ip:8090,接着粘贴口令,进入安装界面,如果执行默认的安装,Jenkins就自动配置好了Maven、git等常用插件。

最后,创建一个admin用户,完成安装。

安装成功!!!!登录web界面

三、创建并运行第一个jenkins Job

 

四、创建并运行基于maven的jenkins项目

maven是java的构建工具

1. 创建maven项目

源代码管理使用github上的maven项目代码,链接:https://github.com/jleetutorial/maven-project.git

2. 执行立即构建

3. 在控制台查看构建过程

 

构建成功!!!

4. 在web页面上查看job的工作空间

在工作空间中看到Maven的pom.xml文件:描述正在构建的软件羡慕,包括:其他外部模块的依赖;目录结构;所需插件;为执行某些指定yu定义的目标,例如:编译和打包。

Maven构建生命周期有以下阶段:

验证(validate):验证项目是正确的,所有必要的信息都是可用的

编译(compile):编译项目的源代码

测试(test):使用合适的单元测试框架测试已编译的源代码

打包(package):将编译后的代码打包成可分发的格式

检查(verify):运行任何检查,以验证包是否有效和满足质量标准

安装(install):将包安装到本地存储库中,以便在本地其他项目中作为依赖项使用

部署(deploy):将最终包复制到远程存储库,以便于其他开发人员和项目共享

Maven构建阶段:以上生命周期阶段按顺序执行,已完成默认生命周期。在该项目中我们指定mavende package命令,这个命令会执行它之前的每个生命周期阶段,包括在执行package命令之前的validate、compile、test这些命令。

5. 配置Jenkins定期检查源代码更新

设置对源代码控制轮询的构建触发器,一旦源代码发生变化,job就会触发构建。

 6. 归档构建artifacts

        持续集成工作流如图所示:

 

       jenkins的构建产物是指jenkins在每一次任务构建成功后所产生的war包或者jar包。通常这个构建产物会保存在当前构建任务的工作空间下的target目录下。jenkins可以存储构建生成的二进制构建产物副本。并允许从构建产物页面直接下载构建的二进制文件。

      

 五、Staging环境安装和配置tomcat

Tomcat 是一个开源的 web 服务器,它提供了一个“纯 Java”
 HTTP web 服务器环境,可以在上面运行 Java 代码

1. 下载tomcat包到服务器上

[root@web01 tools]# ls -lrt apache-tomcat-9.0.35.tar.gz 
-rw-r--r-- 1 root root 11188192 May 19  2020 apache-tomcat-9.0.35.tar.gz
[root@web01 tools]# mkdir /server/software
[root@web01 tools]# cp apache-tomcat-9.0.35.tar.gz /server/software/
[root@web01 tools]# ll /server/software/
total 10928
-rw-r--r-- 1 root root 11188192 Jan 17 12:08 apache-tomcat-9.0.35.tar.gz

2. 解压

[root@web01 tools]# cd /server/software/
[root@web01 software]# ll
total 10928
-rw-r--r-- 1 root root 11188192 Jan 17 12:08 apache-tomcat-9.0.35.tar.gz
[root@web01 software]# tar -zxvf apache-tomcat-9.0.35.tar.gz 

3. 修改tomcat端口号9000

tomcat默认端口为8080,但是目前服务器8080端口已被用。

复制代码
[root@web01 software]# ll
total 10932
drwxr-xr-x 9 root root     4096 Jan 17 12:09 apache-tomcat-9.0.35
-rw-r--r-- 1 root root 11188192 Jan 17 12:08 apache-tomcat-9.0.35.tar.gz
[root@web01 software]# cd apache-tomcat-9.0.35
[root@web01 apache-tomcat-9.0.35]# ll
total 144
drwxr-x--- 2 root root  4096 Jan 17 12:09 bin
-rw-r----- 1 root root 18982 May  6  2020 BUILDING.txt
drwx------ 2 root root  4096 May  6  2020 conf
-rw-r----- 1 root root  5409 May  6  2020 CONTRIBUTING.md
drwxr-x--- 2 root root  4096 Jan 17 12:09 lib
-rw-r----- 1 root root 57092 May  6  2020 LICENSE
drwxr-x--- 2 root root  4096 May  6  2020 logs
-rw-r----- 1 root root  2333 May  6  2020 NOTICE
-rw-r----- 1 root root  3255 May  6  2020 README.md
-rw-r----- 1 root root  6898 May  6  2020 RELEASE-NOTES
-rw-r----- 1 root root 16262 May  6  2020 RUNNING.txt
drwxr-x--- 2 root root  4096 Jan 17 12:09 temp
drwxr-x--- 7 root root  4096 May  6  2020 webapps
drwxr-x--- 2 root root  4096 May  6  2020 work
[root@web01 apache-tomcat-9.0.35]# cd conf/
[root@web01 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@web01 conf]# vim server.xml 
[root@web01 conf]# cat server.xml |grep 9000
    <Connector port="9000" protocol="HTTP/1.1"
复制代码

4. 启动tomcat

复制代码
[root@web01 conf]# cd ..
[root@web01 apache-tomcat-9.0.35]# ll
total 144
drwxr-x--- 2 root root  4096 Jan 17 12:09 bin
-rw-r----- 1 root root 18982 May  6  2020 BUILDING.txt
drwx------ 2 root root  4096 Jan 17 12:13 conf
-rw-r----- 1 root root  5409 May  6  2020 CONTRIBUTING.md
drwxr-x--- 2 root root  4096 Jan 17 12:09 lib
-rw-r----- 1 root root 57092 May  6  2020 LICENSE
drwxr-x--- 2 root root  4096 May  6  2020 logs
-rw-r----- 1 root root  2333 May  6  2020 NOTICE
-rw-r----- 1 root root  3255 May  6  2020 README.md
-rw-r----- 1 root root  6898 May  6  2020 RELEASE-NOTES
-rw-r----- 1 root root 16262 May  6  2020 RUNNING.txt
drwxr-x--- 2 root root  4096 Jan 17 12:09 temp
drwxr-x--- 7 root root  4096 May  6  2020 webapps
drwxr-x--- 2 root root  4096 May  6  2020 work
[root@web01 apache-tomcat-9.0.35]# cd bin
[root@web01 bin]# ll
total 872
-rw-r----- 1 root root  35137 May  6  2020 bootstrap.jar
-rw-r----- 1 root root  16608 May  6  2020 catalina.bat
-rwxr-x--- 1 root root  24397 May  6  2020 catalina.sh
-rw-r----- 1 root root   1664 May  6  2020 catalina-tasks.xml
-rw-r----- 1 root root   2123 May  6  2020 ciphers.bat
-rwxr-x--- 1 root root   1997 May  6  2020 ciphers.sh
-rw-r----- 1 root root  25197 May  6  2020 commons-daemon.jar
-rw-r----- 1 root root 206895 May  6  2020 commons-daemon-native.tar.gz
-rw-r----- 1 root root   2040 May  6  2020 configtest.bat
-rwxr-x--- 1 root root   1922 May  6  2020 configtest.sh
-rwxr-x--- 1 root root   9127 May  6  2020 daemon.sh
-rw-r----- 1 root root   2091 May  6  2020 digest.bat
-rwxr-x--- 1 root root   1965 May  6  2020 digest.sh
-rw-r----- 1 root root   3606 May  6  2020 makebase.bat
-rwxr-x--- 1 root root   3382 May  6  2020 makebase.sh
-rw-r----- 1 root root   3460 May  6  2020 setclasspath.bat
-rwxr-x--- 1 root root   3708 May  6  2020 setclasspath.sh
-rw-r----- 1 root root   2020 May  6  2020 shutdown.bat
-rwxr-x--- 1 root root   1902 May  6  2020 shutdown.sh
-rw-r----- 1 root root   2022 May  6  2020 startup.bat
-rwxr-x--- 1 root root   1904 May  6  2020 startup.sh
-rw-r----- 1 root root  49324 May  6  2020 tomcat-juli.jar
-rw-r----- 1 root root 419572 May  6  2020 tomcat-native.tar.gz
-rw-r----- 1 root root   4574 May  6  2020 tool-wrapper.bat
-rwxr-x--- 1 root root   5540 May  6  2020 tool-wrapper.sh
-rw-r----- 1 root root   2026 May  6  2020 version.bat
-rwxr-x--- 1 root root   1908 May  6  2020 version.sh
[root@web01 bin]# ./startup.sh 
Using CATALINA_BASE:   /server/software/apache-tomcat-9.0.35
Using CATALINA_HOME:   /server/software/apache-tomcat-9.0.35
Using CATALINA_TMPDIR: /server/software/apache-tomcat-9.0.35/temp
Using JRE_HOME:        /usr/java/jdk1.8.0_251-amd64
Using CLASSPATH:       /server/software/apache-tomcat-9.0.35/bin/bootstrap.jar:/server/software/apache-tomcat-9.0.35/bin/tomcat-juli.jar
Tomcat started.
复制代码

5. 浏览器

在浏览器输入: http://10.0.0.7:9000/

6. 修改用户和角色,为了将应用程序部署到tomcat上,有执行权限

复制代码
[root@web01 bin]# cd ..
[root@web01 apache-tomcat-9.0.35]# cd conf
[root@web01 conf]# ls
Catalina         catalina.properties  jaspic-providers.xml  logging.properties  tomcat-users.xml  web.xml
catalina.policy  context.xml          jaspic-providers.xsd  server.xml          tomcat-users.xsd
[root@web01 conf]# cp tomcat-users.xml tomcat-users.bakxml
[root@web01 conf]# vim tomcat-users.xml 
[root@web01 conf]# tail -20 tomcat-users.xml 
<!--
  NOTE:  By default, no user is included in the "manager-gui" role required
  to operate the "/manager/html" web application.  If you wish to use this app,
  you must define such a user - the username and password are arbitrary. It is
  strongly recommended that you do NOT use one of the users in the commented out
  section below since they are intended for use with the examples web
  application.
-->
<!--
  NOTE:  The sample user and role entries below are intended for use with the
  examples web application. They are wrapped in a comment and thus are ignored
  when reading this file. If you wish to configure these users for use with the
  examples web application, do not forget to remove the <!.. ..> that surrounds
  them. You will also need to set the passwords to something appropriate.
-->

  <role rolename="manager-script"/>
  <role rolename="admin-gui"/>
  <user username="tomcat" password="tomcat" roles="manager-script,admin-gui"/>
</tomcat-users>
复制代码

7. 重启tomcat

复制代码
[root@web01 bin]# ./shutdown.sh 
Using CATALINA_BASE:   /server/software/apache-tomcat-9.0.35
Using CATALINA_HOME:   /server/software/apache-tomcat-9.0.35
Using CATALINA_TMPDIR: /server/software/apache-tomcat-9.0.35/temp
Using JRE_HOME:        /usr/java/jdk1.8.0_251-amd64
Using CLASSPATH:       /server/software/apache-tomcat-9.0.35/bin/bootstrap.jar:/server/software/apache-tomcat-9.0.35/bin/tomcat-juli.jar
[root@web01 bin]# netstat -lntup |grep 9000
[root@web01 bin]# ./startup.sh 
Using CATALINA_BASE:   /server/software/apache-tomcat-9.0.35
Using CATALINA_HOME:   /server/software/apache-tomcat-9.0.35
Using CATALINA_TMPDIR: /server/software/apache-tomcat-9.0.35/temp
Using JRE_HOME:        /usr/java/jdk1.8.0_251-amd64
Using CLASSPATH:       /server/software/apache-tomcat-9.0.35/bin/bootstrap.jar:/server/software/apache-tomcat-9.0.35/bin/tomcat-juli.jar
Tomcat started.
[root@web01 bin]# netstat -lntup |grep 9000
tcp6       0      0 :::9000                 :::*                    LISTEN      11289/java          
复制代码

六、将应用程序部署到staging环境上

1. 安装插件copy artifact和deploy to container

插件安装完成

2. 部署artifacts到tomcat上

构建一个新项目

由上个maven-project项目触发deploy-to-staging项目,开始立即构建maven-project项目

构建失败,报错如下:

定位原因是:tomcat运行内存溢出。解决方法:在tomcat的bin目录下的catalina.sh文件中,修改运行内存数值,然后重启tomcat

复制代码
[root@web01 ~]# cd /server/software/apache-tomcat-9.0.35
[root@web01 apache-tomcat-9.0.35]# cd bin/
[root@web01 bin]# vim catalina.sh 
[root@web01 bin]# cat catalina.sh |grep JAVA_OPTS
#                   Include here and not in JAVA_OPTS all options, that should
#   JAVA_OPTS       (Optional) Java runtime options used when any command
JAVA_OPTS="-Xms256m -Xmx512m -Xss1024K -XX:PermSize=128m -XX:MaxPermSize=256m"
JAVA_OPTS="$JAVA_OPTS $JSSE_OPTS"
JAVA_OPTS="$JAVA_OPTS -Djava.protocol.handler.pkgs=org.apache.catalina.webresources"
JAVA_OPTS="$JAVA_OPTS -Dorg.apache.catalina.security.SecurityListener.UMASK=`umask`"
# CATALINA_OPTS and/or JAVA_OPTS require quoting. See:
      exec "$_RUNJDB" "$CATALINA_LOGGING_CONFIG" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
      exec "$_RUNJDB" "$CATALINA_LOGGING_CONFIG" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
    eval exec "\"$_RUNJAVA\"" "\"$CATALINA_LOGGING_CONFIG\"" $LOGGING_MANAGER "$JAVA_OPTS" "$CATALINA_OPTS" \
    eval exec "\"$_RUNJAVA\"" "\"$CATALINA_LOGGING_CONFIG\"" $LOGGING_MANAGER "$JAVA_OPTS" "$CATALINA_OPTS" \
    eval $_NOHUP "\"$_RUNJAVA\"" "\"$CATALINA_LOGGING_CONFIG\"" $LOGGING_MANAGER "$JAVA_OPTS" "$CATALINA_OPTS" \
    eval $_NOHUP "\"$_RUNJAVA\"" "\"$CATALINA_LOGGING_CONFIG\"" $LOGGING_MANAGER "$JAVA_OPTS" "$CATALINA_OPTS" \
  eval "\"$_RUNJAVA\"" $LOGGING_MANAGER "$JAVA_OPTS" \
    eval "\"$_RUNJAVA\"" $LOGGING_MANAGER "$JAVA_OPTS" \
[root@web01 bin]# 
复制代码

 重新启动tomcat服务,重新构建maven-project项目,构建结果如下:

 查看deploy-to-staging项目,发现报错如下:

解决办法:修改tomcat的配置文件 /server/software/apache-tomcat-9.0.35/conf/tomcat-users.xml

复制代码
[root@web01 conf]# tail -10 tomcat-users.xml
  examples web application. They are wrapped in a comment and thus are ignored
  when reading this file. If you wish to configure these users for use with the
  examples web application, do not forget to remove the <!.. ..> that surrounds
  them. You will also need to set the passwords to something appropriate.
-->
  <role rolename="manager-gui"/>
  <role rolename="manager-script"/>
  <role rolename="admin-gui"/>
  <user username="tomcat" password="tomcat" roles="manager-script,manager-gui,admin-gui"/>
</tomcat-users>
复制代码

修改配置文件:/server/software/apache-tomcat-9.0.35/webapps/manager/META-INF/context.xml

复制代码
[root@web01 ~]# tail -10 /server/software/apache-tomcat-9.0.35/webapps/manager/META-INF/context.xml
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<Context antiResourceLocking="false" privileged="true" >
  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="10\.0\.0\.\d+|127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
  <Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
</Context>
复制代码

修改配置文件:/server/software/apache-tomcat-9.0.35/webapps/host-manager/META-INF/context.xml

复制代码
[root@web01 ~]# tail -10 /server/software/apache-tomcat-9.0.35/webapps/host-manager/META-INF/context.xml
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<Context antiResourceLocking="false" privileged="true" >
  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="10\.0\.0\.\d+|127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
  <Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
</Context>
复制代码

重启tomcat服务

复制代码
[root@web01 apache-tomcat-9.0.35]# cd bin/
[root@web01 bin]# ./shutdown.sh 
Using CATALINA_BASE:   /server/software/apache-tomcat-9.0.35
Using CATALINA_HOME:   /server/software/apache-tomcat-9.0.35
Using CATALINA_TMPDIR: /server/software/apache-tomcat-9.0.35/temp
Using JRE_HOME:        /usr/java/jdk1.8.0_251-amd64
Using CLASSPATH:       /server/software/apache-tomcat-9.0.35/bin/bootstrap.jar:/server/software/apache-tomcat-9.0.35/bin/tomcat-juli.jar
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=128m; support was removed in 8.0
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=256m; support was removed in 8.0
[root@web01 bin]# ./startup.sh 
Using CATALINA_BASE:   /server/software/apache-tomcat-9.0.35
Using CATALINA_HOME:   /server/software/apache-tomcat-9.0.35
Using CATALINA_TMPDIR: /server/software/apache-tomcat-9.0.35/temp
Using JRE_HOME:        /usr/java/jdk1.8.0_251-amd64
Using CLASSPATH:       /server/software/apache-tomcat-9.0.35/bin/bootstrap.jar:/server/software/apache-tomcat-9.0.35/bin/tomcat-juli.jar
Tomcat started.
[root@web01 bin]# netstat -lntup |grep 9000
tcp6       0      0 :::9000                 :::*                    LISTEN      14683/java          
复制代码

重新构建maven-project项目

浏览器上查看webapp

部署成功!!

posted @   出水芙蓉·薇薇  阅读(1275)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
点击右上角即可分享
微信分享提示