本文的目標是在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腳本進行簽名、打包、發佈。
轉播到騰訊微博