Jenkins集成Gulp实现前端自动发布

一种方式是在本地(也就是Jenkins所在服务器)安装nodejs以及gulp,并在workspace中执行shell/cmd,实现前端代码的打包集成,然后通过SSH发送至目标服务器。

另一种方式是在Jenkins中安装nodejs的插件,通过插件进行打包操作。在Jenkins服务器上也会进行nodejs安装,但这次的安装仅限于Jenkins中使用,本地是无法进行的(疑似原因是没有进行本地PATH配置,Jenkins在使用插件时会使用自己的配置路径/临时将路径加入PATH,实现手段没有仔细研究)。

因为觉得本地安装nodejs及gulp太麻烦,于是选择了第二种使用插件的方式。(结果遇到了坑)

一、安装NodeJS Plugin

Jenkins-系统管理-插件管理(pluginManager)-可选插件

搜索NodeJS Plugin

安装,选择自动安装(如果此时你在Jenkins本地已经安装了nodejs,也可以不选自动安装,直接在安装目录中填写本地安装路径)

选项中可以安装Global npm pakcages to install 也就是安装nodejs相关的其它插件(比如bower gulp)

在线安装
本地安装

二、在Job中应用

在构建环境流程时可以选择使用node环境配置


构建环境

三、构建执行语句

这里有一点要注意,如果Jenkins服务器是Linux系统(网上大部分文章都是),那么可以直接选择Execeute Shell即可。如果比较小众的使用了Windows系统,会提示错误

The system cannot find the file specified
FATAL: command execution failed
java.io.IOException: CreateProcess error=2, 系统找不到指定的文件。
    at java.lang.ProcessImpl.create(Native Method)
    at java.lang.ProcessImpl.(Unknown Source)
    at java.lang.ProcessImpl.start(Unknown Source)
Caused: java.io.IOException: Cannot run program "sh"

那么有两个方案:(https://stackoverflow.com/questions/15135771/hudson-on-windows-error-java-io-ioexception-cannot-run-program-sh)

1、Execute Shell + 修改Jenkins配置(未测试)

Manage Jenkins -> Configure System -> Shell, set the shell path as C:\Windows\system32\cmd.exe

2、选择"Execute Windows batch command"(测试成功)

执行内容就是最直接的

gulp build

四、出现了错误!

(1)原本在执行内容中加入了gulp -v作为测试,结果显示

'gulp' 不是内部或外部命令,也不是可运行的程序 或批处理文件。

原因:没有安装gulp,于是在NodeJS Plugin里进行gulp的安装

(2)gulp -v成功!但是——

[14:18:55] Local gulp not found in D:\Jenkins\workspace\**************
[14:18:55] Try running: npm install gulp

无法找到gulp,可是gulp -v已经成功了啊……

那我不直接执行gulp build,用nodejs gulpfile.js呢?

Error: Cannot find module 'gulp'
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:581:15)
    at Function.Module._load (internal/modules/cjs/loader.js:507:25)
    at Module.require (internal/modules/cjs/loader.js:637:17)
    at require (internal/modules/cjs/helpers.js:20:18)

还是找不到

重新查找gulp安装及使用的说明,发现原来gulp分为全局安装和本地安装两种,本地安装必须在当前工程下进行,本地的gulp是专属于这个工程的,只有它才能对代码进行编译打包,全局gulp不行。(具体原因参见:https://stackoverflow.com/questions/22115400/why-do-we-need-to-install-gulp-globally-and-locally)有一种说法是为了你的工程被移植到其他地方时,如果用新服务器的全局gulp可能出现版本、配置等问题,于是就需要本地也有一份gulp,连同源码一并移植。

五、gulp本地安装

1.创建npm link或软链接(未测试)

2.用命令行本地创建吧

npm install gulp --save-dev && gulp build

问题在于安装之后会生成node_modules,但是每一次从svn上更新代码这个文件夹都会被删掉(workspace的清除功能),相当于每次都重新安装,代价也太大了……

六、不删除的SVN更新

Jenkins提供了五种SVN的更新方式,详见(http://blog.51cto.com/zhangxingnan/1427000),之前选择了Emulateclean checkout by first deleting unversioned/ignored files,then ‘svn update’,因此每次都会清空workspace,换成Use‘svn update’ as much as possible就可以了

Check-out Strategy 代码检出策略http://blog.51cto.com/zhangxingnan/1427000

但是要注意的是第一次检出还是要安装一次,所以我的策略是先在Jenkins里install一遍,再把配置改掉,只执行gulp就好了。

七、遗留问题

1、如果采用npm link或软链接方式,也许就不用再本地安装gulp,待测试

2、gulp生成的目标文件夹destination原本在SVN上也有一份,所以如何在从SVN上检出时跳过destination文件夹不检出呢……尝试过源码管理-高级里的Exclude Region但是没有效果,待验证

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

推荐阅读更多精彩内容