jenkins+gitee实现前端项目自动化部署

前言

前端项目每次提交完代码都要手动拉取最新代码、打包、部署,这一套流程下来可能要浪费不少时间,特别是在项目处于快速迭代期的时候,那么如果前端可以实现自动化部署,开发人员每次push代码后由jenkins自动部署到测试环境,那将会在一定程度上简化开发人员的工作,让他们可以把更多精力放在处理其他问题上。

自动化部署流程图

一、先说说自动化部署需要具备的环境

1、安装Java环境(必须)

这里的话最好是安装JDK1.8以上的版本,因为Jenkins对于Java的版本有一定的要求。如果没有的话,则自行百度安装。
验证本地环境是否已有java环境

java -version
2. 安装Jenkins(必须)

Jenkins是自动化部署的核心应用,当然如果对BuildMaster这些持续集成的工具比较熟悉的话,也可以用其他工具来做集成。
Jenkins的安装步骤可以参考我的这篇文章:Linux环境下安装Jenkins

3. 安装Git/Svn(必须)

这里的话,由于我的项目是使用git进行版本管理的,所以下载的是git。
检查本地是否已经有git

git --version

如果没有git的话,可以通过下面的命令安装或者自行百度:

yum install git
4. Node环境安装(前端必须)

由于我们的项目是前端项目,所以要想在服务器中执行打包、编译等操作的话,服务器就必须要有node的环境(如果是后端的话应该就需要maven等环境)。Node环境如何安装自行百度

二、配置Jenkins权限

安装完Jenkins后,还需要再配置一下Jenkins的权限:

sudo vim /etc/sysconfig/jenkins
编辑状态中
JENKINS_USER="root"

修改 Jenkins 相关文件夹用户权限

chown -R root:root /var/lib/jenkins
chown -R root:root /var/cache/jenkins
chown -R root:root /var/log/jenkins
service jenkins restart

三、配置Gitee公钥

由于我们的Jenkins后期需要向远程仓库拉取代码,所以我们需要对远程仓库配置一下服务器的公钥

(1)服务器生成公钥:

在服务器的sh窗口中输入下面的命令后,根据提示按3次回车即可
注意:邮箱的话就用自己的邮箱

ssh-keygen -t rsa -C "***@xxx.com"
(2)查看生成的公钥:
cat ~/.ssh/id_rsa.pub
(3)在码云的远程仓库上面添加服务器公钥
添加服务器公钥

公钥添加好后,我们就可以在公钥管理中看到了

四、Jenkins创建自动化部署的任务

(一)创建任务

进入Jenkins后点击主页左侧菜单的新建任务,在弹框中输入自定义任务名称,选中构建自由风格的软件项目后,创建任务。


image.png

image.png
(二)配置git和远程仓库的关联

这一步主要是实现当我们push代码后,由gitee发送一个post请求给Jenkins,Jenkins自动拉取最新代码的步骤。
进入任务实例中,点击配置,进入任务配置页面

进入任务的配置页面

(1)Jenkins配置远程仓库地址

在源码管理中选择Git,配置远程仓库地址和凭证(也就是码云的账号密码)


Jenkins
(2)添加触发器

触发器是指Jenkins在什么条件下会触发部署的操作,由于我们这里并不是常规的根据时间表来部署,而是根据接收到远程仓库的post请求再部署,所以需要借助到Generic Webhook Trigger Plugin插件。
插件可以在系统管理 -> 插件管理中进行配置

image.png

image.png

插件安装成功后,我们返回到原先的任务配置界面,在构建触发器中选中Generic Webhook Trigger后,配置token,这里的token可以自定义,主要是下面我们需要在码云上使用到这里配置的token。

选择触发器

(3)配置远程仓库的钩子

进入到我们的远程仓库中,选择左侧的WebHooks后,配置URL,URL的格式为:

http://JENKINS_URL/generic-webhook-trigger/invoke?token=owner_token

JENKINS_URL指的是你的IP地址和服务器的端口号
owner_token指的是之前在上一步配置的token

image.png

配置完成后,点击更新/完成。然后测试一下请求是否成功,如果成功的话,可以在请求历史中看到对应的请求结果。


image.png

如果遇到请求状态是403的话,就需要检查一下返回的错误信息,看一下jenkins那边的配置有没有问题了。
可以试一下重启一下Jenkins,或者是检查一下关于Jenkins安全相关的配置,在跨站请求伪造保护模块中,选择启用代理兼容。需要注意的是,由于我的Jenkins版本比较高,所以不一定和你们的页面完全一样,如果这里解决不了你的问题的话,还是另外需要百度解决。

配置全局安全配置
启用代理兼容
(4)构建配置

接下来,我们来简单写点代码来进行测试


构建配置

我们可以在任务面板中选择立即构建我们的项目,然后在左侧下面的构建历史中看到我们正在运行的任务。


执行构建

我们可以点击构建历史中的选项来查看我们每一次的控制台输出,这是一个观察我们任务执行情况的很好的一个窗口。
查看任务执行情况

其实点击执行后,jenkins会自动拉取我们远程仓库的代码,拉取完成后,就会执行我们配置在构建中的具体代码。

(三)配置Jenkins运行Node的环境

在前面,虽然我们下载并安装了Node.js,但实际上我们还需要在Jenkins中把我们的Node的环境变量进行配置后,才可以执行对应的npm操作。

步骤1:我们先进入到系统管理 - 系统配置
进入系统配置
步骤2:在全局属性中配置环境变量

这里的话,可以直接在服务器中通过echo $PATH来快速获取

配置Node环境变量

其实也可以使用Jenkins中的NodeJS插件来解决上面那个问题,不过这里的话我感觉在这里配会更加简单,就没有用插件。

五、正式实现自动化部署

(一)在Nginx中配置前端项目的路径

由于我们的前端项目使用Nginx进行部署,所以我们还需要下载Nginx,下载过程自行百度即可。
我们进入到$Nginx_Home/conf/nginx.conf文件中,配置我们前端项目的端口号以及文件路径

server {
        listen       3001;
        server_name  localhost;

        location / {
            root   /usr/local/my_proj/test_devops/;
            index  index.html index.htm;
        }
}
(二)编写构建的正式脚本
npm install
npm run build
ls -al
cp -r -a ./build/* /usr/local/my_proj/test_devops/
image.png
(三)本地开发后,push代码,此时即可实现自动化部署

本地未提交代码前:


本地未提交代码前

git执行push代码,可以观察到jenkins开始自动执行部署任务了:

jenkins接收到远程仓库的post请求,开始部署任务

部署完成后,刷新页面即可看到最新结果:


image.png

说在最后

最后,我们再来对整体的步骤做一个小总结吧:

环境需要:
  1. jdk1.8
  2. jenkins
  3. node.js
  4. git
jenkins插件需要
  1. Git插件
  2. Generic Webhook Trigger插件
  3. SSH插件(如果需要部署到其他服务器的话则需要这个插件)
配置jenkins任务
  1. 配置源码管理(远程仓库的地址和账号密码)
  2. 远程仓库配置jenkins服务器的公钥
  3. 远程仓库和jenkins配置钩子和对应的token,完成关联
  4. 编写对应的部署脚本(就是npm install这些啦)
  5. 测试后完毕

实际上,正式项目的自动化部署一般是Jenkins单独一台服务器,然后测试环境,生产环境再分别有至少一台服务器,Jenkins在构建完项目中,还需要有另外一步,就是在构建后操作这个模块中通过ssh登录到测试或者生产的服务器上面,再执行对应的脚本。由于这里我只有一台服务器,所以就演示不了后面的操作,后面的操作其实也不难,大家稍微配置一下就行。

参考文章:
嘿!Jenkins前端自动化部署
Jenkins执行脚本npm命令报错 npm: command not found

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容