技术开发 频道

Win2008 R2下使用jenkins搭建vc构建

  【IT168技术】本文的目标是在windows Server 2008 R2中,搭建一个Visual Studio 2010项目的每日构建、发布环境,实现代码的自动编译、打包、数字签名、发布,其中使用jenkins作为每日构建工具,通过MSBuild对VC工程进行编译,使用nsis(Nullsoft Scriptable Install System)对生成的程序进行打包,而签名、打包、发布等整个过程通过ant脚本调度。

  Jenkins是一款Java平台的开源持续集成(Continuous Integration,CI)软件。它易于安装,配置简单,具有丰富的插件支持和高度的可扩展性,可用于监控重复作业运行情况,如持续集成、每日构建等。Windows下的jenkins需要安装jdk、.net framework环境。

  1、安装jdk 1.5以上版本

  可以在这里下载,安装

  在环境变量中设置JAVA_HOME,值为jdk安装目录

  把%JAVA_HOME%/bin加到系统的path路径中

  新打开一个命令行窗口,输入:

  java

  回车,有帮助信息则说明JDK配置成功。

  2、安装.net framework 3.5 sp1

  配置jenkins作为windows服务运行时,需要.net framework 2.0及以上版本(4.0以上版本不行),否则会提示如下错误:

Win2008 R2下使用jenkins搭建vc构建

  Windows Server 2008 R2 SP1中不允许直接安装下载的.net framework 3.5文件,运行时会报错“必须用‘角色管理工具’安装或配置Microsoft .NET Framework 3.5”。其实在Windows Server 2008 R2 SP1下已经集成了.NET Framework 3.5.1,只需要在管理界面打开就行了,步骤如下:

  服务器管理器=>功能>添加功能

Win2008 R2下使用jenkins搭建vc构建

  选择.NET Framework 3.5.1 功能,在添加功能向导中,点击添加所需的角色服务,然后一直下一步进行安装即可

Win2008 R2下使用jenkins搭建vc构建

  3、安装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命令,验证是否正确配置了环境变量

  4、安装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说明配置成功。

  5、安装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。

  6、安装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参数指定了路径,在这里选择默认路径即可,安装完成后会提示重新启动。

Win2008 R2下使用jenkins搭建vc构建

  这样jenkins就可以作为一个服务随Windows启动了,也可以通过命令行启动和停止,如:net start jenkins,net stop jenkins

  7、安装插件

  jenkins具有丰富的插件,扩展jenkins的功能,对于刚安装的jenkins,需要先获取插件资料,才可以在线安装、更新插件。在系统管理=>管理插件中,点击高级选项卡,点击立即获取,检查更新信息。检查完成后,就可以看到最新的插件信息。已安装选项卡中列出jenkins中已经安装的插件,而更新选项卡中,则列出可以更新的插件,在这里选择安装MSBuild插件,以便hudson可以调用msbuild。

  选中当安装成功并且没有运行中的任务时重启jenkins,点击签名的绿色箭头,则安装完成后,如果没有运行的任务,则会重新启动jenkins,使插件生效

Win2008 R2下使用jenkins搭建vc构建

  也可以自己下载插件,在高级选项卡中选择上传插件进行安装。

${PageNumber}

  8、设置

  系统管理=>系统设置中设置jdk

Win2008 R2下使用jenkins搭建vc构建

  设置MSBuild

  在系统设置里,设置MSBuild,如下图,path to MSBuild中,设置完整的msbuild路径;同时注意把MSBuild目录,添加到系统的path路径里面

Win2008 R2下使用jenkins搭建vc构建

  设置Ant

Win2008 R2下使用jenkins搭建vc构建

  9、配置windows 2008防火墙

Win2008 R2下使用jenkins搭建vc构建

Win2008 R2下使用jenkins搭建vc构建

Win2008 R2下使用jenkins搭建vc构建

 

  10、配置数字签名环境

  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不再提供免费的时间戳服务,上面的脚本已经把使用时间戳的命令注释掉

  11、简单的ant脚本

  Clean all output directories

  签名可执行程序\dll

  打包可执行程序

  签名安装包

  发布

  12、Job配置

  下面就可以进行配置job了,在svn中下载代码,然后用msbuild编译程序,再用ant脚本进行签名、打包、发布。

Win2008 R2下使用jenkins搭建vc构建

0
相关文章