本文的目标是在windows Server 2008 R2中,搭建一个Visual Studio 2010项目的每日构建、发布环境,实现代码的自动编译、打包、数字签名、发布,其中使用jenkins做为每日构建工具,经过MSBuild对VC工程进行编译,使用nsis(Nullsoft Scriptable Install System)对生成的程序进行打包,而签名、打包、发布等整个过程经过ant脚本调度。java
Jenkins是一款Java平台的开源持续集成(Continuous Integration,CI)软件。它易于安装,配置简单,具备丰富的插件支持和高度的可扩展性,可用于监控重复做业运行状况,如持续集成、每日构建等。Windows下的jenkins须要安装jdk、.net framework环境。c++
一、安装jdk 1.5以上版本apache
能够在这里下载,安装编程
在环境变量中设置JAVA_HOME,值为jdk安装目录windows
把%JAVA_HOME%/bin加到系统的path路径中浏览器
新打开一个命令行窗口,输入:服务器
java编程语言
回车,有帮助信息则说明JDK配置成功。svn
二、安装.net framework 3.5 sp1工具
配置jenkins做为windows服务运行时,须要.net framework 2.0及以上版本(4.0以上版本不行),不然会提示以下错误:
Windows Server 2008 R2 SP1中不容许直接安装下载的.net framework 3.5文件,运行时会报错“必须用‘角色管理工具’安装或配置Microsoft .NET Framework 3.5”。其实在Windows Server 2008 R2 SP1下已经集成了.NET Framework 3.5.1,只须要在管理界面打开就好了,步骤以下:
服务器管理器=>功能>添加功能
转播到腾讯微博
选择.NET Framework 3.5.1 功能,在添加功能向导中,点击添加所需的角色服务,而后一直下一步进行安装便可
转播到腾讯微博
三、安装nsis(Nullsoft Scriptable Install System)
NSIS(Nullsoft Scriptable Install System)是一个开源的 Windows 下安装程序制做工具,它提供了安装、卸载、系统设置、文件解压缩等功能。就像它名字里所说的那样,NSIS 是经过它的脚本语言来描述安装程序的行为和逻辑,NSIS 的脚本语言和一般的编程语言有相似的结构和语法。 咱们将在ant脚本中,调用NSIS的makensis.exe执行咱们编写的nsi脚本,对程序进行打包。
到http://nsis.sourceforge.net/Download 下载最新版本的NSIS,并进行安装;项目中使用到了processwork.dll插件,注意要放到对应的plugins目录下
注意须要在系统的环境变量PATH中,增长NSIS的安装目录以及下面的bin目录
能够在命令行中运行makensis命令,验证是否正确配置了环境变量
四、安装ant
Apache Ant是一个将软件编译、测试、部署等步骤联系在一块儿加以自动化的一个工具,咱们在这里使用ant脚本统一调度其余软件,进行数字签名、打包、发布等。
a.下载
在http://ant.apache.org/bindownload.cgi 下载最新压缩包,如apache-ant-1.8.3-bin.zip ,解压到d:\ant便可。
b.ant的配置
1) 在环境变量中设置ANT_HOME,值为ANT安装目录d:\ant
2) 把%ANT_HOME%/bin,%JAVA_HOME%/bin加到你系统的path目录中去。
c.测试是否成功
新打开一个命令行窗口,输入:
ant -version
回车,看到输出ant说明配置成功。
五、安装MSBuild 4.0
Microsoft Build Engine (MSBuild) 是 Microsoft 和 Visual Studio 的新的生成平台。MSBuild 在如何处理和生成软件方面是彻底透明的,使开发人员可以在未安装 Visual Studio 的生成实验室环境中组织和生成产品。
能够经过安装对应版本的.net framework来安装MSBuild,须要安装的是.net framework 4.0。
由于编译的是vc++的程序,依赖于C运行时库,因此还须要安装sdk,在这里下载Windows SDK for windows 7 and .Net Framework 4
安装整个MSBuild 4.0比较复杂,简单起见,能够安装vs2010整个开发开发环境,这里就是安装了整个vs2010。
六、安装jenkins
下载最新版本的jenkins,存放到待安装目录,如d:\jenkins
在命令行中运行以下命令,指定 -D参数,这样就能够把jenkins的home目录指定到d:\jenkins(注意在windows Server 2008 中,须要以管理员身份运行)
java -DHUDSON_HOME=D:\jenkins -jar jenkins.war
启动后,在浏览器中就能够经过http://localhost:8080来访问了,而后能够配置jenkins做为windows服务运行
在系统管理中,选择“Install as Windows Service”,并指定路径,由于刚才已经使用-D参数指定了路径,在这里选择默认路径便可,安装完成后会提示从新启动。
这样jenkins就能够做为一个服务随Windows启动了,也能够经过命令行启动和中止,如:net start jenkins,net stop jenkins
七、安装插件
jenkins具备丰富的插件,扩展jenkins的功能,对于刚安装的jenkins,须要先获取插件资料,才能够在线安装、更新插件。在系统管理=>管理插件中,点击高级选项卡,点击当即获取,检查更新信息。检查完成后,就能够看到最新的插件信息。已安装选项卡中列出jenkins中已经安装的插件,而更新选项卡中,则列出能够更新的插件,在这里选择安装MSBuild插件,以便hudson能够调用msbuild。
选中当安装成功而且没有运行中的任务时重启jenkins,点击签名的绿色箭头,则安装完成后,若是没有运行的任务,则会从新启动jenkins,使插件生效
转播到腾讯微博
也能够本身下载插件,在高级选项卡中选择上传插件进行安装。
八、设置
系统管理=>系统设置中设置jdk
设置MSBuild
在系统设置里,设置MSBuild,以下图,path to MSBuild中,设置完整的msbuild路径;同时注意把MSBuild目录,添加到系统的path路径里面
设置Ant
九、配置windows 2008防火墙
转播到腾讯微博
转播到腾讯微博
转播到腾讯微博
十、配置数字签名环境
SignCode是微软在.NET Framework SDK 1.0 和 1.1 版中提供的一个数字签名工具,使用 Authenticode 数字签名对可移植可执行 (PE) 文件(.dll 或 .exe 文件)进行签名。可是使用SignCode进行签名时,须要人工参与进来,手工输入key\密码等信息,不能在ant脚本里面调用。有人写了个程序signcode-pwd,容许在命令行中调用SingCode,能够在http://www.stephan-brenner.com/?page_id=9下载signcode-pwd.zip文件。
压缩包中包括三个文件:signcode-pwd.exe、sign-with-pwd.bat、版本说明。Signcode-pwd.exe能够将SignCode.exe用到的密码存为一个密码文件,sign-with-pwd.bat调用SignCode.exe、sighcode-pwd.exe,自动在进行签名时为SignCode.exe填写密码,从而实现不须要人工参与的进行数字签名。
Signcode-pwd中须要使用包含软件发布证书的 SPC 文件和包含私钥的私钥的.pvk文件,能够在这里找到如何在不一样格式的证书之间转换的方法。
注意:须要使用时间戳服务器进行签名时,必定要保证能连上互联网,不然因为没法访问时间戳服务器而失败。
注意:不能仅签名NSIS打包后的文件,应该对包含的全部DLL文件都要先签名后再打包,再签名打包的文件,不然IE浏览器会显示为“未验证的发行者”而影响正常使用,甚至杀毒软件会认为是病毒而被删除!
首先用sign-code-pwd.exe生成密码文件myPassword.pwd
sign-code-pwd.exe -e myPassword.pwd testpassword
sign-with-pwd.bat是一个批处理文件,须要修改文件,指定SignCode.exe、Signcoe-pwd.exe的路径,指定spc、pvk证书文件、密码文件、时间戳服务器等信息,以下:
@echo off
rem
rem TODO: Modify this constants before using
rem
set strFile=%1
set strSignCode=D:\signtool\signcode.exe
set strSignCodePwd=D:\signtool\signcode-pwd.exe
rem spc、pvk证书文件
set strSpc=D:\signtool\mycert.spc
set strPvk=D:\signtool\mykey.pvk
rem 刚刚生成的密码文件
set strPwd=D:\signtool\myPassword.pwd
rem wosign的时间戳
set strTimeStampUrl=http://timestamp.wosign.com/timestamp
echo Start signcode-pwd.exe
%strSignCodePwd% -f %strPwd%
echo Execute signcode.exe
rem echo %strSignCode% %strFile% -spc %strSpc% -v %strPvk% -a sha1 -t %strTimeStampUrl%
rem %strSignCode% %strFile% -spc %strSpc% -v %strPvk% -a sha1 -t %strTimeStampUrl%
%strSignCode% %strFile% -spc %strSpc% -v %strPvk% -a sha1
if errorlevel 0 goto end_success
end_error
echo Error occured while signing
%strSignCodePwd% -t
rem exit 1
end_success
echo Singing was successfully
%strSignCodePwd% -t
这样,咱们就可使用sign-with-pwd.bat对文件进行签名了,例如
sign-with-pwd.bat D:\test\Release\test.dll
另外,也直接可使用signtool.exe进行数字签名,脚本以下:
@echo off
rem
rem TODO: Modify this constants before using
rem
set strFile=%1
set strSignCode=D:\signtool\signtool.exe
set strPfx=D:\signtool\mysign.pfx
set strPwd=helloworldx
set strTimeStampUrl=http://timestamp.wosign.com/timestamp
echo Execute signtool.exe
rem %strSignCode% sign /f %strPfx% /p %strPwd% /t %strTimeStampUrl% %strFile%
%strSignCode% sign /f %strPfx% /p %strPwd% %strFile%
if errorlevel 1 goto :end_error
if errorlevel 0 goto :end_success
end_error
echo Error occured while signing
Goto :eof
end_success
echo Singing was successfully
注意:如今wosign再也不提供免费的时间戳服务,上面的脚本已经把使用时间戳的命令注释掉
十一、简单的ant脚本
Clean all output directories
签名可执行程序\dll
打包可执行程序
签名安装包
发布
十二、Job配置
下面就能够进行配置job了,在svn中下载代码,而后用msbuild编译程序,再用ant脚本进行签名、打包、发布。
转播到腾讯微博