一 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 分发功能实现 jenkins发布_jenkins

[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 分发功能实现 jenkins发布_jenkins 分发功能实现_02


jenkins 分发功能实现 jenkins发布_jenkins 分发功能实现_03


jenkins 分发功能实现 jenkins发布_java_04


jenkins 分发功能实现 jenkins发布_jar_05


jenkins 分发功能实现 jenkins发布_java_06


jenkins 分发功能实现 jenkins发布_java_07


发布历史

jenkins 分发功能实现 jenkins发布_java_08


用户视图My Views

jenkins 分发功能实现 jenkins发布_tomcat_09


New view新建视图

jenkins 分发功能实现 jenkins发布_jenkins 分发功能实现_10


jenkins 分发功能实现 jenkins发布_tomcat_11


jenkins 分发功能实现 jenkins发布_jar_12


jenkins 分发功能实现 jenkins发布_jenkins 分发功能实现_13


错误信息显示

jenkins 分发功能实现 jenkins发布_java_14


关于jenkins

jenkins 分发功能实现 jenkins发布_jenkins_15


jenkins 分发功能实现 jenkins发布_jenkins_16


负载状态

jenkins 分发功能实现 jenkins发布_jenkins_17


jenkins 分发功能实现 jenkins发布_jar_18


配置菜单 重新加载 命令行 脚本命令行 关闭jenkins

jenkins 分发功能实现 jenkins发布_jenkins 分发功能实现_19


管理用户

jenkins 分发功能实现 jenkins发布_jar_20


jenkins 分发功能实现 jenkins发布_java_21


用户视图

jenkins 分发功能实现 jenkins发布_jenkins_22


jenkins 分发功能实现 jenkins发布_tomcat_23


jenkins 分发功能实现 jenkins发布_tomcat_24


凭据

jenkins 分发功能实现 jenkins发布_jenkins_25


拉代码,记录账号和密码就叫凭证

jenkins 分发功能实现 jenkins发布_jenkins_26


全局安全

jenkins 分发功能实现 jenkins发布_jenkins 分发功能实现_27


不要记住我

jenkins 分发功能实现 jenkins发布_jenkins 分发功能实现_28


ssh 端口指定

jenkins 分发功能实现 jenkins发布_jar_29


插件

jenkins 分发功能实现 jenkins发布_jenkins 分发功能实现_30


插件管理

jenkins 分发功能实现 jenkins发布_tomcat_31


代理设置

jenkins 分发功能实现 jenkins发布_tomcat_32


切换站点

https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.jsonjenkins 分发功能实现 jenkins发布_tomcat_33

全局配置 扳手图案


工具配置安装


询问开发打包工具


手动安装需要填写目录路径或自动安装


配置系统


主目录


系统管理员邮箱


使用统计取消勾选


邮箱认证


八 使用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 分发功能实现 jenkins发布_tomcat_34


jenkins 分发功能实现 jenkins发布_jenkins_35


jenkins 分发功能实现 jenkins发布_jenkins 分发功能实现_36


jenkins 分发功能实现 jenkins发布_jar_37


选择功能Hello World

jenkins 分发功能实现 jenkins发布_java_38


点击 Build Now立即构建

jenkins 分发功能实现 jenkins发布_jenkins 分发功能实现_39


查看命令行输出

jenkins 分发功能实现 jenkins发布_jar_40


返回到项目

jenkins 分发功能实现 jenkins发布_jar_41


视图输出结果

jenkins 分发功能实现 jenkins发布_tomcat_42


拉到自己的仓库Fork

jenkins 分发功能实现 jenkins发布_jenkins_43

// 目标主机
[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 root@192.168.143.106
[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 root@192.168.143.106:/usr/local/tomcat/webapps
myapp.war    
// 目标主机
 [root@106 webapps]# ls
docs  examples  host-manager  manager  myapp  myapp.war  ROOT

jenkins 分发功能实现 jenkins发布_jenkins 分发功能实现_44


jenkins自动化部署

点击配置

jenkins 分发功能实现 jenkins发布_tomcat_45


jenkins 分发功能实现 jenkins发布_java_46


选择github模式

jenkins 分发功能实现 jenkins发布_java_47


清除m3命令

jenkins 分发功能实现 jenkins发布_tomcat_48


只保留拉代码与打包多余删除

jenkins 分发功能实现 jenkins发布_jenkins 分发功能实现_49


替换代码https://gitee.com/hyhxy0206/tomcat-java-demo.git

jenkins 分发功能实现 jenkins发布_jar_50


保存构建

jenkins 分发功能实现 jenkins发布_jenkins_51


jenkins 分发功能实现 jenkins发布_jenkins_52


点击视图,打包结果如下

jenkins 分发功能实现 jenkins发布_jenkins_53


#打包结果

[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 分发功能实现 jenkins发布_tomcat_54


jenkins 分发功能实现 jenkins发布_jar_55


##查看结果

[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 root@192.168.143.106 'tar -Jcf /opt/backup/myapp-$(date +%Y%m%d%H%M).tar.xz /usr/local/tomcat/webapps/myapp'
tar: 从成员名中删除开头的“/”
[root@103 demo]# ssh root@192.168.143.106 '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 root@192.168.143.106 'tar -Jcf /opt/backup/myapp-\$(date +%Y%m%d%H%M).tar.xz /usr/local/tomcat/webapps/myapp'" 
                  sh "scp target/myapp.war root@192.168.143.106:/usr/local/tomcat/webapps/"
                  sh "ssh root@192.168.143.106 '/usr/local/tomcat/bin/catalina.sh stop'"
                  sh "sleep 3"
                  sh "ssh root@192.168.143.106 '/usr/local/tomcat/bin/catalina.sh start'"
            }
        }
    }
}

点击流水线语法

jenkins 分发功能实现 jenkins发布_java_56


git高级用法la私有仓库

jenkins 分发功能实现 jenkins发布_jenkins 分发功能实现_57


添加凭证

jenkins 分发功能实现 jenkins发布_jenkins_58


jenkins 分发功能实现 jenkins发布_java_59


选择凭据生成脚本

jenkins 分发功能实现 jenkins发布_java_60


添加到流水线

jenkins 分发功能实现 jenkins发布_jar_61


点击流水线语法

jenkins 分发功能实现 jenkins发布_jar_62


jenkins 分发功能实现 jenkins发布_java_63


jenkins 分发功能实现 jenkins发布_tomcat_64


点击在线文档

jenkins 分发功能实现 jenkins发布_java_65


jenkins 分发功能实现 jenkins发布_tomcat_66


在线文档jenkins入门

jenkins 分发功能实现 jenkins发布_jenkins_67


点击创建流水线

jenkins 分发功能实现 jenkins发布_jar_68


jenkins 分发功能实现 jenkins发布_jar_69


执行多个步骤

jenkins 分发功能实现 jenkins发布_jenkins 分发功能实现_70


jenkins 分发功能实现 jenkins发布_jenkins 分发功能实现_71


定义执行环境

jenkins 分发功能实现 jenkins发布_jar_72


使用变量环境

jenkins 分发功能实现 jenkins发布_jar_73


记录测试

jenkins 分发功能实现 jenkins发布_jar_74


清理和通知

jenkins 分发功能实现 jenkins发布_java_75


jenkins 分发功能实现 jenkins发布_jenkins 分发功能实现_76


部署

jenkins 分发功能实现 jenkins发布_jenkins_77