Jenkins的部署和使用
Jenkins是一个开源的、可扩展的持续集成、交付、部署(软件/代码的编译、打包、部署)的基于web界面的平台。允许持续集成和持续交付项目,无论用的是什么平台,可以处理任何类型的构建或持续集成。
本文将基于以下几点来介绍Jenkins:
- CI/CD介绍
- Jenkins的安装需求与安装过程
- 基本架构及配置
CI/CD介绍
互联网软件的开发和发布,已经形成了一套标准流程,假如把开发工作流程分为以下几个阶段:
编码 → 构建 → 集成 → 测试 → 交付 → 部署
上面整个流程中最重要的组成部分就是持续集成(Continuous integration,简称CI)。编码 → 构建 → 集成 → 测试持续集成指的是,频繁地(一天多次)将代码集成到主干。将软件个人研发的部分向软件整体部分交付,频繁进行集成以便更快地发现其中的错误。它的好处主要有两个:1). 快速发现错误。每完成一点更新,就集成到主干,可以快速发现错误,定位错误也比较容易;2). 防止分支大幅偏离主干。如果不是经常集成,主干又在不断更新,会导致以后集成的难度变大,甚至难以集成。持续集成并不能消除Bug,而是让它们非常容易发现和改正。持续集成的目的,就是让产品可以快速迭代,同时还能保持高质量。它的核心措施是,代码集成到主干之前,必须通过自动化测试。只要有一个测试用例失败,就不能集成。
持续交付(Continuous delivery)指的是,频繁地将软件的新版本,交付给质量团队或者用户,以供评审。如果评审通过,代码就进入生产阶段。持续交付在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的「类生产环境」(production-like environments)中。持续交付优先于整个产品生命周期的软件部署,建立在高水平自动化持续集成之上。持续交付可以看作持续集成的下一步。它强调的是,不管怎么更新,软件是随时随地可以交付的。
持续部署(continuous deployment)是持续交付的下一步,指的是代码通过评审以后,自动部署到生产环境。持续部署的目标是,代码在任何时刻都是可部署的,可以进入生产阶段。持续部署的前提是能自动化完成测试、构建、部署等步骤。总的来说,持续集成、持续交付、持续部署提供了一个优秀的 DevOps 环境。对于整个开发团队来说,能很大地提升开发效率。
Jenkins的安装需求与安装过程
安装需求
机器要求:256 MB 内存,建议大于 512 MB、1GB的硬盘空间需要安装以下软件:Java 8 ( JRE 或者 JDK 都可以)
下载与安装过程:
首先,我们从Jenkins官方网站https://jenkins.io/下载最新的war包。虽然Jenkins提供了Windows、Linux、OS X等各种安装程序,但是,这些安装程序都没有war包好使。这里以Linux为例,下载Jenkins的war包以后,打开终端进入到下载目录,运行如下命令:java -jar jenkins.warJenkins就启动成功了!它的war包自带Jetty服务器,剩下的工作我们全部在浏览器中进行。第一次启动Jenkins时,出于安全考虑,Jenkins会自动生成一个随机的按照口令。注意控制台输出的口令,复制下来,然后在浏览器输入:http://ip:8080,接着粘贴口令,进入安装界面,如果执行默认的安装,Jenkins就自动配置好了Maven、git等常用插件。最后,创建一个admin用户,完成安装。


JDK的下载安装
Oracle Java Technologies | Oracle


[root@iZ2zej7q90l28tqdr8j60nZ ~] tar -zxvf jdk-8u321-linux-x64.tar.gz -C /usr/local/
[root@iZ2zej7q90l28tqdr8j60nZ ~] ls /usr/local/jdk1.8.0_321/
bin include jmc.txt legal LICENSE README.html src.zip THIRDPARTYLICENSEREADME.txt
COPYRIGHT javafx-src.zip jre lib man release THIRDPARTYLICENSEREADME-JAVAFX.txt
[root@iZ2zej7q90l28tqdr8j60nZ ~]
[root@iZ2zej7q90l28tqdr8j60nZ jdk1.8.0_321] cd bin/
[root@iZ2zej7q90l28tqdr8j60nZ bin] ls
appletviewer jarsigner javah jcmd jhat jrunscript jvisualvm policytool serialver wsimport
ControlPanel java javap jconsole jinfo jsadebugd keytool rmic servertool xjc
extcheck javac javapackager jcontrol jjs jstack native2ascii rmid tnameserv
idlj javadoc java-rmi.cgi jdb jmap jstat orbd rmiregistry unpack200
jar javafxpackager javaws jdeps jps jstatd pack200 schemagen wsgen
[root@iZ2zej7q90l28tqdr8j60nZ bin] ./java -version
java version "1.8.0_321"
Java(TM) SE Runtime Environment (build 1.8.0_321-b07)
Java HotSpot(TM) 64-Bit Server VM (build 25.321-b07, mixed mode)
[root@iZ2zej7q90l28tqdr8j60nZ bin]
配置JDK的环境变量
[root@iZ2zej7q90l28tqdr8j60nZ jdk1.8.0_321] vim /etc/profile
加入以下几行内容
export JAVA_HOME=/usr/local/jdk1.8.0_321
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPATH
最后启动Jenkins
[root@iZ2zej7q90l28tqdr8j60nZ ~] java -jar jenkins.war
Running from: /root/jenkins.war
webroot: $user.home/.jenkins
2022-02-03 10:27:19.871+0000 [id=1] INFO org.eclipse.jetty.util.log.Loginitialized: Logging initialized @1261ms to org.eclipse.jetty.util.log.JavaUtilLog
2022-02-03 10:27:20.009+0000 [id=1] INFO winstone.LoggerlogInternal: Beginning extraction from war file
2022-02-03 10:27:20.060+0000 [id=1] WARNING o.e.j.s.handler.ContextHandlersetContextPath: Empty contextPath
2022-02-03 10:27:20.198+0000 [id=1] INFO org.eclipse.jetty.server.ServerdoStart: jetty-9.4.43.v20210629; built: 2021-06-30T11:07:22.254Z; git: 526006ecfa3af7f1a27ef3a288e2bef7ea9dd7e8; jvm 1.8.0_321-b07
2022-02-03 10:27:21.040+0000 [id=1] INFO o.e.j.w.StandardDescriptorProcessorvisitServlet: NO JSP Support for /, did not find org.eclipse.jetty.jsp.JettyJspServlet
2022-02-03 10:27:21.220+0000 [id=1] INFO o.e.j.s.s.DefaultSessionIdManagerdoStart: DefaultSessionIdManager workerName=node0
2022-02-03 10:27:21.220+0000 [id=1] INFO o.e.j.s.s.DefaultSessionIdManagerdoStart: No SessionScavenger set, using defaults
2022-02-03 10:27:21.222+0000 [id=1] INFO o.e.j.server.session.HouseKeeperstartScavenging: node0 Scavenging every 600000ms
2022-02-03 10:27:22.381+0000 [id=1] INFO hudson.WebAppMaincontextInitialized: Jenkins home directory: /root/.jenkins found at: $user.home/.jenkins
2022-02-03 10:27:22.610+0000 [id=1] INFO o.e.j.s.handler.ContextHandlerdoStart: Started w.@6c61a903{Jenkins v2.319.2,/,file:///root/.jenkins/war/,AVAILABLE}{/root/.jenkins/war}
后台运行
[root@iZ2zej7q90l28tqdr8j60nZ ~] nohup: ignoring input and appending output to ‘nohup.out’
[root@iZ2zej7q90l28tqdr8j60nZ ~]
[root@iZ2zej7q90l28tqdr8j60nZ ~]
[root@iZ2zej7q90l28tqdr8j60nZ ~] ls
jdk-8u321-linux-x64.tar.gz jenkins.war nohup.out
[root@iZ2zej7q90l28tqdr8j60nZ ~] cat nohup.out
Running from: /root/jenkins.war
webroot: $user.home/.jenkins
2022-02-03 11:10:52.528+0000 [id=1] INFO org.eclipse.jetty.util.log.Loginitialized: Logging initialized @1336ms to org.eclipse.jetty.util.log.JavaUtilLog
2022-02-03 11:10:52.672+0000 [id=1] INFO winstone.LoggerlogInternal: Beginning extraction from war file
2022-02-03 11:10:52.722+0000 [id=1] WARNING o.e.j.s.handler.ContextHandlersetContextPath: Empty contextPath
2022-02-03 11:10:52.842+0000 [id=1] INFO org.eclipse.jetty.server.ServerdoStart: jetty-9.4.43.v20210629; built: 2021-06-30T11:07:22.254Z; git: 526006ecfa3af7f1a27ef3a288e2bef7ea9dd7e8; jvm 1.8.0_321-b07
2022-02-03 11:10:53.606+0000 [id=1] INFO o.e.j.w.StandardDescriptorProcessorvisitServlet: NO JSP Support for /, did not find org.eclipse.jetty.jsp.JettyJspServlet





基本架构及配置




Maven的下载与安装

[root@iZ2zej7q90l28tqdr8j60nZ jdk1.8.0_321] cd /usr/local/
[root@iZ2zej7q90l28tqdr8j60nZ local] wget https://dlcdn.apache.org/maven/maven-3/3.8.4/binaries/apache-maven-3.8.4-bin.tar.gz
[root@iZ2zej7q90l28tqdr8j60nZ local] tar -zxvf apache-maven-3.8.4-bin.tar.gz
[root@iZ2zej7q90l28tqdr8j60nZ local] mv apache-maven-3.8.4 maven
[root@iZ2zej7q90l28tqdr8j60nZ local] ls
aegis apache-maven-3.8.4-bin.tar.gz.1 etc include lib libexec sbin src
apache-maven-3.8.4-bin.tar.gz bin games jdk1.8.0_321 lib64 maven share
[root@iZ2zej7q90l28tqdr8j60nZ local] cd maven/
[root@iZ2zej7q90l28tqdr8j60nZ maven] ls
bin boot conf lib LICENSE NOTICE README.txt
[root@iZ2zej7q90l28tqdr8j60nZ maven] pwd
/usr/local/maven
[root@iZ2zej7q90l28tqdr8j60nZ maven]


基于此,Jenkins的安装与基本的全局配置以及最重要的插件的位置都已经介绍完毕,至于Jenkins的强大功能以及使用的话不是短短一些篇幅就能讲完的,还得是实际多用才能掌握。
最后再奉上官方文档的链接
- Slave
- 参考资料
https://cloud.tencent.com/developer/article/1773184?from=article.detail.1773183
四、Dynamic Slave 工作原理
1. 概念定义
基于K8s集群,Jenkins Master 接到构建任务后会动态拉起一个Jenkins Slave Pod来干活儿,活儿干完后可及时释放Pod。
一、缘起CICD的思想目前对于每一个正规的软件开发团队基本都是必填项,那么一般来讲Jenkins的应用自然沦为了刚需。基于K8s云原生Jenkins高可用设计思路(上)