基于 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 桌面程序的版本管理與持續集成。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/907953.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/907953.shtml
英文地址,請注明出處:http://en.pswp.cn/news/907953.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

能源領域新興技術論壇:EMQ 實時數據引擎構建工業智能中樞

5 月 26 日,由沙特阿美亞洲公司主辦的能源領域新興技術論壇在上海順利舉行。本次論壇聚焦智能工廠、無人機與機器人、可靠性與完整性、先進材料四大技術賽道,吸引了來自全球的能源企業、技術供應商及行業專家。 作為業內知名的 MQ AI 實時數據與智能產…

【計算機網絡】第2章:應用層—DNS

目錄 一、PPT 二、總結 DNS(域名系統)詳解 (一)DNS核心概念 (二)DNS查詢過程(重點?) (三)DNS資源記錄(RR)類型…

PHP HTTP 完全指南

PHP HTTP 完全指南 引言 PHP 作為一種流行的服務器端腳本語言,廣泛應用于各種Web開發項目中。HTTP(超文本傳輸協議)是互聯網上應用最為廣泛的網絡協議之一,用于在Web服務器和客戶端之間傳輸數據。本文將詳細介紹 PHP 在 HTTP 通信中的應用,幫助開發者更好地理解和利用 P…

C++測開,自動化測試,業務(第一段實習)

目錄 🌼前言 一,實習經歷怎么寫簡歷 🌹業務理解 🎂結構化表達 二,實習 🦂技術和流程卡點 🔑實習收獲 / 代碼風格 三,測試理論,用例設計,工具鏈 &…

NodeJS全棧開發面試題講解——P5前端能力(React/Vue + API調用)

? 5.1 如何使用 React/Vue 發起后端請求?用什么庫? 面試官您好,在實際項目中我們通常使用 axios、fetch 或框架提供的封裝庫發起后端請求。 🔧 常用庫對比: 庫框架適配優點axios通用默認支持攔截器、取消請求、請求體…

【C/C++】cmake實現Release版本禁用調試接口技巧

在 C 中通過 CMake 實現部分接口在 Release 版本不生效,可以通過條件編譯結合 CMake 的構建類型判斷來實現。以下是詳細步驟: 1. 在 CMakeLists.txt 中定義配置相關宏 # 設置構建類型(可選,但推薦顯式設置) if(NOT C…

Spring Boot中的WebSocket技術實現

WebSocket協議基礎 WebSocket作為現代實時通信的核心技術,通過全雙工TCP通道實現了接近實時的數據傳輸能力。該協議主要包含以下核心特性: 協議特點與通信機制 全雙工通信:與HTTP等傳統協議不同,WebSocket允許客戶端和服務端同時發送和接收數據,消除了請求-響應模式的限…

無法發布到PowerBI?試試拆分它

無法發布到PowerBI?試試拆分它 在進行PowerBI發布時,可能會遇到如下兩種無法發布到PowerBI的情況: 第一種,文件太大,無法發布,如圖: 第二種:遠程主機強迫關閉了一個現有的連接&…

光伏功率預測 | LSTM多變量單步光伏功率預測(Matlab完整源碼和數據)

光伏功率預測 | MATLAB實現基于LSTM長短期記憶神經網絡的光伏功率預測 目錄 光伏功率預測 | MATLAB實現基于LSTM長短期記憶神經網絡的光伏功率預測效果一覽基本介紹程序設計參考資料 效果一覽 基本介紹 光伏功率預測 | LSTM多變量單步光伏功率預測(Matlab完整源碼和…

【圖像處理入門】2. Python中OpenCV與Matplotlib的圖像操作指南

一、環境準備 import cv2 import numpy as np import matplotlib.pyplot as plt# 配置中文字體顯示(可選) plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False二、圖像的基本操作 1. 圖像讀取、顯示與保存 使用OpenCV…

數據庫系統概論(十一)SQL 集合查詢 超詳細講解(附帶例題表格對比帶你一步步掌握)

數據庫系統概論(十一)SQL 集合查詢 超詳細講解(附帶例題表格對比帶你一步步掌握) 前言一、什么是集合查詢?二、集合操作的三種類型1. 并操作2. 交操作3. 差操作 三、使用集合查詢的前提條件四、常見問題與注意事項五、…

如何設計一個支持線上線下的通用訂單模塊 —— 面向本地生活服務行業的架構思路

一、背景與目標 在本地生活服務行業中,訂單模塊作為連接用戶、商戶、商品、支付、履約的核心組件,支撐著平臺內多樣化的業務形態,例如外賣配送、到店服務、團購核銷、即時零售、預約預訂、線下消費等。 設計一個可支持線上線下融合的通用訂…

Django數據庫連接報錯 django.db.utils.NotSupportedError: MySQL 8 or later is required

可嘗試換django版本 pip install django3.2.13 另外mysql下載地址 https://dev.mysql.com/downloads/installer/ 安裝可以參考: https://blog.csdn.net/HHHQHHHQ/article/details/148125549 重點:用戶變量添加 C:\Program Files\MySQL\MySQL Server …

github 提交失敗,連接不上

1. 第一種情況,開了加速器,導致代理錯誤 刪除hosts文件里相關的github代理地址 2. 有些ip不支持22端口連接,改為443連接 ssh -vT gitgithub.com // 命令執行結果 OpenSSH_for_Windows_9.5p1, LibreSSL 3.8.2 debug1: C…

24位高精度數據采集卡NET8860音頻振動信號采集監測滿足自動化測試應用現場的多樣化需求

NET8860 高分辨率數據采集卡技術解析 阿爾泰科技的NET8860是一款高性能數據采集卡,具備8路同步模擬輸入通道和24bit分辨率,適用于高精度信號采集場景。其輸入量程覆蓋10V、5V、2V、1V,采樣速率高達256KS/s,能夠滿足多種工業與科研…

JavaScript 模塊系統:CJS/AMD/UMD/ESM

文章目錄 前言一、CommonJS (CJS) - Node.js 的同步模塊系統1.1 設計背景1.2 瀏覽器兼容性問題1.3 Webpack 如何轉換 CJS1.4 適用場景 二、AMD (Asynchronous Module Definition) - 瀏覽器異步加載方案2.1 設計背景2.2 為什么現代瀏覽器不原生支持 AMD2.3 Webpack/Rollup 如何處…

使用NMEA Tools生成GPS軌跡圖

前言 在現代科技快速發展的時代,GPS定位技術已經廣泛應用于各種領域,如導航、物流、運動追蹤等。為了獲取和分析GPS數據,我們常常需要使用一些專業的工具。本文將詳細介紹如何使用一款名為“NMEA Tools”的APK應用,結合GPSVisual…

Word雙欄英文論文排版攻略

word寫雙欄英文論文的注意事項 排版首先改字體添加連字符還沒完呢有時候設置了兩端對齊會出現這樣的情況: 公式文獻 等我下學期有時間了,一定要學習Latex啊,word寫英文論文,不論是排版還是公式都很麻煩的,而Latex一鍵就…

FactoryBean 接口

Spring 框架中 FactoryBean 接口的特性,這是 Spring 提供的一種特殊機制,用于創建和管理復雜 Bean。讓我通過示例和解釋幫您理解這個概念。 一、FactoryBean 是什么? FactoryBean 是 Spring 框架提供的一個工廠接口,用于創建復雜…

MySQL + CloudCanal + Iceberg + StarRocks 構建全棧數據服務

簡述 在業務數據快速膨脹的今天,企業對 低成本存儲 與 實時查詢分析能力 的需求愈發迫切。 本文將帶你實戰構建一條 MySQL 到 Iceberg 的數據鏈路,借助 CloudCanal 快速完成數據遷移與同步,并使用 StarRocks 完成數據查詢等操作&#xff0c…