当前位置:网站首页>[源码分享] CI/CD 编译打包发布Qt桌面程序
[源码分享] CI/CD 编译打包发布Qt桌面程序
2022-08-06 15:06:00 【Jeady5】
前言
本文主要分享一个源码, 不做解释。
由于qt项目打包复杂,每次都要重新编译,然后拷贝文件到打包目录,修改目标信息等等一系列操作,于是cicd映入眼帘。
cicd的功能很强大,今日源码使用的是自动打包发布的功能。
源码使用的yaml语法, 实现了当把git标签推送到git仓库,就自动启动流水线执行编译打包发布等系列流程。
git-runner使用的是windows上的powershell。
一、 知识点
研究一段时间后,有机会再进行知识点及注意事项的补充。
二、源码
此源码仅供参考
stages:
- build
- pack
- upload
- release
workflow:
rules:
# - if: $CI_COMMIT_TITLE
- if: $CI_COMMIT_TAG
variables:
# CI_COMMIT_TAG: "v.2.2.2"
RELEASE_NAME: "MyApp-$CI_COMMIT_TAG"
PACKAGE_REGISTRY_URL: "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic"
before_script:
- echo $CI_COMMIT_TAG, $CI_COMMIT_MESSAGE, $CI_COMMIT_TITLE, $CI_PIPELINE_ID
- echo "${
RELEASE_NAME}.exe", $RELEASE_VERSION, $RELEASE_NOTE
build-qt:
stage: build
# tags:
# - jTag
cache:
key: $CI_PIPELINE_ID
paths:
- build/
script:
- echo $CI_COMMIT_TAG
- Invoke-BatchFile "$Env:VCPATH\vcvarsall.bat" x64
- cl
- pwd
- switch -wildcard($CI_COMMIT_TAG){
"*V1*" {
qmake -after "DEFINES *= USE_V1_ENGINE" "DEFINES -= USE_V2_ENGINE" }
"*V2*" {
qmake -after "DEFINES -= USE_V1_ENGINE" "DEFINES *= USE_V2_ENGINE" }
}
# - jom clean
- jom qmake_all
- jom release
pack-env-job:
stage: pack
# tags:
# - jTag
needs:
- job: build-qt
cache:
key: $CI_PIPELINE_ID
paths:
- build/
- pack/
script:
- echo "get var ", $CI_COMMIT_TAG
- echo "prepare packDir, pack job id $CI_JOB_ID"
- if(Test-Path pack){
echo "pack dir is already exists";
cd pack;
git pull;
} else {
git clone http://git.xxx/jeady/nsis.git -b win pack --depth 1;
mkdir -f pack\MyApp\bin;
mkdir -f pack\MyApp\imports\JQML;
}
- cp build\x64\release\bin\MyApp.exe pack\MyApp\bin\ # 拷贝主程序
- cp build\x64\release\imports\JQML\JQML.dll pack\MyApp\imports\JQML\ # 拷贝 自定义qml库
- cp UpdateLog.txt pack\MyApp\next\ # 拷贝更新日志文件
- cd pack\
- windeployqt --qmldir $env:QTDIR\qml MyApp\bin\MyApp.exe
- echo "The exe info:", $CI_COMMIT_TAG, $CI_COMMIT_TITLE
- $config_file = Get-Content config.nsh
- echo $config_file
- $config_file = $config_file -Replace "PRODUCT_VERSION.*", "PRODUCT_VERSION `"$CI_COMMIT_TAG`""
- $config_file = $config_file -Replace "UPDATE_LOG.*", "UPDATE_LOG `"$CI_COMMIT_TITLE`""
- $config_file > config.nsh
- echo "After merge config file", $config_file
pack-job:
stage: pack
# tags:
# - jTag
needs:
- job: pack-env-job
cache:
key: $CI_PIPELINE_ID
paths:
- pack/
script:
- cd pack
- makensis autoPack.nsi
- mv -Force MyApp*.exe "${
RELEASE_NAME}.exe"
upload:
stage: upload
# tags:
# - jTag
needs:
- job: pack-job
cache:
key: $CI_PIPELINE_ID
paths:
- pack/
script:
- cd pack
- pwd
- echo "Upload file $RELEASE_NAME.exe", "$PACKAGE_REGISTRY_URL/$RELEASE_NAME/$CI_COMMIT_TAG/$RELEASE_NAME.exe"
- Invoke-RestMethod -Headers @{
"JOB-TOKEN"="$CI_JOB_TOKEN" } -InFile "$RELEASE_NAME.exe" -uri "$PACKAGE_REGISTRY_URL/$RELEASE_NAME/$CI_COMMIT_TAG/$RELEASE_NAME.exe" -Method put
release-job:
stage: release
# tags:
# - jTag
needs:
- job: upload
cache:
key: $CI_PIPELINE_ID
paths:
- pack/
script:
- echo "releasing $PACKAGE_REGISTRY_URL/$RELEASE_NAME/$CI_COMMIT_TAG/$RELEASE_NAME.exe"
- release-cli -v
- $asset = "{
`"name`":`"$RELEASE_NAME.exe`",
`"url`":`"$PACKAGE_REGISTRY_URL/$RELEASE_NAME/$CI_COMMIT_TAG/$RELEASE_NAME.exe`",
`"link_type`":`"package`"}"
- $assetjson = $asset | ConvertTo-Json
- release-cli create --name "$RELEASE_NAME" --description "版本更新概述: $CI_COMMIT_TITLE" --ref $CI_COMMIT_SHORT_SHA --tag-name "$CI_COMMIT_TAG" --assets-link=$assetjson
边栏推荐
- 【paper速读】NLNL: Negative Learning for Noisy Labels (ICCV2019)
- 耗时 48 小时,小米工程师发明小米头箍,网友:变身孙悟空不是梦!
- 爬虫之Scrapy框架
- Zhaoqi Science and Technology Innovation and Entrepreneurship Service Platform, introduction of high-level talents for innovation and entrepreneurship, investment and financing docking
- 作者简介&系列文章
- 【Paper Speed Reading】NLNL: Negative Learning for Noisy Labels (ICCV2019)
- 迄今为止见过最详细的零拷贝技术讲解
- Utils timer (3) minimum heap
- New kernel PHP enterprise website development and construction management system
- 从技术全景到场景实战,透析「窄带高清」的演进突破
猜你喜欢

挡不住了,中国芯片制造产业链的重大突破,5nm设备即将发给台积电

如何从一个空有上进心的人,变成行动上的巨人?

HJZS-E002(断电延时)电源监视继电器

Why do LiveVideoStack courses?

从技术全景到场景实战,透析「窄带高清」的演进突破

分享几个常用的国外英文论文文献数据库,先收藏再说

Golang 接口原理

全新内核PHP企业网站开发建设管理系统

Unstoppable, a major breakthrough in China's chip manufacturing industry chain, 5nm equipment will soon be sent to TSMC

狂神说之redis笔记
随机推荐
科利转债上市价格预测
迄今为止见过最详细的零拷贝技术讲解
【Paper Speed Reading】NLNL: Negative Learning for Noisy Labels (ICCV2019)
作者简介&系列文章
兆骑科创创新创业大赛承办,线上直播路演,企业孵化
方舟生存进化自建服务器要多少钱?
LODOP.ADD_PRINT_TEXT 参数解释说明
ES核心概念
数值去0操作
【安装填坑】-import win32api, sys, os ImportError: DLL load failed: 找不到指定的模块。
mv-lcd initialization
继续网址笔记
1322_FreeRTOS中的队列使用的信息梳理以及初步队列的使用
00后写个暑假作业,被监控成这笔样
我的创作纪念日的温柔与七夕的浪漫交织了在一起
PCs really don't work anymore!Intel and AMD suffer the same fate
LeetCode: 205. Isomorphic Strings - Simple
Introduction to 15 days Web3, quick guide from 0 to 1
Zhaoqi Science and Technology Innovation and Entrepreneurship Service Platform, introduction of high-level talents for innovation and entrepreneurship, investment and financing docking
JGL-15/5反时限过流继电器