在Jenkins中运行Inno Setup脚本:版本号作为外部变量传入方案咨询
解决Jenkins注入版本号到Inno Setup脚本的可行方案
最优方案:利用Inno Setup预处理器的命令行参数
Inno Setup的预处理器原生支持通过命令行传入定义,完全不需要修改SVN仓库里的原脚本,步骤如下:
- 保留原脚本中的版本号定义(可设为默认值,防止无参数时编译出错):
#define version '1.0.0.0' // 默认占位版本号 - 在Jenkins中添加字符串构建参数(比如命名为
APP_VERSION),让用户输入目标版本号 - 构建时调用
ISCC.exe(Inno Setup编译器),通过/D参数传入版本号:ISCC.exe /Dversion="${APP_VERSION}" YourSetupScript.iss - 脚本中所有
{#version}的引用会自动替换为Jenkins传入的版本号,包括AppVersion={#version}和代码中的ExpandConstant('{#version}')调用
备选方案:生成临时编译脚本(适合特殊场景)
如果因限制无法使用命令行参数,可在Jenkins中通过脚本生成临时修改后的Inno Setup脚本,编译完成后删除临时文件,不会改动SVN原文件:
- 示例PowerShell脚本(替换版本号定义):
# 读取原脚本内容,替换版本号定义 (Get-Content YourSetupScript.iss) -replace '#define version ''[^'']+''', '#define version ''${APP_VERSION}''' | Set-Content Temp_Setup.iss # 编译临时脚本 ISCC.exe Temp_Setup.iss # 清理临时文件 Remove-Item Temp_Setup.iss
不推荐的方案:提交版本号到SVN
你之前考虑的让Jenkins提交版本号到SVN的方法完全没必要,会带来以下问题:
- 产生大量无意义的SVN提交记录,污染版本历史
- 多构建并行时可能出现代码冲突
- 增加Jenkins的配置复杂度(需要处理SVN提交权限和冲突)
内容的提问来源于stack exchange,提问作者pburgr
相关产品推荐
相关产品推荐

