@[toc]1。什么是CI/CDCI/CD是一种通过在应用程序开发阶段引入自动化来频繁向客户交付应用程序的方法。CI/CD的核心概念可以概括为三点:持续集成持续交付持续部署CI/CD主要针对集成新代码时产生的问题(俗称“集成地狱”)。为什么会有集成地狱这样一个“优雅的名字”呢?大家想想我们项目部署的过程,拉代码->构建->测试->打包->部署,如果我们经常需要部署项目,尤其是微服务时代,服务非常多的时候,我们会不停地测试打包和部署,估计得有人整天做这件事,而且这是乏味且无意义的重复。具体来说,CI/CD实现了应用程序整个生命周期(从集成和测试阶段,到交付和部署)的持续自动化和持续监控,这些关联的事务通常被统称为“CI/CD管道”,定义由开发和运维团队敏捷协作支持。1.1CI(ContinuousIntegration)CI/CD中的“CI”始终指的是持续集成,是开发人员的一个自动化过程。成功的CI意味着对应用程序代码的新更改会定期构建、测试并合并到代码存储库中。该方案可以解决一次开发中应用分支过多,导致冲突的问题。1.2CD(ContinuousDelivery/ContinuousDeployment)CI/CD中的“CD”是指持续交付和/或持续部署,这些相关概念有时可以互换使用。两者都关注流水线后续阶段的自动化,但有时也会单独使用它们来说明自动化程度。持续交付(ContinuousDelivery)通常是指开发者对应用的改动会被自动检测错误并上传到代码仓库(如GitHub、GitLab等),然后由开发者部署到实时生产环境。运维团队。这是为了解决开发和运营团队之间可见性和沟通不畅的问题。因此,持续交付的目的是确保部署新代码所需的工作量尽可能小。持续部署(ContinuousDeployment)是指将开发人员的变更自动从代码仓库发布到生产环境,供客户消费。通过一套全自动化的流程,解决了手工测试、编译、打包等操作。持续部署建立在持续交付的优势之上,以自动化管道的后续阶段。2.什么是Jenkins前面说的CI/CD是一种思想。思想要实现,就需要相应的工具。Jenkins是一款开源的CI/CD软件,可以说是CI/CD软件中的佼佼者。提供1000多个插件,支持构建、部署、自动化,基本可以满足任何项目的需求。总体而言,Jenkins具有以下六大特点:持续集成和持续交付作为一个可扩展的自动化服务器,Jenkins可以作为一个简单的CI服务器,或者成为任何项目的持续交付中心。易于安装Jenkins是一个独立的基于Java的程序,可以在Windows、MacOSX和其他类Unix操作系统上开箱即用。易于配置Jenkins易于通过其Web界面进行设置和配置,其中包括即时错误检查和内置帮助。插件更新中心有超过1000个插件,Jenkins集成了持续集成和持续交付工具链中的几乎所有工具。ExtendingJenkins可以通过其插件架构进行扩展,为Jenkins可以做的事情提供几乎无限的可能性。分布式Jenkins可以轻松地跨多台机器分配工作,有助于跨多个平台更快地推动构建、测试和部署。事实上,Jenkins有很多有趣的用法。今天还是想先通过一个简单的案例,让大家了解如何使用Jenkins实现SpringBoot项目的自动发布部署,让大家对Jenkins有个直观的认识。我知道的,还有其他各种使用细节,宋哥会在以后的文章中跟大家详细聊聊。3.准备工作3.1整体规划我们通过下图来看一下Jenkins在整个过程中的作用:结合第一节和第二节的介绍,这张图应该很容易理解。3.2准备代码提前准备好测试代码,上传到代码仓库。为了更实际,小伙伴们可以把这个代码仓库设置为private,方便以后验证Jenkins中的配置是否正确。考虑到GitHub网络有时不稳定,我这里用的是Gitee,一个很简单的SpringBoot项目,里面有个hello接口,仅此而已。我的代码仓库地址(私有仓库):https://gitee.com/lenve/jenki...3.3准备服务器理论上我们需要一台服务器来运行Jenkins,一台服务器作为我的应用服务器,但是我没有手头有一台额外的服务器,所以我将把Jenkins和我的SpringBoot项目部署到一台服务器上。在下一篇文章中,我将向您解释每个配置是针对Jenkins还是针对SpringBoot。.另外,有的朋友可能是在虚拟机上做实验,因为以后我们的代码提交到Gitee之后,Gitee会通过POST请求把这个事件通知给Jenkins,进而触发Jenkins的构建操作。所以这就需要Gitee能够访问到你的Jenkins服务器,所以如果你的Jenkins恰好是搭建在服务器上,这个很容易,但是如果是搭建在虚拟机里,就得通过花生壳之类的内网渗透工具来辅助你的工作,比较麻烦,花生壳网速也慢。不过小伙伴们不用着急,如果你在虚拟上搭建Jenkins又不想折腾花生壳,你也可以通过手动构建/定时构建来完成项目构建。4.搭建Jenkins为了省事,我决定使用Docker搭建Jenkins,一行命令即可搞定。为了操作方便,我们将Jenkins的工作目录映射到我的宿主机上,所以先在宿主机中准备一个data目录(非必须):#创建jenkins目录mkdir/data/jenkins_home/#修改目录的属主,所以Jenkins容器可以运行目录chown-R1000:1000/data/jenkins_home/接下来创建并启动Jenkins容器,同时挂载数据卷:dockerrun-d--namejenkins-p8088:8080-p50000:50000-v/data/jenkins_home:/var/jenkins_homejenkins/jenkins由于Jenkins运行时需要使用maven,所以有些人会选择使用maven目录作为挂载点,但我认为不是很有必要,尤其是初学者,很容易出错。以后还是直接copymaven到Jenkins容器里比较好,省事。执行以上命令,安装成功后,在浏览器中输入http://localhost:8088即可访问。然后过一会就可以访问Jenkins了:访问之前首先需要解锁Jenkins,网页上列出了解锁密码位置,但是由于我们在创建容器的时候设置了数据量,所以现在直接进入/宿主机的data查看/jenkins_home/secrets/initialAdminPassword处的初始化密码,如下:在网页中,输入密码并继续。接下来,我们将选择我们需要的插件。第一次安装推荐插件即可。如果由于网络原因导致安装失败,可以点击重试按钮重试。接下来新建一个用户,或者不用新建用户,直接使用admin即可:然后设置Jenkins访问地址:这个页面有乱码,但不影响。设置完成后,我们点击保存并完成按钮。然后就可以进入Jenkins了。整个过程完成后,建议执行如下命令重启Jenkins,因为有些插件需要重启才能生效。docker重启jenkins5。安装插件Jenkins启动成功后,我们将安装三个必备插件:MavenIntegration:Maven构建工具PublishOverSSH:整个工具,用于后续将Jenkins打包好的jar上传到应用服务器。Gitee:协助使用Gitee存储库。安装步骤如下:点击左侧的系统管理,然后点击右侧的插件管理进行配置。然后在可选插件中,搜索MavenIntegration、PublishOverSSH、Gitee三个插件:搜索完成后点击Installwithoutrestart。安装成功后重启Jenkins。建议执行dockerrestartjenkins重启,在网页点击重启,会卡很久,执行dockerrestart命令比较靠谱。6、配置Jenkins6.1基础环境配置插件安装成功后,我们就开始Jenkins的配置,在正式开始配置前做一些准备工作。这就需要我们提前准备Maven。由于Jenkins容器中已经包含了JDK,所以我们不需要提前准备JDK,只需要提前准备好Maven即可。为了避免权限问题,我们可以直接将Maven上传到jenkins容器中,然后进行配置。将宿主机中的maven复制到jenkins容器中,如下:#该命令的意思是将宿主机中的maven目录复制到jenkins容器中的/opt/目录下dockercpmavenjenkins:/opt/然后就可以启动了配置,配置的位置如下图所示:6.2JDK首先我们来配置JDK。Jenkins中默认安装了JDK。我们只需要配置它的配置:随意选择别名,根据实际情况配置JAVA_HOME即可。6.3MavenMaven就是我们刚才上传到dockermid-term的Maven,配置位置就行,以后Jenkins会自动从Gitee拉取代码,然后使用你这里配置的Maven来构建:名字是可选的,和MAVEN_HOME是前面刚上传到容器中的MAVEN目录。6.4Git配置Git,由于jenkins容器中已经存在git,所以这里不需要另外安装git,默认即可。所有配置,点击保存按钮。6.5远程凭证配置接下来,我们需要配置两个远程登录凭证。6.5.1应用服务器信息应用服务器是以后Jenkins将代码打成jar包后需要上传的服务器信息(地址、用户名、密码)。配置步骤如下,首先找到配置位置:向下滚动找到PublishOverSSH,然后点击Add开始配置,在Hostname位置填写你服务器的域名或IP:配置成功后,点击TestConnection进行测试以确保连接成功。有小伙伴反映这里的用户名和密码会导致jar包上传失败。需要在应用服务器上生成ssh密钥对,然后配置私钥给Jenkins。您可以返回此处进行更改)。6.5.2Gitee信息接下来我们配置Gitee信息。首先配置仓库的基本信息:接下来配置Gitee的凭证。基于这些凭据,可以从Gitee中提取代码。点击Add->Jenkins,添加credentials:添加成功后,可以选择这个token。最后,点击测试连接以确保您可以连接到Gitee。所有的配置工作都完成了,接下来我们就可以开始构建项目了。7.启动项目建设。首先,我们创建一个新任务。接下来,我们选择构建一个Maven项目。点击确定后,拉取到源码管理位置,开始配置。首先选择Git,填写Gitee上的仓库地址,然后为credentials写上Gitee的用户名/密码。这里有一点需要注意,就是默认的分支名称。GitHub上默认的主分支名称是main,Gitee貌似还是master。.还要在这里添加凭证信息:这里注意,有朋友反映Gitee上的用户名和用户空间不是一回事(如果你用的是GitHub,就不存在这个问题),这里用户名的位置其实是填写的用户空间名称(如果你不知道什么是用户空间,那么恭喜你,直接写用户名)。补充时间,我们来看一下打印过程:接下来,输入项目构建命令。以后Jenkins从Gitee拉取代码后,执行命令打包项目:最后配置并上传构建好的文件,执行启动命令如下:详细配置信息:根据上图配置,我们使用root用户登录,root登录成功后,会默认进入/root目录,然后自动进入data目录,然后我们的jar包就会被上传。到这个位置。然后我们也提前在应用服务器上准备一个名为deploy.sh的shell脚本,位于/root/data目录下,这个脚本的内容如下:exportJAVA_HOME=/opt/javaexportPATH=$JAVA_HOME/bin:$PATHJAR_PATH=/root/dataJARFILE=jenkins_demo-0.0.1-SNAPSHOT.jarps-ef|grep$JARFILE|grep-vgrep|awk'{print$2}'|xargskill-9java-jar$JAR_PATH/$JARFILE>out.log&if[$?=0];thensleep30tail-n50out.logfi这个脚本其实很好理解。首先配置环境变量。注意这里是应用服务器的环境变量,不是Jenkins。然后先检查,如果应用程序已经在运行,则先将其停止。然后运行我们最新的jar。此外,您还可以启用SSH操作日志。开启日志后,可以在Jenkins中看到操作应用服务器的过程。尤其是第一次配置的时候,很容易出错。配置好日志以后就知道是什么原因导致的错误了。错误的。配置方法如下图所示:至此,本项目配置完成。保存后点击BuildNow按钮开始构建:开始构建后可以点击Build按钮查看构建过程:点击控制台输出查看整个构建过程:构建完成后,进入应用服务器并执行jps命令查看正在运行的Java进程,我们可以看到我们的应用程序正在运行。8.自动构建完成。现在我们的项目是没有自动构建的,也就是我们提交代码到Gitee上的代码仓库的时候,不会触发Jenkins的自动构建。我们要手动点击build按钮,然后我们会来Continuetoconfigure来自动触发build。为了自动触发构建,我们需要修改两个地方。8.1修改Jenkins首先,在当前的Jenkins项目中,配置触发构建的规则:请注意,Jenkins已经在网页中给出了以后要配置的Webhook的地址,复制地址即可。8.2配置Webhook接下来在Gitee项目中配置WebHook。在当前项目中,选择Management选项卡,点击左侧菜单中的WebHooks,然后点击AddWebHook。由于Jenkins需要登录后才能操作,我们无法将公网Jenkins设置为匿名访问,所以这里我们将Jenkins的用户名和密码放在请求地址中,最终地址类似这样:http://username:密码@11.11.11.11:8088/xxxx。好的,就是这样。配置完成后,我们将代码提交到Gitee代码仓库。提交成功后,我们会查看是否会触发Jenkins的自动构建功能。9.总结嗯,Jenkins有很多有趣的用法。今天的文章限于篇幅,就通过一个简单的案例和大家分享一下Jenkins的基本用法,让小伙伴们对Jenkins建立一个直观的印象,更多的玩法,宋哥会在后续继续为大家介绍——上文章,小伙伴们也可以留言说说你想看Jenkins怎么玩。参考资料:https://www.redhat.com/zh/topics/devops/what-is-ci-cd
