一 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
[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页面安装与功能介绍
发布历史
用户视图My Views
New view新建视图
错误信息显示
关于jenkins
负载状态
配置菜单 重新加载 命令行 脚本命令行 关闭jenkins
管理用户
用户视图
凭据
拉代码,记录账号和密码就叫凭证
全局安全
不要记住我
ssh 端口指定
插件
插件管理
代理设置
切换站点
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
全局配置 扳手图案
工具配置安装
询问开发打包工具
手动安装需要填写目录路径或自动安装
配置系统
主目录
系统管理员邮箱
使用统计取消勾选
邮箱认证
八 使用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]#
创建一个流水线项目
选择功能Hello World
点击 Build Now立即构建
查看命令行输出
返回到项目
视图输出结果
拉到自己的仓库Fork
// 目标主机
[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自动化部署
点击配置
选择github模式
清除m3命令
只保留拉代码与打包多余删除
替换代码https://gitee.com/hyhxy0206/tomcat-java-demo.git
保存构建
点击视图,打包结果如下
#打包结果
[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 放到流程线
##查看结果
[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'"
}
}
}
}
点击流水线语法
git高级用法la私有仓库
添加凭证
选择凭据生成脚本
添加到流水线
点击流水线语法
点击在线文档
在线文档jenkins入门
点击创建流水线
执行多个步骤
定义执行环境
使用变量环境
记录测试
清理和通知
部署