jenkins部署java项目

CI/CD介绍
互联网软件的开发和发布,已经形成了一套标准流程,假如把开发工作流程分为以下几个阶段:

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

正如你在上图中看到,持续集成(Continuous Integration)、持续交付(Continuous Delivery)和持续部署(Continuous Deployment)有着不同的软件自动化交付周期。

但是在实际的生成过程中最后的持续部署发布是人工完成,并不是自动发布的。

CI(持续集成): 将各个开发人员的工作集合到一个代码仓库中,成功的 CI 意味着应用代码的新更改会定期构建、测试并合并到共享存储库中,通常,每天都要进行几次,主要目的是尽早发现集成错误,使团队更加紧密结合,更好地协作。
CD(持续交付): 通常是指开发人员对应用的更改会自动进行错误测试并上传到存储库(如 GitHub 或容器注册表),然后由运维团队将其部署到实时生产环境中,这旨在解决开发和运维团队之间可见性及沟通较差的问题,它的实现通常能够将构建部署的每个步骤自动化,以便任何时刻能够安全地完成代码发布(理想情况下)。
CD(持续部署): 是一种更高程度的自动化,无论何时对代码进行重大更改,都会自动进行构建/部署,持续部署扩展了持续交付,以便软件构建,在通过所有测试时自动部署。
 

jenkins介绍
jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,主要用于持续、自动的构建/测试软件项目、监控外部任务的运行。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。通常与版本管理工具(SCM)、构建工具结合使用。常用的版本控制工具有SVN、GIT,构建工具有Maven、Ant、Gradle。
 

Maven概述
一、什么是maven?
Maven是一个项目管理工具,它包含了一个项目对象模型(POM:Project Object Model),一组标准集合,一个项目生命周期(Project LifeCycle),一个依赖管理系统(Dependency managerment System),和用来运行定义在生命周期(phase)中插件(plugin)目标(goal)的逻辑。

 Maven有一个生命周期,当你运行mvn install的时候被调用。这条命令告诉Maven执行一系列的有序的步骤,直到到达你指定的生命周期。遍历生命周期旅途中的一个影响就是,Maven 运行了许多默认的插件目标,这些目标完成了像编译和创建一个JAR文件这样的工作。 此外,Maven能够很方便的帮你管理项目报告,生成站点,管理JAR文件,等等。

二、Maven能解决什么问题
通俗易懂点来说。项目开发在写代码的同时,会伴随着许多必不可少的事情要做,下面我们举几个例子感受一下:

我们需要引用各种jar包,较大的工程肯能需要引入十几个或者上百个jar包,这都需要我们手动一个一个导入到工程目录,而且经常会遇到各种让人抓狂的jar包冲突,版本冲突。
世界上没有不存在bug的代码,为了减少bug,写完代码后,我们还要写一些单元测试,然后一个个的运行来检查代码质量。
再优雅的代码也是要出来买的。我们后面还需要将代码与各种配置文件、资源整合到一起,定型打包,如果是web项目,还需要将之发布到服务器,供人蹂躏。
试想一下,如果有一种工具,可以将你从上述的繁重工作中解放出来,能帮你构建工程、管理jar包、编译代码,还能帮你自动运行单元测试、打包、生成报表,甚至能帮你部署项目,生成web站点,你会心动吗?

Maven就可以解决上面所提到的这些问题。

1,什么是ant
ant是构建工具
2,什么是构建
概念到处可查到,形象来说,你要把代码从某个地方拿来,编译,再拷贝到某个地方去等等操作,当然不仅与此,但是主要用来干这个
3,ant的好处
跨平台   --因为ant是使用java实现的,所以它跨平台
使用简单--与ant的兄弟make比起来
语法清晰--同样是和make相比
功能强大--ant能做的事情很多,可能你用了很久,你仍然不知道它能有多少功能。当你自己开发一些ant插件的时候,你会发现它更多的功能。
4,ant的兄弟make
ant做的很多事情,大部分是曾经有一个叫make的所做的,不过对象不同,make更多应用于c/c++ ,ant更多应用于Java。当然这不是一定的,但大部分人如此。
一,构建ant环境
要使用ant首先要构建一个ant环境,步骤很简单:
1),安装jdk,设置JAVA_HOME ,PATH ,CLASS_PATH(这些应该是看这篇文章的人应该知道的)
2),下载ant 地址http://www.apache.org/找一个你喜欢的版本,或者干脆最新的版本
3),解压ant 你得到的是一个压缩包,解压缩它,并把它放在一个尽量简单的目录,例如D:/ant-1.6虽然你不一 定要这么做,但这么做是有好处的。
4),设置ANT_HOME PATH中添加ANT_HOME目录下的bin目录
5),测试一下你的设置,开始-->运行-->cmd进入命令行-->键入 ant 回车,如果看到
Buildfile: build.xml does not exist!
Build failed
那么恭喜你你已经完成ant的设置

官方描述
Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。它使用一种基于Groovy的特定领域语言来声明项目设置,而不是传统的XML。当前其支持的语言限于Java、Groovy和Scala,计划未来将支持更多的语言。

Gradle的通俗理解
首先知道这个
咱们的代码写完,总是要给用户用的,所以最后需要一个打包&部署的过程,这个过程中免不了进行一些配置。

这些工具的对比
下面这几个工具都会在软件的打包&部署过程中用到
Apache Ant:用来自动化打包、测试、部署的工具
Apache Maven:主要用来管理依赖
Gradle:综合了两者的功能

 

先在码云上面找一个开源JAVA项目克隆下来

[root@localhost ~]# git clone https://gitee.com/wukongcrm/72crm-java.git
Cloning into '72crm-java'...
remote: Enumerating objects: 6958, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 6958 (delta 0), reused 0 (delta 0), pack-reused 6955
Receiving objects: 100% (6958/6958), 25.78 MiB | 2.57 MiB/s, done.
Resolving deltas: 100% (3678/3678), done.

//克隆


[root@localhost ~]# ls
72crm-java  anaconda-ks.cfg  jenkins.war  tomcat-java-demo
//这里目前有2个项目 

[root@localhost ~]# dnf -y install maven
//安装maven

[root@localhost ~]# cd tomcat-java-demo/
[root@localhost tomcat-java-demo]# ls
db  Dockerfile  LICENSE  pom.xml  README.md  src

拉取代码

 jenkins部署java项目_第1张图片

[root@localhost tomcat-java-demo]# mvn clean package -Dmaven.test.skip=true
//打包时间比较长
[INFO] Packaging webapp
[INFO] Assembling webapp [ly-simple-tomcat] in [/root/tomcat-java-demo/target/ly-simple-tomcat-0.0.1-SNAPSHOT]
[INFO] Processing war project
[INFO] Webapp assembled in [126 msecs]
[INFO] Building war: /root/tomcat-java-demo/target/ly-simple-tomcat-0.0.1-SNAPSHOT.war
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 13:37 min
[INFO] Finished at: 2022-08-18T21:04:59+08:00
[INFO] ------------------------------------------------------------------------
//打包成功

[root@localhost tomcat-java-demo]# ls
db  Dockerfile  LICENSE  pom.xml  README.md  src  target
//有target的打包目录
[root@localhost target]# ls
classes            ly-simple-tomcat-0.0.1-SNAPSHOT      maven-archiver
generated-sources  ly-simple-tomcat-0.0.1-SNAPSHOT.war  maven-status
//里面有一个war包 需要上传

[root@localhost ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:MX/q8rc1sxO2XrbBJoZ97ZsTxBUsWS6nL75ieaPPm78 root@localhost
The key's randomart image is:
+---[RSA 3072]----+
|              +o.|
|             o...|
|        o    .oo.|
|         +    +o |
|        S . ...  |
|           oo =..|
|          ...*+O=|
|        .. +=+OO+|
|         o+o*XBE=|
+----[SHA256]-----+
//给另外一台主机做一个密钥,另外一台主机也要安装tomcat

jenkins部署java项目_第2张图片

 jenkins部署java项目_第3张图片

 这里也要安装maven

jenkins部署java项目_第4张图片

 脚本类容

pipeline {
    agent any 
    stages {
        stage("pull code"){
            steps {
                git "https://github.com/chendao2015/tomcat-java-demo.git"
            }
        }    
        stage("make pkg"){
            steps {
                sh """
                    mvn clean package -Dmaven.test.skip=true
                """
            }
            
        }
        stage("make install"){
            steps {
                sh """
                  scp target/ly-simple-tomcat-0.0.1-SNAPSHOT.war [email protected]:/usr/local/tomcat/webapps/
                    ssh [email protected] '/usr/local/tomcat/bin/catalina.sh stop && /usr/local/tomcat/bin/catalina.sh start'
                """
            }
         }    
    }
}

点击执行

jenkins部署java项目_第5张图片

 这里可以看到执行状态

jenkins部署java项目_第6张图片

 全部执行成功

jenkins部署java项目_第7张图片

 jenkins部署java项目_第8张图片

你可能感兴趣的:(jenkins,运维)