桌面应用程序的 CI/CD
桌面应用程序的 ci/cd 过程与网站有一些差异,因为桌面应用程序的“部署”只是将安装包分发到目标位置,无需上架到应用商店。根据公司的管理流程,这个过程可以非常复杂,也可以非常简单。在简单的情况下,azure pipelines 中一个 wpf 桌面应用程序的 ci/cd 过程如下:
触发器启动 Pipeline构建 WPF 应用程序启动单元测试以确保构建质量创建安装包将安装包复制到目标位置通知用户新安装包已经可以获取
在“使用 Azure Pipelines 实现 CI”这篇文章中,我已经讲解了如何实现第 1、2、3、5 步。至于第 6 步,可以在 Project Settings 的 Notifications 页面中设置使用邮件通知团队成员,也可以参考“使用连接器接收Azure DevOps的通知”这篇文章,通过 Teams 发送构建的结果。
现在我们还缺少第 4 步“创建安装包”,本文将介绍如何在 Azure Pipelines 中使用 Inno Setup 创建安装包。
使用 Inno Setup 创建安装包
![[Azure DevOps] 使用 Inno Setup 制作桌面软件安装包](https://www.chuangxiangniao.com/wp-content/themes/justnews/themer/assets/images/lazy.png)
假设我们已经根据“使用 Azure Pipelines 实现 CI”的方法发布了一个 WPF 应用程序,发布到 Artifacts 的文件如上图所示,可以以 Zip 的形式将所有输出文件下载到本地,基本相当于绿色版软件。但我们不能将这个 Zip 包直接发给客户,我们至少还要包括开始菜单和修改注册表等一大堆东西,因此需要将 Release 的文件打包到一个安装包中。我的公司通常使用 Inno Setup 制作安装包,在 Azure Pipelines 中使用 Inno Setup 也非常简单,因此本文将使用 Inno Setup 作为制作安装包的例子。
立即进入“豆包AI人工智官网入口”;
立即学习“豆包AI人工智能在线问答入口”;
首先我们需要一个 iss 脚本。在 install 目录下创建一个简单的名为 SetupScript.iss 的脚本文件,大部分保留了默认值(懒得修改公司名之类的了),它只是将 Release 目录的内容全部打包起来,内容如下:
; Script generated by the Inno Setup Script Wizard.; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!define MyAppName "My Program"
define MyAppPublisher "My Company, Inc."
define MyAppURL "https://www.php.cn/link/4c74744a9c10b3001a1d9b87f86eb26f"
define MyAppExeName "wpf.exe"
define VersionSourceAssemblyName MyAppExeName
define BuildOutputFolder "..wpfbinRelease"
define MyAppFileVersion GetFileVersion(AddBackslash(BuildOutputFolder) + VersionSourceAssemblyName)
define MyAppCustomerVersion GetStringFileInfo(AddBackslash(BuildOutputFolder) + VersionSourceAssemblyName, "ProductVersion")
[Setup]; NOTE: The value of AppId uniquely identifies this application. Do not use the same AppId value in installers for other applications.; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)AppId={{0B50DAF7-728E-48C7-984F-5E6FDB924490}AppName={#MyAppName}AppVersion={#MyAppCustomerVersion};AppVerName={#MyAppName} {#MyAppVersion}AppPublisher={#MyAppPublisher}AppPublisherURL={#MyAppURL}AppSupportURL={#MyAppURL}AppUpdatesURL={#MyAppURL}DefaultDirName={autopf}{#MyAppName}DisableProgramGroupPage=yes; Uncomment the following line to run in non administrative install mode (install for current user only.);PrivilegesRequired=lowestOutputBaseFilename=mysetup {#MyAppCustomerVersion}Compression=lzmaSolidCompression=yesWizardStyle=modernVersionInfoCompany={#MyAppPublisher}VersionInfoVersion={#MyAppFileVersion}VersionInfoProductName={#MyAppName}VersionInfoProductTextVersion={#MyAppCustomerVersion}
[Languages]Name: "english"; MessagesFile: "compiler:Default.isl"
[Tasks]Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
[Files]Source: "{#BuildOutputFolder}{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversionSource: "{#BuildOutputFolder}*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; NOTE: Don't use "Flags: ignoreversion" on any shared system files
[Icons]Name: "{autoprograms}{#MyAppName}"; Filename: "{app}{#MyAppExeName}"Name: "{autodesktop}{#MyAppName}"; Filename: "{app}{#MyAppExeName}"; Tasks: desktopicon
[Run]Filename: "{app}{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent
用 Inno Setup 运行一下这个脚本文件,确保它正确运行(如果成功的话会在 InstallerOutput 目录下生成一个安装程序)。
在 Azure Pipelines 上运行 Inno Setup
将 SetupScript.iss 推送到 Azure Repos 上,然后修改对应的 Pipeline。Pipeline 中需要添加两个任务:
一个负责使用 Chocolatey 下载并安装 Inno Setup 的任务一个调用 Inno Setup 运行 SetupScript.iss 的任务
然后修改 CopyFiles 任务,将 Installeroutput 目录中的安装包复制到 $(build.artifactstagingdirectory)。修改后的 YAML 文件如下(其中两个 PowerShell 任务即为新增的两个任务):
trigger:
- master
pool:vmImage: 'windows-latest'
variables:solution: '*/.sln'buildPlatform: 'Any CPU'buildConfiguration: 'Release'
steps:
task: NuGetToolInstaller@1
task: PowerShell@2displayName: 'Inno setup download'inputs:targetType: 'inline'script: 'choco install innosetup'
task: NuGetCommand@2inputs:restoreSolution: '$(solution)'
task: VSBuild@1inputs:solution: '$(solution)'platform: '$(buildPlatform)'configuration: '$(buildConfiguration)'
task: PowerShell@2displayName: 'Execute Inno Setup script'inputs:targetType: 'inline'script: 'iscc.exe InstallerSetupScript.iss'
task: CopyFiles@2inputs:SourceFolder: 'Installeroutput'Contents: '*.exe'TargetFolder: '$(build.artifactstagingdirectory)'
task: PublishBuildArtifacts@1inputs:PathtoPublish: '$(Build.ArtifactStagingDirectory)'ArtifactName: 'drop'publishLocation: 'Container'
最后
现在,一个桌面应用程序的 CI/CD 已经基本完成了。当然,实际应用中 iss 脚本和 PowerShell 都可以更复杂,以便完成更多任务,例如程序签名、检查并安装 .Net Framework 等,这些操作都超出了本文的范畴,如有需要可以参考以下链接:
Azure Pipelines 文档Inno Setup – a free installer for Windows programsChocolatey Software – The package manager for Windows
以上就是[Azure DevOps] 使用 Inno Setup 制作桌面软件安装包的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/115339.html
微信扫一扫
支付宝扫一扫