一、Jenkins 介绍
看到这篇文章的你,或多或少都已经对 Jenkins 有过一定了解,就算没有也一定已经听过他的相关话题。
在我们学习阶段,常会听到持续集成和持续部署这样的词语,有些小伙伴们已经亲手实践过,还有些没有过,今天就让我们一起对 Jenkins 做一个了解吧。
1、持续集成和持续部署是什么
持续集成:CI 是一种开发实践,其中开发人员一天几次将代码集成到共享存储库中。当有人将新代码推送到共享存储库中时,测试会在非开发人员(测试人员)的计算机上自动运行。这种纯手动的构建测试,效率非常的低,开发人员必须等待测试人员的反馈后才知道结果,如果错了,还要修改bug , 这个过程一方面需要沟通成本,另外一方面效率是非常低的.
持续部署:我们都知道,项目最终是会部署到服务器上去,在没用Jenkins之前,大都是我们或专业的运维将项目进行部署。如果项目非常多或者部署完后出现bug,需要人手动的一个个部署或者能力强些的大佬,就是用脚本文件部署,但是看起来还是非常麻烦.
2、关于 Jenkins
Jenkins 是一个用 Java 编写的开源自动化工具,带有用于持续集成的插件。
Jenkins 用于持续构建和测试您的软件项目,从而使开发人员更容易将更改集成到项目中,并使用户更容易获得新的构建。它还允许您通过与大量测试和部署技术集成来持续交付软件。
Jenkins 集成了各种开发生命周期过程,包括构建、文档、测试、打包、模拟、部署、静态分析等等。
Jenkins 借助插件实现了持续集成。插件允许集成各种 DevOps 阶段。如果要集成特定工具,则需要安装该工具的插件。例如 Git、Maven、Node 项目等。
3、Jenkins 的工作流程
我画了一张简易的Jenkins 的工作流程图,希望能带给你一些帮助。
(图片说明:Jenkins 一项配置简单的工作流程图)
流程说明:
-
开发者在本地开发,然后提交到 Source Respository 中,
-
触发GitHub或者 GitLab 配置的钩子函数程序,继而通知 Jenkins
-
Jenkins 收到通知,会通过 Git/SVN 插件,重新从项目配置中的代码仓库中拉取最新代码,放置于 Workspace (Jenkins 存放任务的目录)
-
之后重新触发构建任务,Jenkins 有很多的构建的插件,Java常用的 Maven 、Gradle,前端的 Node 等
-
如果有安装发送邮件的插件并且进行了配置,那么可以在项目中进行配置,构建失败或者成功都可以选择是否给开发者发送邮件
-
构建成功后,Jenkins 会通过一个 SSH 插件,来远程执行 Shell 命令,发布项目,在项目中可以配置多台服务器,也就可以一次性部署到多台服务器上去。
-
补充
:当然很多时候,构建成功后,并不会直接部署到服务器上,而是打包到另外一台服务器上存储(应用服务器)或者存储为软件仓库中的一个新版本。- 原因是一方面为了更好的回退版本,出现错误可以及时恢复,因为一个大型项目,它的构建过程时间说不上短;
- 另外一方面也是为了更好的扩展,如果出现紧急情况,需要横向扩展,可以在备用机器上,直接进行拉取部署即可。
一个简易的自动部署化的过程,大致是如此的。
但其实中间还有不少东西的,例如代码审查和 Jenkins 自动化测试等等,对一门技术了解的越多,不知道的也就越多了。
二、Docker 安装 Jenkins
Jenkins 其实支持各个系统安装,Windows 、Liunx 、Mac 都可以的。选择 Docker 是方便哈,因为我其他的环境都是用 Docker 搭建的~~ 所以我这里介绍的也是 Docker 安装 Jenkins,后续的文章也都是基于此。
我目前的环境:Jenkins 2.346.2、阿里云服务器centos7、Docker version 20.10.7
2.1、搜索Jenkins 镜像
docker search jenkins
复制代码
deprecated
是弃用的意思,第一条搜索记录就是告诉我们 jenkins 镜像已经弃用,让我们使用 jenkins/jenkins:lts
镜像名进行拉取。
2.2、拉取 Jenkins 镜像
docker pull jenkins/jenkins:lts
docker images #查看镜像
复制代码
既然是学习,就得上手最新的啦,错了再降。
2.3、启动Jenkins 容器
在宿主机创建挂载目录
mkdir -p /home/jenkins/workspace
复制代码
启动 Jenkins 容器
docker run -uroot -d --restart=always -p 9001:8080 \
-v /home/jenkins/workspace/:/var/jenkins_home/workspace \
-v /var/run/docker.sock:/var/run/docker.sock \
--name jenkins jenkins/jenkins:lts
复制代码
修正于2022年 8 月 16日晚
docker run -uroot -d --restart=always --privileged=true -p 9001:8080 \
-v /home/jenkins/workspace/:/var/jenkins_home/workspace \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/bin/docker:/usr/bin/docker \
--name jenkins jenkins/jenkins:lts
复制代码
!! 补充
:因为个人的疏忽,之前的启动命令中,没有加关于docker的映射,这将导致无法在 jenkins 内部中运行 docker 命令,非常抱歉。
对本文而言,使用修正后命令和之前相比均是可以的。 但是对于创建流水线任务时会有一定影响,因为无法运行docker命令。
2.4、使用 Jenkins
这个时候就可以直接访问了。