本文記錄在 Windows Server 2008 R2 上從零構建 Visual Studio 2010 (VC++) 專案的每日建置、簽名、打包、發布全自動流水線。技術棧:Jenkins (CI 引擎) + MSBuild 4.0 (編譯) + NSIS (打包安裝程式) + Ant (流程編排) + SignTool (數位簽章)。
| 元件 | 版本/來源 | 關鍵設定 |
|---|---|---|
| JDK | 1.6+ (Oracle) | 設定 JAVA_HOME、%JAVA_HOME%\bin 加入 PATH |
| .NET Framework | 3.5 SP1 (啟用角色功能) | 伺服器管理員 → 功能 → 添加 .NET 3.5.1 |
| NSIS | 3.x (SourceForge) | 安裝目錄與 Bin 加入 PATH;Plugins 放入 ProcessWork.dll |
| Apache Ant | 1.8+ | 設定 ANT_HOME、%ANT_HOME%\bin 加入 PATH |
| MSBuild 4.0 | .NET 4.0 SDK / VS2010 完整安裝 | 建議直接安裝 VS2010 含 SDK,避免手動組裝 MSBuild 複雜相依 |
| Jenkins | 最新 WAR | java -DHUDSON_HOME=D:\jenkins -jar jenkins.war → 安裝為 Windows 服務 |
JAVA_HOME;MSBuild:填寫 MSBuild.exe 完整路徑並加入系統 PATH;Ant:指向 ant.bat。SignCode.exe 需互動輸入密碼,無法在 Ant 呼叫。解法:使用 signcode-pwd.exe 將密碼加密存檔,再由批次檔 sign-with-pwd.bat 無人值守簽章。
@echo off
set strFile=%1
set strSignCode=D:\signtool\signcode.exe
set strSignCodePwd=D:\signtool\signcode-pwd.exe
set strSpc=D:\signtool\mycert.spc
set strPvk=D:\signtool\mykey.pvk
set strPwd=D:\signtool\myPassword.pwd
set strTimeStampUrl=https://timestamp.wosign.com/timestamp
%strSignCodePwd% -f %strPwd%
%strSignCode% %strFile% -spc %strSpc% -v %strPvk% -a sha1 -t %strTimeStampUrl%
最佳實踐:先簽署所有 DLL/EXE,再打包 NSIS,最後再簽署安裝包,避免 IE/殺毒軟體誤判「未驗證發行者」。
<project name="VCProject" default="deploy" basedir=".">
<target name="clean"><delete dir="${out.dir}"/></target>
<target name="compile" depends="clean">
<exec executable="msbuild.exe" failonerror="true">
<arg line="${sln.file} /p:Configuration=Release /t:Build"/>
</exec>
</target>
<target name="sign-binaries" depends="compile">
<apply executable="sign-with-pwd.bat" parallel="false">
<fileset dir="${bin.dir}" includes="*.dll,*.exe"/>
</apply>
</target>
<target name="package" depends="sign-binaries">
<exec executable="makensis.exe"><arg value="${nsi.script}"/></exec>
</target>
<target name="sign-installer" depends="package">
<exec executable="sign-with-pwd.bat"><arg value="${installer.path}"/></exec>
</target>
<target name="deploy" depends="sign-installer">
<copy file="${installer.path}" todir="${deploy.share}"/>
</target>
</project>
H 2 * * *(每天凌晨 2 點)或 Poll SCM。deploy。WF.msc → 新增輸入規則 → TCP 8080 (Web UI)、TCP 50000 (JNLP Agent) → 限定「專用/網域」設定檔。
完成上述步驟,您將擁有一條「提交代碼 → 自動編譯 → 簽章 → 打包 → 發布」零人工介入的企業級 VC++ 持續交付管線。
Windows Server 2003 實用效能優化與管理技巧七則
Windows 2000/2003 復原主控台網絡管理實戰命令大全
善用 Windows Server 2008 內建「可靠度監視器」:量化系統穩定、主動預防故障
Windows Server 2003 快速關機三大技巧:從群組原則到 ACPI 電源鍵
Windows 2000 安裝程式失敗、Word 公式編輯器報錯,真兇竟是「文鼎字庫」
Windows Server 2008 故障移轉叢集新功能與架構改進深度解析
遠端修改 Windows Server 2003 電腦名稱:Web 管理介面一鍵完成
Windows Server 2003 常見桌面故障速查手冊:影片粗糙、音訊異常、IE 安全彈窗、大型軟體卡頓四大場景解決方案