1、环境
Jenkins部署环境: 运营商: Tencent Cloud CVM 参数: 4核心 8G内存 5M带宽 系统环境: CentOS 7.5 + docker Nginx部署环境: 运营商: Ali Cloud ECS 参数: 1核心 2G内存 1M带宽 系统环境: CentOS 7.5 + docker (注: 经试验,Jenkins最小需求2G内存,小于2G可能会安装失败)
2、文档结果预期
通过Jenkins自动打包codeup上的前端代码并发布于Nginx服务器上,完成自动部署流水线
3、Jenkins简介
Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,主要用于持续、自动的构建/测试软件项目、监控外部任务的运行(这个比较抽象,暂且写上,不做解释)。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。通常与版本管理工具(SCM)、构建工具结合使用。常用的版本控制工具有SVN、GIT,构建工具有Maven、Ant、Gradle、Node.js等。简单说,jenkins可以帮助我们进行项目打包,部署至服务器。
4、为什么是Jenkins
1、易于安装,官网提供war包,只用放在java环境下就可以启动,不需要数据库支持 2、易于配置、所有配置均通过web界面实现,也可以通过api实现脚本控制。 3、支持email通知,发布构建或构建成功等状态可通过email通知 4、可支持分布式构建,提升打包效率 5、日志跟踪 6、支持插件扩展,可通过通用api开发适合团队使用的工具。
5、Docker部署的好处
1、标准化应用发布,docker容器包含了运行环境和可执行程序,可以跨平台和主机使用,通过dockerfile进行打包docker并发布,在不同环境下实现相同功能,避免环境不一致导致无法运行的问题 2、松耦合,将不同服务部署在不同的docker服务上,避免因为单应用宕机导致服务器所有服务崩溃。 3、可进行集群布置降低成本,提高效率 4、节省空间,实验环境中vm往往会几个G的磁盘存储消耗,docker消耗的是MB级的。
6、Docker的配置
6.1、 Docker的安装
Windows下载Docker Desktop后直接下一步下一步就可以安装了 Linux安装我在Docker基础教程中进行介绍 MaxOS与Windows类似
6.2、Docker的配置
Docker只用配置国内镜像就可以了,官方镜像下载很慢,下面是几个国内常用镜像
- 阿里云 docker hub mirror registry.cn-hangzhou.aliyuncs.com 如果有账号的, 使用: [系统分配前缀].mirror.aliyuncs.com 具体上阿里云容器HUB控制台查看.
- 腾讯云 docker hub mirror mirror.ccs.tencentyun.com
- 华为云 05f073ad3c0010ea0f4bc00b7105ec20.mirror.swr.myhuaweicloud.com
- docker中国 registry.docker-cn.com
- 网易 hub-mirror.c.163.com
- daocloud f1361db2.m.daocloud.io
Linux配置daemon.json 路径: /etc/docker/daemon.json (docker 版本 >= 1.10 时)
{"registry-mirrors": ["https://registry.cn-hangzhou.aliyuncs.com"]}
MacOS与Windows配置docker desktop
7、安装jenkins
7.1 下载Jenkins
docker pull jenkins/jenkins:lts
在命令行中输入上面的命令(lts表示下载最新版本)
7.2 启动Jenkins
docker run -d --name jenkins -p 9833:8080 -v /usr/opt/jenkins:/var/jenkins_home jenkins/jenkins:lts;
注: run docker options 通过镜像创建容器 -d 将服务放至后台运行,不显示输出日志,相关的输出日志可通过日志文件或命令进行查看 --name 对当前docker实例进行命名,方便运行时操作 -p 端口号映射,将docker实例端口号映射于当前物理机实际端口,可根据需求自由选择 -v 目录映射,官方解释挂载,将实例目录挂载与物理机实际目录 jenkins/jenkins:lts 启动的镜像
8、Jenkins的基础配置
8.1、解锁Jenkins
启动完成Jenkins之后就可以直接通过浏览器打开服务,然后将
/var/jenkins_home/secrets/initialAdminPassword
目录下的密码写入输入框解锁Jenkins
映射后的目录应该是
/usr/opt/jenkins/secrets/initialAdminPassword(这里只记录Linux的映射,其他系统也差不多)
8.2、安装插件
如果对Jenkins不太熟悉的话建议安装推荐的插件,如果自选插件,可以避免一些后期的插件维护的步骤,毕竟有些插件是runtime的比较占内存。
等待安装完成即可
8.3、设置默认管理员
8.4、完成配置
9、创建一个新任务
点击create a job,选择自由项目,并输入任务名称
下面对创建后的配置简单的说明
1、General
通用设置,配置项目基本信息,值得注意的是This project is parameterized。我的理解是将项目参数化,可以通过这个配置设定一些该项目的参数,后面选读中会用到该配置。
2、源码管理
当前只安装了git插件,如果安装了svn,也会出现svn选项
3、构建触发器
可以通过该配置来设定构建的触发条件,达到自动部署的效果,一般情况下,我们期望可以通过脚本(Python脚本,JS脚本,Shell脚本等)来充当构建的条件,也期望能够通过git提交这个事件来进行自动部署,这些都可以通过该配置进行设定,如果没有的,也可以通过相应的插件来进行控制。
4、构建环境
在构建时,需要的系统环境(node,jvm,venv)将在这里进行设置,例如构建一个SSR业务就可能需要涉及到多个环境支持,就需要在这里进行配置,同时也支持插件扩展可选环境。
5、构建
将在最后一组配置中进行构建控制,根据不同的环境安装步骤书写不同的脚本,也可以支持例如ftp文件传输,ssh登录服务器管理等等。
10、插件使用(可选看)
10.1、Generic Webhook Trigger
10.1.1、安装
安装步骤只会记录一次,后续将不再记录
点击导航栏中的管理Jenkins后,打开管理插件
在可选插件中搜索webhook,勾选左侧复选框,再进行install without restart / download now and install after restart。根据自己需要去选择,建议一般情况下安装完插件都重启一下服务
10.1.2、为什么是Generic WebHook Trigger
自动触发jenkins,我们希望是根据自己需要的分支构建才自动触发,有选择性构建,而不是全部构建,故有以下插件处理,Generic Webhook Trigger ,可以根据条件做过滤处理。我们可以在代码版本管理工具上去定义一个WebHook,将WebHook的地址填入Jenkins安装Generic WebHook Trigger后生成的地址。以后当代码版本管理工具有对应的action时,会向该地址发送一个post请求,我们可以通过Generic WebHook Trigger来解析该请求,达到触发的效果。
10.1.2、配置触发器
Generic Webhook Trigger主要有: Post content parameters、 Header parameters、Request parameters和Optional filter这几个组成。
其中,Post content parameters是对POST请求数据的处理,其他 Header parameters、Request parameters类似,这些都是匹配请求数据中的param,他会判断是否具有指定的这个参数,具体介绍如下
(1)筛选参数的变量名,这里是ref; (2)表达式Expression,使用 .ref匹配的数据。这里应该是先确定触发器的名称,就是(4)中指定的变量; (4)指定触发器的名字;
总的来说,通过(1)(2)(3)(4)的设置,将请求中的ref属性的值和Optional filter的表达式Expression进行比较,如果匹配则触发Jenkins构建,如果不匹配则不触发。
最后在Token Credential填入自己代码版本管理工具的认证方式就可以了,一般是用户名密码。
(注: 该token值如果填写,则WebHook的地址后需要带上?token=xxxxxx)
10.2、Publish Over FTP
10.2.1、安装
10.2.2、为什么是Publish Over FTP
Jenkins上的优秀FTP传输插件有很多,此款是最活跃且使用人数最高的。说明:这个插件可以将构建的产物(例如:Jar)发布到FTP中去。
10.2.3、配置Publish Over FTP
安装完成后需要进入系统管理中的系统配置做基本的配置
在页面最底部找到相关设置并新增FTP服务器
FTP Server Name:名称
Hostname:主机IP或者域名
Username:ftp登陆用户名
Password:ftp密码
Remote Directory:远程根目录(建议设置为:/)
配置完成后回到项目配置中的构建后操作,添加构建后操作步骤,选中发送到FTP
FTP Server - Name:选个一个你在系统设置里配置的配置的名字
Source files:需要上传的文件(注意:相对于工作区的路径,可以是单个文件也可以是目录)
Remove prefix:移除目录(只能指定Transfer Set Source files中的目录)
Remote directory:远程目录
10.3、Git Parameter
10.3.1、安装
10.3.2、为什么是Git Parameter
用于动态从 Github 或者 Gitlab 中检索项目分支信息,在 Jenkins Job 参数化构建中提供选择分支项,方便用户在执行构建时候执行选择的分支
10.3.3、配置Git Parameter
安装完成后就可以在通用配置中设置启用参数化构建项目
最后在源码管理指定分支中设置我们刚刚设置的参数变量,如下图
11、总结
Jenkins的强大不仅仅在构建过程中,更多的在于构建过程的监控,集群处理、构建以增加效率,分布式部署实现大规模协作。Jenkins是国际上流行的免费开源软件项目,是基于Java开发持续集成工具,用于监控持续重复的工作,旨在提供一个开放的易用的软件平台,使软件的持续集成自动化,大大节约人力和时效