jenkins到底是啥?到底哪好?到底怎么用?

952 阅读4分钟

背景介绍

大家好,我又回来了,据上次发文已过去70多天,自从把我的第一次献给掘金之后,不料居然有不少人喜欢,还因此有机会参加了年度大会,还得到一个毛绒玩具,为了能在今年的大会,还能得到一个毛绒玩具,我又屁颠屁颠回来了,没错,我就是这么务实,这么不要脸


问题分析

言归正传,咱们今天的主题是jenkins,任何一门技术,一定是为了解决某些或者某个问题产生的,所以在说他之前,咱们先描述一下平时遇到的问题,

项目要上线了,上线流程是什么?这里拿一个最简单的纯前端项目举例,谁让咱是前端开发呢?


1.开发分支合并到master,并切换分支到master
2.安装所需的依赖库,也就是npm install
3.编译打包,也就是传说中的 npm run build
4.登录服务器,将之前版本的项目程序删掉
5.将打包结果扔到服务器web容器里


好了,上线完了,这一切都看着那么正常。好,上线完了,开始得瑟得瑟……

此时pm来了:说有个字写错了,要赶紧修改上线。

神马!!!此时尽管心里有一万只草泥马,也得先修改上线后再说,

于是你改完字就又重复了上面的5个步骤。


咱们假设一下,如果项目本身就迭代速度很快怎么办,如果项目每上一次线都不仅仅是上面的5个步骤呢?

其实这哪是假设呀,事实明明就是比上面的步骤要复杂的多,尤其是后端项目,尤其是复杂的相互关联相互依赖的大项目

那怎么办呢?总不能把时间都浪费在毫无意义的重复的事情上吧,我还得学习新东西呢!还有一大堆绩效压着呢!还有老婆孩子在家等着呢!

我想要的结果是:代码只要合并到master 就自动实现项目上线

嗯?谁在呼唤我!千呼万唤始出来,终于该主角登场了,jenkins,他就是为了解决上面的问题产生的,用高大上的词语说就是 持续集成,持续交付,Use more professional words 就是CI/CD,哎呀,一不小心就暴漏了我其实还是个英语爱好者


接下来说说jenkins到底是怎么解决上面的问题的呢?

首先,咱们的代码一般都有版本控制,都有代码仓库,不管是gitlab 还是github,他们都有一个叫做webhook的东西,说白了就是,你这边只要有代码提交、分支合并等操作,他就可以通知给你,这里当然是通知jenkins了,jenkins要接受通知,你得提供点东西吧,不然别人怎么通知你。没错,jenkins 这边提供一个webhook url, 只要填写到代码仓库的webhook配置项里面就可以了

jenkins接收webhook的url 大概是这样的:http://jenkins服务器/project/demo

假设jenkins收到通知说:项目A有人合并代码到master了,那jenkins到底需不需要构建呢?此时需要介绍一下jenkins里面的构建触发器,这个其实就是设置一下,满足什么条件下,才会触发你的构建任务。

这里假设满足了重新构建的条件,项目A要重新构建,jenkins得知道你项目A的代码在哪吧,也就是你的代码仓库地址,知道你的地址还不行,我得有权限clone你的代码呀,所以jenkins得知道你的代码仓库的账号密码,当然设置ssh 公钥也是可以的,好了,最后一个环节,jenkins要准备构建了,但是jenkins得知道你要具体干点啥吧,没错,大多情况下是执行shell命令行脚本,

拿上面最简单的纯前端上线举例:

//伪shell脚本

cd 到项目代码目录

npm install

npm build

cd到web服务目录

rm掉上一个版本的项目

cp 新构建的项目到web服务目录

//end

总结一下本节要点,也就是上面加粗标注的关键字

1,webhook

2,构建触发器

3,代码仓库地址

4,账号密码

5,shell命令行脚本


了解了为啥和原理后,接下来介绍一下怎么用(jenkins安装在此不再赘述,有需要的可自行搜索)

第一步,新建一个任务,输入名字,选择第一项,构建一个自由风格的软件项目


第二步,输入项目描述

第三步,输入代码的仓库地址,并告知jenkins 仓库的账号密码

第四步,设置构建触发器


第五步,编写构建命令脚本


结束语

不知各位看到最后能否对jenkins有个简单的认识,反正跟我也没关系

防疫不妨学,最后祝各位疫情期间身体健康!