当前位置: 首页 > news >正文

基于 GitLab CI + Inno Setup 实现 Windows 程序自动化打包发布方案

在 Windows 桌面应用开发中,实现自动化构建与打包发布是一项非常实用的工程实践。本文以我在开发PackTes项目时的为例,介绍如何通过 GitLab CI 配合 Inno Setup、批处理脚本、Qt 构建工具,实现版本化打包并发布到共享目录的完整流程。
项目地址

1.整体目标

  • 触发方式:仅在打tag时触发构建与打包
  • 构建工具链:VS2015 + Qt 5.9.4 + jom
  • 打包工具:Inno Setup 5.6.1
  • 构建产物命名规范:PackTest_版本号_日期_setup.exe
  • 发布位置:自动移动到内网共享文件夹 E:\share\releaseSoft\PackTest

2.文件说明

在这里插入图片描述

2.1 .gitlab.ci.yml

配置gitlab打包流程的核心配置
主要分为打包前准备、从git中读取tag,设置APP_VERSION环境变量(为了方便版本号传递,有其它更好的办法也行)、执行打包脚本、复制文件到目标文件夹

variables:RELEASE_DIR: 'E:\share\releaseSoft\PackTest'stages:- buildbefore_script:- call "C:\Program Files\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x86- set PATH=G:\Qt\Qt5.9.4\5.9.4\msvc2015\bin;%PATH%- chcp 65001- echo "准备中..."- git submodule sync --recursive- git submodule update --init --recursivebuild_job_LIBS_Server:stage: buildonly:- tags     # 🚩 仅在 tag 推送时触发script:- set APP_VERSION=%CI_COMMIT_TAG%  - if exist build (echo "build exist") else (md build)- cd build- qmake.exe ..\src\PackTest.pro -spec win32-msvc "CONFIG+=release"- jom.exe qmake_all- jom.exe- jom.exe install- cd ..\- call deploy_LIBS_Server.bat release- if exist %RELEASE_DIR% (echo "%RELEASE_DIR% exist") else (md %RELEASE_DIR%)- move Output\PackTest*.exe %RELEASE_DIR%

2.2.Deploy_LIBS_Server.bat

ci中调用该脚本完成打包操作
设置环境变量、将编译好的exe移动到临时文件夹、使用windeployqt补全qt依赖,拷贝额外的dll或者其它资源、调用打包脚本进行程序打包

@echo off
setlocal enabledelayedexpansion:: 设置路径
set SRC_DIR=src
set BIN_DIR=%SRC_DIR%\bin_vs
set DLL_DIR=%SRC_DIR%\dll_lib
set DEPLOY_DIR=tmp_deploy:: 清理旧的打包目录
if exist %DEPLOY_DIR% rd /s /q %DEPLOY_DIR%
mkdir %DEPLOY_DIR%echo === 1. 拷贝主程序到部署目录 ===
xcopy /s /e /y /q %BIN_DIR%\PackTest.exe %DEPLOY_DIR%\echo === 2. 执行 windeployqt 自动补全 Qt 依赖 ===
for %%f in (%DEPLOY_DIR%\*.exe) do (echo ---- 处理 Qt 依赖: %%~nxfwindeployqt.exe --no-angle --no-system-d3d-compiler --no-quick-import %DEPLOY_DIR%\%%~nxf
)echo === 3. 拷贝额外 资源 ===
xcopy /y /q %DLL_DIR%\*.* %DEPLOY_DIR%\echo === 4. 拷贝 Qt 配置(如有) ===
if exist qt.conf (copy /y qt.conf %DEPLOY_DIR%\ >nul
)echo === 5. 打包 Inno Setup 安装包 ===
set InnoScript=LIBS_Server_setup.issif exist "%InnoScript%" (echo ---- 使用 Inno Setup 打包...iscc "%InnoScript%"
) else (echo !! Inno Setup 脚本文件未找到: %InnoScript%
)echo === 6. 完成 ===
endlocal
pause

2.3 LIBS_Server_setup.iss

Inno Setup打包脚本

2.4.Runner选择

在这里插入图片描述

3.打包流程

在这里插入图片描述

4.总结

通过 GitLab CI + Qt + Inno Setup + 批处理的组合,我们实现了以下效果:

  • 在打 tag 后自动触发构建;
  • 将软件依赖放入到./src/dll_lib/,降低程序依赖风险
  • 按PackTest_版本号_时间.exe生成安装包;
  • 自动命名并发布到共享目录;
  • 整体流程可靠、可扩展、无需人工介入。

这套方案非常适用于 Windows 桌面程序的版本管理与持续集成。

相关文章:

  • 【unity游戏开发——编辑器扩展】EditorApplication公共类处理编辑器生命周期事件、播放模式控制以及各种编辑器状态查询
  • 【Linux网络编程】传输层协议TCP,UDP
  • 记录一个难崩的bug
  • 从零开始的云计算生活——第十四天,困难重重,安全管理。
  • 社群分享:义乌|杭州电商|店群卖家,私域鱼塘运营的排单系统开源|私域鱼塘运营|返款软件开源
  • Azure Devops pipeline 技巧和最佳实践
  • 新版LangChain向量数据库VectorStore设计详解
  • 关于智能体接入后端,在Apifox能够传参数给智能体的测试
  • 云原生与DevOps融合实践:加速企业数字化转型的加速器
  • 群辉(synology)NAS老机器连接出现网页端可以进入,但是本地访问输入一样的账号密码是出现错误时解决方案
  • VSCode的下载与安装(2025亲测有效)
  • 生益的高速PCB板材有哪些
  • 使用 Azure DevOps 管道部署到本地服务器
  • Java设计模式之中介者模式详解
  • 结构性设计模式之Bridge(桥接)
  • Python----目标检测(《用于精确目标检测和语义分割的丰富特征层次结构》和R-CNN)
  • 实验设计与分析(第6版,Montgomery)第5章析因设计引导5.7节思考题5.4 R语言解题
  • 纯数据挖掘也能发Microbiome?
  • 基于大数据的个性化购房推荐系统设计与实现(源码+定制+开发)面向房产电商的智能购房推荐与数据可视化系统 基于Spark与Hive的房源数据挖掘与推荐系统设计
  • MCP入门实战(极简案例)
  • 龙华做网站哪家好/知乎seo排名帝搜软件
  • 电影采集网站怎么做seo/seo学校培训课程
  • 自己怎么做直播网站/百度官方客服
  • 外贸仿牌网站被封的后果/广州seo推广运营专员
  • 长沙网站建设1681989/北京百度seo服务
  • 北京的网站建设公司有哪些/优化关键词排名seo软件