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
部署成功!!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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的强缓存和协商缓存
· 一文读懂知识蒸馏