`

搭建Web前端开发的持续构建环境

 
阅读更多

Web前端开发的持续构建环境的搭建,主要完成以下几个目标:

 

  1. 可以采用jslint/jshint对js代码进行检查,并能够输出报表。
  2. 能够运行js的UT,并输出报表。
  3. 能够采用minify工具,对js、css代码进行压缩、合并,输出部署的代码,并且压缩、合并后,能够自动处理HTMl页面中的引用。
  4. 以上所有的功能,能够集成到自动构建环境(jenkins)中自动执行,并且产生报表。
  5. 能够根据配置,自动构建测试版本、发布版本,并且自动部署到相应的服务器上。
具体实现如下:

实现概述:
采用Jenkins作为持续集成环境,采用ant作为构建工具,集成jslint4java, jsTestDriver, requriejs(r.js)来完成实际的构建工作,并把构建结果输出的指定的目录,Jenkins从指定的目录中读取结果并展示。

基础环境:
  1. Java
  2. Ant
  3. Jenkins
  4. Git(可以采用其他源码控制系统)
  5. Nodejs
源码目录结构:


 
采用jslint对js代码进行检查,并输出报表
  1. 下载jslint4java。 http://code.google.com/p/jslint4java/。 jslint4java是一个java对jslint工具的封装,可以通过java执行jslint对js代码进行检查。并且,此项目提供了ant task,可以直接ant中调用执行。
  2. 把下载的jar包(jslint4java-xxx.jar)放到build目录。
  3. 在Ant脚本中增加如下代码:
<taskdef name="jslint"
           classname="com.googlecode.jslint4java.ant.JSLintTask"
           classpath="./build/jslint4java-2.0.2.jar" />
	
	<target name="jslint" depends="clean">
		<mkdir dir="${stat.result.folder}/jslintOutput"></mkdir>
		<jslint failureProperty="false" haltOnFailure="false">
			<formatter type="checkstyle" destfile="${stat.result.folder}/jslintOutput/jslintresult.xml"/>
			<fileset dir="scripts">
				<include name="**/*.js"/>
				<exclude name="require.js"/>
			</fileset>
		</jslint>
	</target>	
    说明:实际上,是把jslint的检查结果输出成checkstyle的格式,Jenkins中有checkstyle插件可以读取这个格式

采用jsTestDriver执行js的UT
  1. 下载jsTestDriver。 http://code.google.com/p/js-test-driver/,把下载的jar包放到build目录。 jsTestDriver可以通过java,运行js编写的UT,并且可以同时指定多个浏览器运行环境同时运行。
  2. 编写jsTestDriver的配置文件,放到build目录
server: http://localhost:9876

load:
  - ../scripts/*.js
  - ../scripts-test/*.js
 
    3.  在ant中,采用java task调用 jsTestDriver来运行编写的ut
<target name="jsut" depends="clean">
		<mkdir dir="${stat.result.folder}/jsUTOutput"></mkdir>
		
		<java jar="build/JsTestDriver-1.3.4.b.jar" fork="true" failonerror="true">
			<arg value="--port"/>
			<arg value="9876"/>
			<arg value="--config"/>
			<arg value="build/jsTestDriver.conf"/>			
			<arg value="--browser"/>
			<arg value="C:\Users\juns6831.CHN\AppData\Local\Google\Chrome\Application\chrome.exe"/>
			<arg value="--tests"/>
			<arg value="all"/>
			<arg value="--testOutput"/>
			<arg value="${stat.result.folder}/jsUTOutput"/>			
		</java>
	</target>
   说明:jsTestDriver的运行输出的结果是junit格式的,Jenkins的Junit插件可以读取此结果。

采用requriejs的optimizer来压缩js, css
  1. 下载requirejs.js,放到scripts目录。下载r.js,放到build目录。 http://requirejs.org/。目前,有很多js的minify工具,但是采用这些工具压缩、合并js代码后,html中的js、css引用不容易修改。采用requriejs来管理js代码,会比较容易处理这种情况。
  2. 编写minify.bat,执行js, css代码的压缩
node r.js -o name=main out=../%1/scripts/main.js baseUrl=../scripts
node r.js -o cssIn=../css/main.css out=../%1/css/main.css optimizeCss="standard.keepLines"
     3.  采用ant的exec task,调用minify.bat,执行压缩
<target name="minify" depends="clean">		
		<exec executable="cmd" osfamily="windows" dir="build" failonerror="true">
			<arg value="/c"/>
			<arg value="minify.bat"/>
			<arg value="${target.folder}"/>
			<arg value="-p"/>			
		</exec>
	</target>
 
HTML、JS、CSS代码
index.html(根目录)
<!DOCTYPE html>
<html>
    <head>
        <title>My Sample Project</title>        
        <script data-main="scripts/main" src="scripts/require.js"></script>
    </head>
    <body>
        <h1>My Sample Project</h1>
    </body>
</html>
 JS代码(scripts目录)
main.js
require(["helper/util"], function(util) {
    //This function is called when scripts/helper/util.js is loaded.
    //If util.js calls define(), then this function is not fired until
    //util's dependencies have loaded, and the util argument will hold
    //the module value for "helper/util".
	
	console.log("util js loaded.");
	console.log(util.a + ',' + util.b);
});
 GreatTest.js
GreeterTest = TestCase("GreeterTest");

GreeterTest.prototype.testGreet = function() {
  var greeter = new myapp.Greeter();
  assertEquals("Hello World!", greeter.greet("World"));
  jstestdriver.console.log("JsTestDriver", greeter.greet("World"));
  console.log(greeter.greet("Browser", "World"));
};

GreeterTest.prototype.testGreet3 = function() {
  var greeter = new myapp.Greeter();
  assertEquals("Hello World!", greeter.greet("World3"));
  jstestdriver.console.log("JsTestDriver", greeter.greet("World3"));
  console.log(greeter.greet("Browser", "World3"));
};

GreeterTest2 = TestCase("GreeterTest2");

GreeterTest2.prototype.testGreet2 = function() {
  var greeter = new myapp.Greeter();
  assertEquals("Hello World2!", greeter.greet("World2"));
  jstestdriver.console.log("JsTestDriver", greeter.greet("World2"));
  console.log(greeter.greet("Browser", "World2"));
};
 main.css
@import url("common.css");
body{
	color:red
}
 common.css
body{
	font-size:14px;
}

Ant脚本
<project name="js build" default="install" basedir=".">	
	<property name="target.folder" value="target" />
	<property name="stat.result.folder" value="stat-result" />	
	<property name="tomcat.webapp" value="D:\apache-tomcat-6.0.32\webapps"></property>
	
	<taskdef name="jslint"
           classname="com.googlecode.jslint4java.ant.JSLintTask"
           classpath="./build/jslint4java-2.0.2.jar" />
	
	<target name="jslint" depends="clean">
		<mkdir dir="${stat.result.folder}/jslintOutput"></mkdir>
		<jslint failureProperty="false" haltOnFailure="false">
			<formatter type="checkstyle" destfile="${stat.result.folder}/jslintOutput/jslintresult.xml"/>
			<fileset dir="scripts">
				<include name="**/*.js"/>
				<exclude name="require.js"/>
			</fileset>
		</jslint>
	</target>		
	
	<target name="jsut" depends="clean">
		<mkdir dir="${stat.result.folder}/jsUTOutput"></mkdir>
		
		<java jar="build/JsTestDriver-1.3.4.b.jar" fork="true" failonerror="true">
			<arg value="--port"/>
			<arg value="9876"/>
			<arg value="--config"/>
			<arg value="build/jsTestDriver.conf"/>			
			<arg value="--browser"/>
			<arg value="C:\Users\juns6831.CHN\AppData\Local\Google\Chrome\Application\chrome.exe"/>
			<arg value="--tests"/>
			<arg value="all"/>
			<arg value="--testOutput"/>
			<arg value="${stat.result.folder}/jsUTOutput"/>			
		</java>
	</target>
	
	<target name="minify" depends="clean">		
		<exec executable="cmd" osfamily="windows" dir="build" failonerror="true">
			<arg value="/c"/>
			<arg value="minify.bat"/>
			<arg value="${target.folder}"/>
			<arg value="-p"/>			
		</exec>
	</target>
	
	<target name="build" depends="jslint,jsut,minify">
		<copy todir="${target.folder}">
			<fileset dir="${basedir}">
				<include name="*.html"></include>				
			</fileset>			
		</copy>
		<copy file="scripts/require.js" todir="${target.folder}/scripts"></copy>
	</target>
	
	<target name="install" depends="build">
		<mkdir dir="${tomcat.webapp}/jsci"></mkdir>
		<copy todir="${tomcat.webapp}/jsci">
			<fileset dir="${target.folder}"></fileset>
		</copy>
	</target>		
	
	<target name="clean">
		<delete dir="${target.folder}"></delete>	
		<delete dir="${tomcat.webapp}/jsci"></delete>
		<delete dir="${stat.result.folder}"></delete>
	</target>

</project>
 
安装Jenkins插件
  1. Git plugin
  2. checkstyle plugin
  3. ant, junit plugin在安装jenkins是已经自动安装
创建Jenkins项目
  1. 配置SCM。Git的仓库地址,分支名称(master)
  2. 配置调用ant
  3. 选中“ Publish Checkstyle analysis results ”,文件地址输入"stat-result/jslintOutput/*.xml"
  4. 选中“ Publish JUnit test result report ”,文件地址输入“stat-result/jsUTOutput/*.xml”
  5. 保存。
  6. 运行Jenkins构建,可以在项目的主页上看到UT, jslint的运行结果,可以在target目录下面看到完整的压缩、合并后的js、css代码,和HTML代码。
根据配置,自动构建开发、测试、发布等版本,下一个博客再写。

 

  • 大小: 13.5 KB
分享到:
评论

相关推荐

    用Vue-cli快速构建web前端项目

    用Vue-cli快速构建web前端项目 Vue-cli 是Vue.js的脚手架,用于自动生成Vue.js模板工程的。Vue-cli 提供一个官方命令行工具,可用于快速搭建大型单页应用。该工具提供开箱即用的构建工具配置,带来现代化的前端开发...

    nodejs前端自动化构建环境的搭建

    为了UED前端团队更好的协作开发同时提高项目编码质量,我们需要将Web前端使用工程化方式构建; 目前需要一些简单的功能:  1. 版本控制  2. 检查JS  3. 图片合并  4. 压缩CSS  5. 压缩JS  6. 编译SASS 这些...

    Web前端开发第一季:HTML

    本系列课程是专门为零基础学习Web前端开发的朋友准备的,老师将多年的教学经验与案例相结合,深入浅出,循序渐进,让大家轻松的进入Web开发行业。 本系列课程主要讲述Web开发的前端技术:html、css、JavaScript,...

    轻量级Web应用开发

    介绍了环境配置与工具准备、Web应用服务器、数据库访问层、客户端框架、CSS框架、客户端测试框架、现代的前端开发方式、编写更容易维护的JavaScript代码、本地构建、持续集成、单元测试与集成测试、环境搭建的自动化...

    WijmoJS 前端开发工具包 2018V1历史版本的下载包

    WijmoJS 凭借先进的触控设计、全面的框架支持、顶级的控件性能、零依赖的产品特性和易用、轻松的操作体验,全面满足前端开发所需,已成为构建企业 Web 应用程序最高效的纯前端开发工具包。 与此同时,WijmoJS 的...

    基于gulp的前端自动化开发环境.zip

    同时,也需要借助一些工具,如代码编辑工具(WebStorm、VS Code)、代码版本控制工具(Git、SVN)、代码包管理工具(npm、Yarn)、前端构建工具(Webpack、Vite)等,来提升开发效率和质量。 总的来说,前端开发是...

    前端开发.zip

    同时,也需要借助一些工具,如代码编辑工具(WebStorm、VS Code)、代码版本控制工具(Git、SVN)、代码包管理工具(npm、Yarn)、前端构建工具(Webpack、Vite)等,来提升开发效率和质量。 总的来说,前端开发是...

    前端开发工程师专用简历模板

    作为前端开发工程师,您的简历应该突出您的技能和经验,以吸引潜在的雇主。下面是一个前端开发工程师专用简历模板描述的示例: 个人简介: 我是一名有着X年前端开发经验的工程师,对于Web开发和用户体验有着深入的...

    前端开发规范文档.zip

    同时,也需要借助一些工具,如代码编辑工具(WebStorm、VS Code)、代码版本控制工具(Git、SVN)、代码包管理工具(npm、Yarn)、前端构建工具(Webpack、Vite)等,来提升开发效率和质量。 总的来说,前端开发是...

    环球易购前端开发规范手册.zip

    同时,也需要借助一些工具,如代码编辑工具(WebStorm、VS Code)、代码版本控制工具(Git、SVN)、代码包管理工具(npm、Yarn)、前端构建工具(Webpack、Vite)等,来提升开发效率和质量。 总的来说,前端开发是...

    一份全面的前端开发规范手册.zip

    同时,也需要借助一些工具,如代码编辑工具(WebStorm、VS Code)、代码版本控制工具(Git、SVN)、代码包管理工具(npm、Yarn)、前端构建工具(Webpack、Vite)等,来提升开发效率和质量。 总的来说,前端开发是...

    前端开发之走进Vue.js PPT.zip

    同时,也需要借助一些工具,如代码编辑工具(WebStorm、VS Code)、代码版本控制工具(Git、SVN)、代码包管理工具(npm、Yarn)、前端构建工具(Webpack、Vite)等,来提升开发效率和质量。 总的来说,前端开发是...

    WijmoJS 前端开发工具包 2018V2历史版本的下载包

    WijmoJS 凭借先进的触控设计、全面的框架支持、顶级的控件性能、零依赖的产品特性和易用、轻松的操作体验,全面满足前端开发所需,已成为构建企业 Web 应用程序最高效的纯前端开发工具包。 与此同时,WijmoJS 的...

    用Go+Vue.js快速搭建一个Web应用(初级demo)

    Vue.js做为目前前端最热门的库之一,为快速构建并开发前端项目多了一种思维模式。本文给大家介绍用Go+Vue.js快速搭建一个Web应用(初级demo)。 环境准备: 1. 安装go语言,配置go开发环境; 2. 安装node.js以及npm...

    珠峰培训2016年大前端开发第二期平时讲义管理.zip

    同时,也需要借助一些工具,如代码编辑工具(WebStorm、VS Code)、代码版本控制工具(Git、SVN)、代码包管理工具(npm、Yarn)、前端构建工具(Webpack、Vite)等,来提升开发效率和质量。 总的来说,前端开发是...

    《循序渐进Vue.js3前端开发实战》实战范例.zip

    同时,也需要借助一些工具,如代码编辑工具(WebStorm、VS Code)、代码版本控制工具(Git、SVN)、代码包管理工具(npm、Yarn)、前端构建工具(Webpack、Vite)等,来提升开发效率和质量。 总的来说,前端开发是...

    前端开发中的一些小技巧以及编写博客时会用到的示例项目.zip

    同时,也需要借助一些工具,如代码编辑工具(WebStorm、VS Code)、代码版本控制工具(Git、SVN)、代码包管理工具(npm、Yarn)、前端构建工具(Webpack、Vite)等,来提升开发效率和质量。 总的来说,前端开发是...

    轻量前端,供开发后台时使用。.zip

    同时,也需要借助一些工具,如代码编辑工具(WebStorm、VS Code)、代码版本控制工具(Git、SVN)、代码包管理工具(npm、Yarn)、前端构建工具(Webpack、Vite)等,来提升开发效率和质量。 总的来说,前端开发是...

    这是一个关于前端socket开发的笔记记录!!!!.zip

    同时,也需要借助一些工具,如代码编辑工具(WebStorm、VS Code)、代码版本控制工具(Git、SVN)、代码包管理工具(npm、Yarn)、前端构建工具(Webpack、Vite)等,来提升开发效率和质量。 总的来说,前端开发是...

    web-apps:ONLYOFFICE Document Server的前端,用于构建程序界面

    该存储库称为web-apps-pro项目信息官方网站: : 代码存储库: : SaaS版本: : 用户反馈和支持如果您对有任何疑问或疑问,请访问我们的官方论坛以找到您的问题的答案: 或者您可以在上询问和回答ONLYOFFICE开发问题...

Global site tag (gtag.js) - Google Analytics