互联网软件的开发和发布,已经形成了一套标准流程,假如把开发工作流程分为以下几个阶段:
编码 → 构建 → 集成 → 测试 → 交付 → 部署
正如你在上图中看到,持续集成(Continuous Integration)、持续交付(Continuous Delivery)和持续部署(Continuous Deployment)有着不同的软件自动化交付周期。
但是在实际的生成过程中最后的持续部署发布是人工完成,并不是自动发布的。
CI(持续集成): 将各个开发人员的工作集合到一个代码仓库中,成功的 CI 意味着应用代码的新更改会定期构建、测试并合并到共享存储库中,通常,每天都要进行几次,主要目的是尽早发现集成错误,使团队更加紧密结合,更好地协作。
CD(持续交付): 通常是指开发人员对应用的更改会自动进行错误测试并上传到存储库(如 GitHub 或容器注册表),然后由运维团队将其部署到实时生产环境中,这旨在解决开发和运维团队之间可见性及沟通较差的问题,它的实现通常能够将构建部署的每个步骤自动化,以便任何时刻能够安全地完成代码发布(理想情况下)。
CD(持续部署): 是一种更高程度的自动化,无论何时对代码进行重大更改,都会自动进行构建/部署,持续部署扩展了持续交付,以便软件构建,在通过所有测试时自动部署。
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:综合了两者的功能
//jenkins下载网址https://get.jenkins.io/war-stable/ 版本实时更新下载最新的稳定版就行
//要在tomcat上部署 tomcat部署可以看 http://t.csdn.cn/SrlUl
[root@tomcat ~]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 100 [::1]:8009 [::]:*
LISTEN 0 100 *:8080 *:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 1 [::ffff:127.0.0.1]:8005 *:*
[root@tomcat ~]# ps -ef|grep tomcat
root 10833 1 0 13:54 pts/3 00:00:11 /usr/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start
root 10928 2077 0 14:27 pts/3 00:00:00 grep --color=auto tomcat
[root@tomcat ~]# ls
anaconda-ks.cfg jenkins.war
[root@tomcat ~]# cd /usr/local/tomcat/webapps/
[root@tomcat webapps]# ls
docs examples host-manager manager ROOT test
[root@tomcat webapps]# mv * /opt/ //把webapps下面的东西全移走
[root@tomcat webapps]# ls
[root@tomcat webapps]#
[root@tomcat webapps]# mv ~/jenkins.war .
[root@tomcat webapps]# ls
jenkins.war
[root@tomcat webapps]# ls
jenkins jenkins.war //自动解压
环境
主机名 | 服务 | ip |
---|---|---|
tomcat | tomcat | 192.168.200.5 |
jenkins | tomcat、jenkins | 192.168.200.6 |
手动部署
//部署tomcat jenkins也可以看上两篇博客
[root@tomcat ~]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 100 [::1]:8009 [::]:*
LISTEN 0 100 *:8080 *:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 1 [::ffff:127.0.0.1]:8005 *:*
[root@jenkins webapps]# ls
jenkins jenkins.war
[root@jenkins webapps]#
[root@jenkins webapps]# yum -y install git
[root@jenkins webapps]# git clone https://github.com/chendao2015/tomcat-java-demo.git
Cloning into 'tomcat-java-demo'...
remote: Enumerating objects: 549, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 549 (delta 0), reused 2 (delta 0), pack-reused 546
Receiving objects: 100% (549/549), 5.08 MiB | 1.08 MiB/s, done.
Resolving deltas: 100% (213/213), done.
[root@jenkins ~]# cd tomcat-java-demo/
[root@jenkins tomcat-java-demo]# ls
db Dockerfile LICENSE pom.xml README.md src ## 使用 pom.xml 打包的 ## build.xml 使用 ant打包的
[root@jenkins tomcat-java-demo]# ssh-keygen //做免密登录
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
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:CsYjrW/EL7Rw9pm5SxG8K8pCz8eqzQWQZqsKUrpNFd0 root@jenkins
The key's randomart image is:
+---[RSA 3072]----+
| |
| . o . |
| = . + E |
|o oo . o |
| .ooB o S |
|.+.=Bo + |
|* =*o=++ |
|==o===* |
|oo==+.oo |
+----[SHA256]-----+
[root@jenkins tomcat-java-demo]# ssh-copy-id 192.168.200.5
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '192.168.200.5 (192.168.200.5)' can't be established.
ECDSA key fingerprint is SHA256:OOiWoiR76GiB74kD084rEUNRtaLzfgRE9pdGfQackps.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
[email protected]'s password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh '192.168.200.5'"
and check to make sure that only the key(s) you wanted were added.
[root@jenkins tomcat-java-demo]# yum -y install maven
[root@jenkins tomcat-java-demo]# mvn clean package -Dmaven.test.skip=true //进行打包
[root@jenkins tomcat-java-demo]# ls
db Dockerfile LICENSE pom.xml README.md src target
[root@jenkins tomcat-java-demo]# cd target/
[root@jenkins target]# ls
classes generated-sources ly-simple-tomcat-0.0.1-SNAPSHOT ly-simple-tomcat-0.0.1-SNAPSHOT.war maven-archiver maven-statu
[root@jenkins target]# scp ly-simple-tomcat-0.0.1-SNAPSHOT.war 192.168.200.5:/usr/local/tomcat/webapps/
ly-simple-tomcat-0.0.1-SNAPSHOT.war 100% 17MB 29.3MB/s 00:00
[root@tomcat webapps]# ls
ly-simple-tomcat-0.0.1-SNAPSHOT ly-simple-tomcat-0.0.1-SNAPSHOT.war
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("Deployment project"){
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'
"""
}
}
}
}