Jenkins部署发布

一 jenkins介绍

Jenkins是一个广泛用于持续构建的可视化web工具,持续构建说得更直白点,就是各种项目的"自动化"编译、打包、分发部署。jenkins可以很好的支持各种语言(比如:java, c#, php等)的项目构建,也完全兼容ant、maven、gradle等多种第三方构建工具,同时跟svn、git能无缝集成,也支持直接与知名源代码托管网站,比如github、bitbucket直接集成。
提到持续集成免不了谈及Hudson,Hudson是SunMicrosystems 开发的一个非常流行的开源的基于Java 的持续集成工具,后来Sun被Oracle收购,从Hudson 源代码的分支诞生了Jenkins。
jenkins其实就是大的框架集,可以整个任何你想整合的内容,实现公司的整个持续集成体系!如:自动化,性能,打包,部署,发布&发布结果自动化验证,接口测试,单元测试。

二 特点

——开源的java语言开发持续集成工具,支持CI,CD。
——易于安装部署配置:可通过yum安装,或下载war包以及通过docker容器等 快速实现安装部署,可方便web界面配置管理。
——消息通知及测试报告:集成RSS/E-mail通过RSS发布构建结果或当构建完成时通过e-mail通知,生成JUnit/TestNG测试报告。
——分布式构建:支持Jenkins能够让多台计算机一起构建/测试。
——文件识别:Jenkins能够跟踪哪次构建生成哪些jar,哪次构建使用哪个版本的jar等。
——丰富的插件支持:支持扩展插件,你可以开发适合自己团队使用的工具,如git,svn,maven,docker等。

三 CI持续集成

什么是持续集成?

软件开发中,集成是一个很可能发生未知错误的过程。持续集成是一种软件开发实践,希望团队中的成员频繁提交代码到代码仓库,且每次提交都能通过自动化测试进行验证,从而使问题尽早暴露和解决。

特点
——通过自动化测试可以提早拿到回归测试的结果,避免将一些问题提交到交付生产中。
——发布编译将会更加容易,因为合并之初已经将所有问题都规避了。
减少工作问题切换,研发可以很快获得构建失败的消息,在开始下一——个任务之前就可以很快解决。
测试成本大幅降低,你的CI服务器可以在几秒钟之内运行上百条测试。
——团队花费在测试上面的时间会大幅缩短,将会更加侧重于质量文化的提升上面

四 CD持续交付

持续交付(CD)通常是指整个流程链(管道),它自动监测源代码变更并通过构建、测试、打包和相关操作运行它们以生成可部署的版本,基本上没有任何人为干预。
持续交付在软件开发过程中的目标是自动化、效率、可靠性、可重复性和质量保障(通过持续测试)。
持续交付包含持续集成(自动检测源代码变更、执行构建过程、运行单元测试以验证变更),持续测试(对代码运行各种测试以保障代码质量),和(可选)持续部署(通过管道发布版本自动提供给用户)

特点
——发布频率更快,因为你不需要停下来等待发布。每一处提交都会自动触发发布流
——在小批量发布的时候,风险降低了,发现问题也可以很轻松的修复
客户每天都可以看到我们的持续改进和提升,而不是每个月或者每季度,或者每年

五 持续部署(CD)
持续部署扩展了持续交付,以便软件构建在通过所有测试时自动部署。在这样的流程中, 不需要人为决定何时及如何投入生产环境。CI/CD 系统的最后一步将在构建后的组件/包退出流水线时自动部署。 此类自动部署可以配置为快速向客户分发组件、功能模块或修复补丁,并准确说明当前提供的内容。采用持续部署的组织可以将新功能快速传递给用户,得到用户对于新版本的快速反馈,并且可以迅速处理任何明显的缺陷。 用户对无用或者误解需求的功能的快速反馈有助于团队规划投入,避免将精力集中于不容易产生回报的地方。

六 Jenkins部署

[root@103 ~]# wget https://get.jenkins.io/war-stable/2.303.2/jenkins.war
[root@103 ~]# wget https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.54/bin/apache-tomcat-9.0.54.tar.gz
[root@102 ~]# yum -y install java-11-openjdk*
[root@102 ~]# tar xf apache-tomcat-9.0.54.tar.gz -C /usr/local/
[root@103 ~]# cd /usr/local/
[root@103 local]# mv apache-tomcat-9.0.54/ tomcat
[root@103 local]# cd tomcat/
[root@103 tomcat]# ls
bin           conf             lib      logs    README.md      RUNNING.txt  webapps
BUILDING.txt  CONTRIBUTING.md  LICENSE  NOTICE  RELEASE-NOTES  temp         work
[root@103 tomcat]# ./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@103 tomcat]# ss -atnl
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                             *:8080                    *:*                    
LISTEN     0          128                          [::]:22                   [::]:*                    
LISTEN     0          1              [::ffff:127.0.0.1]:8005                    *:*  

访问ip地址加8080
Jenkins部署发布_第1张图片

[root@103 tomcat]# ls webapps/
docs  examples  host-manager  manager  ROOT
[root@103 tomcat]# mv webapps/ROOT/ /opt/
[root@103 tomcat]# rm -rf webapps/*
[root@103 tomcat]# mv /opt/ROOT/ webapps/
[root@103 tomcat]# cd webapps/
[root@103 webapps]# ls
ROOT
[root@103 local]# ./tomcat/bin/catalina.sh stop
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:   
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@103 local]# mv tomcat/ jenkins
[root@103 local]# ls
bin  etc  games  include  jenkins  lib  lib64  libexec  sbin  share  src
[root@103 local]# cd jenkins/
[root@103 jenkins]# ls
bin           conf             lib      logs    README.md      RUNNING.txt  webapps
BUILDING.txt  CONTRIBUTING.md  LICENSE  NOTICE  RELEASE-NOTES  temp         work
[root@103 jenkins]# cd webapps/
[root@103 webapps]# cd ROOT/
[root@103 ROOT]# rm -rf *
[root@103 ROOT]# cd ..
[root@103 webapps]# cp ~/jenkins.war .
[root@103 webapps]# ls
jenkins.war  ROOT
[root@103 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@103 webapps]# ls
jenkins  jenkins.war  ROOT

七 web页面安装与功能介绍

Jenkins部署发布_第2张图片
Jenkins部署发布_第3张图片
Jenkins部署发布_第4张图片
Jenkins部署发布_第5张图片
Jenkins部署发布_第6张图片
Jenkins部署发布_第7张图片
发布历史
Jenkins部署发布_第8张图片
用户视图My Views
Jenkins部署发布_第9张图片
New view新建视图
Jenkins部署发布_第10张图片
Jenkins部署发布_第11张图片
Jenkins部署发布_第12张图片
Jenkins部署发布_第13张图片
错误信息显示
Jenkins部署发布_第14张图片
关于jenkins
Jenkins部署发布_第15张图片
Jenkins部署发布_第16张图片
负载状态
Jenkins部署发布_第17张图片
Jenkins部署发布_第18张图片
配置菜单 重新加载 命令行 脚本命令行 关闭jenkins
Jenkins部署发布_第19张图片
管理用户
Jenkins部署发布_第20张图片
Jenkins部署发布_第21张图片
用户视图
Jenkins部署发布_第22张图片
Jenkins部署发布_第23张图片
Jenkins部署发布_第24张图片
凭据
Jenkins部署发布_第25张图片
拉代码,记录账号和密码就叫凭证
Jenkins部署发布_第26张图片
全局安全
Jenkins部署发布_第27张图片
不要记住我
Jenkins部署发布_第28张图片
ssh 端口指定
Jenkins部署发布_第29张图片
插件
Jenkins部署发布_第30张图片
插件管理
Jenkins部署发布_第31张图片
代理设置
Jenkins部署发布_第32张图片
切换站点
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
Jenkins部署发布_第33张图片
全局配置 扳手图案
Jenkins部署发布_第34张图片
工具配置安装
Jenkins部署发布_第35张图片
询问开发打包工具
Jenkins部署发布_第36张图片
手动安装需要填写目录路径或自动安装
在这里插入图片描述
配置系统
Jenkins部署发布_第37张图片
主目录
Jenkins部署发布_第38张图片
系统管理员邮箱
Jenkins部署发布_第39张图片
使用统计取消勾选
Jenkins部署发布_第40张图片
邮箱认证
Jenkins部署发布_第41张图片

八 使用jenkins进行java代码打包发布案例

确认开启服务端状态

[root@103 ~]# cd /usr/local/jenkins/
bin/     conf/    lib/     logs/    temp/    webapps/ work/    
[root@103 ~]# cd /usr/local/jenkins/webapps/
[root@103 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@103 webapps]# ss -atnl
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                          *:8080                      *:*                    
LISTEN     0           128                       [::]:22                     [::]:*                    
[root@103 webapps]# 

创建一个流水线项目
Jenkins部署发布_第42张图片
Jenkins部署发布_第43张图片
Jenkins部署发布_第44张图片
Jenkins部署发布_第45张图片
选择功能Hello World
Jenkins部署发布_第46张图片
点击 Build Now立即构建
Jenkins部署发布_第47张图片
查看命令行输出
Jenkins部署发布_第48张图片
返回到项目
Jenkins部署发布_第49张图片
视图输出结果
Jenkins部署发布_第50张图片
拉到自己的仓库Fork
Jenkins部署发布_第51张图片

// 目标主机
[root@106 ~]# cd /usr/local/tomcat/webapps/
[root@106 webapps]# ss -atnl
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           128                       [::]:22                     [::]:*                    
[root@106 webapps]# ../bin/
catalina.sh      configtest.sh    digest.sh        setclasspath.sh  startup.sh       version.sh
ciphers.sh       daemon.sh        makebase.sh      shutdown.sh      tool-wrapper.sh  
[root@106 webapps]# ../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@106 webapps]# ss -atnl
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                          *:8080                      *:*                    
LISTEN     0           128                       [::]:22                     [::]:*   
// 免密登入
ssh-keygen -t rsa
ssh-copy-id [email protected]
[root@103 opt]# yum install -y git
[root@103 opt]# git clone https://gitee.com/hyhxy0206/tomcat-java-demo.git
正克隆到 'tomcat-java-demo'...
remote: Enumerating objects: 558, done.
remote: Counting objects: 100% (558/558), done.
remote: Compressing objects: 100% (316/316), done.
remote: Total 558 (delta 217), reused 558 (delta 217), pack-reused 0
接收对象中: 100% (558/558), 5.08 MiB | 434.00 KiB/s, 完成.
处理 delta 中: 100% (217/217), 完成.
[root@103 opt]# ls
tomcat-java-demo
[root@103 opt]# yum install -y maven-1:3.5.4-5.module_el8.0.0+39+6a9b6e22.noarch
[root@103 opt]# cd tomcat-java-demo/
[root@103 tomcat-java-demo]# mvn clean package
[root@103 tomcat-java-demo]# cd target/
[root@103 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@103 target]# mv  ly-simple-tomcat-0.0.1-SNAPSHOT.war myapp.war
[root@103 target]# ls
classes  generated-sources  ly-simple-tomcat-0.0.1-SNAPSHOT  maven-archiver  maven-status  myapp.war
[root@103 target]# cd ..
[root@103 tomcat-java-demo]# scp  target/myapp.war [email protected]:/usr/local/tomcat/webapps
myapp.war    
// 目标主机
 [root@106 webapps]# ls
docs  examples  host-manager  manager  myapp  myapp.war  ROOT

Jenkins部署发布_第52张图片
jenkins自动化部署
点击配置
Jenkins部署发布_第53张图片
Jenkins部署发布_第54张图片
选择github模式
Jenkins部署发布_第55张图片
清除m3命令
Jenkins部署发布_第56张图片
只保留拉代码与打包多余删除
Jenkins部署发布_第57张图片
替换代码https://gitee.com/hyhxy0206/tomcat-java-demo.git
Jenkins部署发布_第58张图片
保存构建
Jenkins部署发布_第59张图片
Jenkins部署发布_第60张图片
点击视图,打包结果如下
Jenkins部署发布_第61张图片
#打包结果

[root@103 tomcat-java-demo]# cd /root/.jenkins/workspace/
[root@103 workspace]# ls
demo  demo@tmp
[root@103 workspace]# ls demo
db  deploy.yaml  Dockerfile  jenkinsfile  LICENSE  pom.xml  README.md  src  target
[root@103 workspace]# cd demo
[root@103 demo]# ls
db  deploy.yaml  Dockerfile  jenkinsfile  LICENSE  pom.xml  README.md  src  target
[root@103 demo]# ls target/
classes            ly-simple-tomcat-0.0.1-SNAPSHOT      maven-archiver
generated-sources  ly-simple-tomcat-0.0.1-SNAPSHOT.war  maven-status
[root@103 demo]# 

自动改名称
mv ly-simple-tomcat-0.0.1-SNAPSHOT.war myapp.war 放到流程线
Jenkins部署发布_第62张图片
Jenkins部署发布_第63张图片
##查看结果

[root@103 demo]# ls target/
classes  generated-sources  ly-simple-tomcat-0.0.1-SNAPSHOT  maven-archiver  maven-status  myapp.war

##备份操作

[root@106 myapp]# mkdir -p /opt/backup
// 手动操作
[root@103 demo]# ssh [email protected] 'tar -Jcf /opt/backup/myapp-$(date +%Y%m%d%H%M).tar.xz /usr/local/tomcat/webapps/myapp'
tar: 从成员名中删除开头的“/”
[root@103 demo]# ssh [email protected] 'tar -Jcf /opt/backup/myapp-$(date +%Y%m%d%H%M).tar.xz /usr/local/tomcat/webapps/myapp'
tar: 从成员名中删除开头的“/”
[root@103 demo]# 
// 查看
[root@106 myapp]# ls /opt/backup/
myapp-202110190504.tar.xz
[root@106 myapp]# ls /opt/backup/
myapp-202110190504.tar.xz  myapp-202110190505.tar.xz
[root@106 myapp]#
pipeline {
    agent any

    stages {
        stage('Build') {
            steps {
                // Get some code from a GitHub repository
                git 'https://gitee.com/hyhxy0206/tomcat-java-demo.git'

                // Run Maven on a Unix agent.
                sh "mvn -Dmaven.test.failure.ignore=true clean package"
                sh "mv target/ly-simple-tomcat-0.0.1-SNAPSHOT.war target/myapp.war"
                // To run Maven on a Windows agent, use
                // bat "mvn -Dmaven.test.failure.ignore=true clean package"
            }

            
        }
        stage("publish"){
            steps{
                  sh "ssh [email protected] 'tar -Jcf /opt/backup/myapp-\$(date +%Y%m%d%H%M).tar.xz /usr/local/tomcat/webapps/myapp'" 
                  sh "scp target/myapp.war [email protected]:/usr/local/tomcat/webapps/"
                  sh "ssh [email protected] '/usr/local/tomcat/bin/catalina.sh stop'"
                  sh "sleep 3"
                  sh "ssh [email protected] '/usr/local/tomcat/bin/catalina.sh start'"
            }
        }
    }
}

点击流水线语法
Jenkins部署发布_第64张图片
git高级用法la私有仓库
Jenkins部署发布_第65张图片
添加凭证
Jenkins部署发布_第66张图片
Jenkins部署发布_第67张图片
选择凭据生成脚本
Jenkins部署发布_第68张图片
添加到流水线
Jenkins部署发布_第69张图片
点击流水线语法
Jenkins部署发布_第70张图片
Jenkins部署发布_第71张图片
Jenkins部署发布_第72张图片
点击在线文档
Jenkins部署发布_第73张图片
Jenkins部署发布_第74张图片
在线文档jenkins入门
Jenkins部署发布_第75张图片
点击创建流水线
Jenkins部署发布_第76张图片
Jenkins部署发布_第77张图片
执行多个步骤
Jenkins部署发布_第78张图片
Jenkins部署发布_第79张图片
定义执行环境
Jenkins部署发布_第80张图片
使用变量环境
Jenkins部署发布_第81张图片
记录测试
Jenkins部署发布_第82张图片
清理和通知
Jenkins部署发布_第83张图片
Jenkins部署发布_第84张图片
部署
Jenkins部署发布_第85张图片

你可能感兴趣的:(第三方服务,jenkins,java)