Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學

Windows Server 2008 R2 搭建 Jenkins + MSBuild + NSIS + Ant 自動化建置流水線完整實戰

編輯:Windows 2003 常見問題解答

本文記錄在 Windows Server 2008 R2 上從零構建 Visual Studio 2010 (VC++) 專案的每日建置、簽名、打包、發布全自動流水線。技術棧:Jenkins (CI 引擎) + MSBuild 4.0 (編譯) + NSIS (打包安裝程式) + Ant (流程編排) + SignTool (數位簽章)。

環境準備清單

元件版本/來源關鍵設定
JDK1.6+ (Oracle)設定 JAVA_HOME、%JAVA_HOME%\bin 加入 PATH
.NET Framework3.5 SP1 (啟用角色功能)伺服器管理員 → 功能 → 添加 .NET 3.5.1
NSIS3.x (SourceForge)安裝目錄與 Bin 加入 PATH;Plugins 放入 ProcessWork.dll
Apache Ant1.8+設定 ANT_HOME、%ANT_HOME%\bin 加入 PATH
MSBuild 4.0.NET 4.0 SDK / VS2010 完整安裝建議直接安裝 VS2010 含 SDK,避免手動組裝 MSBuild 複雜相依
Jenkins最新 WARjava -DHUDSON_HOME=D:\jenkins -jar jenkins.war → 安裝為 Windows 服務

Jenkins 關鍵插件與全域工具設定

  • 「管理外掛程式」→ 可用頁籤 → 安裝 MSBuild Plugin(重啟 Jenkins 生效)。
  • 系統設定 → JDK:指向 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/殺毒軟體誤判「未驗證發行者」。

Ant 建置腳本骨架 (build.xml)

<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>

Jenkins Job 設定要點

  1. 原始碼管理:Subversion/Git → 檢出至工作區。
  2. 建置觸發:排程 H 2 * * *(每天凌晨 2 點)或 Poll SCM。
  3. 建置步驟:建置 Visual Studio 專案或方案使用 MSBuild → 指定方案檔、平台、組態;Invoke Ant → 目標 deploy。
  4. 建置後動作:封存成品、郵件通知、刪除舊建置。

防火牆開放 Jenkins 埠 (8080/50000)

WF.msc → 新增輸入規則 → TCP 8080 (Web UI)、TCP 50000 (JNLP Agent) → 限定「專用/網域」設定檔。

完成上述步驟,您將擁有一條「提交代碼 → 自動編譯 → 簽章 → 打包 → 發布」零人工介入的企業級 VC++ 持續交付管線。

Copyright © Windows教程網 All Rights Reserved