[Inno Setup] CI 時自動產生安裝檔(以 Azure DevOps 為例)

透過 Inno Setup 打包安裝檔非常方便,由於都是腳本指令,加上 Inno Setup 本身也支援以 CLI 的方式執行,因此要搭配 CI/CD 是完全可行的,本篇就以 Azure DevOps 為例,說明一下使用 Inno Setup 打包安裝檔需要注意的一些事項。

以下為使用 Pipeline as code 的方式說明,因此都是 yaml 設定檔,當然如果使用 Classic editor 的話,也都可以找到對應的 task

前置準備

由於不再是從本機上打包,因此許多路徑設定等等都需要做出對應的調整,以下說明幾個比較重要的部分:

語言檔要一起進入版控

尤其在沒有使用內建的語言檔,或是語言檔有客製化的時候,在 CI 的機器上當然不會有這些客製化的內容,因此必須將這些檔案都加入版控。

之後在 *.iss 檔中記得調整語言檔的位置,可以直接將 MessagFile 換成版控對應的路徑

[Languages]
Name: "english"; MessagesFile: "Langs\Default.isl"
Name: "chinesetraditional"; MessagesFile: "Langs\ChineseTraditional.isl"

檔案打包的路徑

原來都是指向本機的某個絕對路徑,但在 CI 中就要看編譯程式時指定的輸出目錄,以 .Net Core 的程式來說,可能會直接加上 -o 指定路徑:

dotnet publish -o dist

那麼在 *.iss 檔中也記得要指定路徑:

[Files]
Source: "dist\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion
Source: "dist\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs

安裝檔輸出路徑

預設安裝檔產生的路徑為 Output(或自行設定 OutputDir),之後要記得複製到 $(build.artifactstagingdirectory)中,這是 Azure DevOps 內建的一個目錄路徑變數,通常打包出來的內容都會放在這裡,然後透過 Publish Artifact 這個 task 上傳,以供之後 Release Pipeline 使用。

Azure Pipeline 設定

接著來看看 Azure Pipeline 這邊的設定,當然,事前的程式碼編譯等動作就不贅述了。

安裝 Inno Setup

在 Windows 上要快速安裝一個程式,最方便的莫過於使用 Chocolatey 了,而 Azure DevOps 也有 Chocolatey task,可以直接拿來使用:

- task: gep13.chocolatey-azuredevops.chocolatey-azuredevops.ChocolateyCommand@0
  displayName: '安裝 Inno Setup'
  inputs:
    command: install
    installPackageId: innosetup

建立安裝檔

安裝好 Inno Setup 後,可以直接執行 iscc.exe [腳本].iss,就可以直接根據 *.iss 檔裡的腳本建立安裝檔了,因此直接使用 PowerShell 執行程式就好。

- powershell: 'iscc.exe installation.iss'
  displayName: '打包安裝檔'

將安裝檔輸出給 Release Pipeline 使用

將打包好的安裝檔複製到 $(build.artifactstagingdirectory)

- powershell: 'copy Output/Setup.exe $(build.artifactstagingdirectory)'
  displayName: '複製安裝檔'

CI 過程中如果還有其他需要發佈的內容,都可以丟到這個目錄來。

以及使用 Publish build artifacts 這個 Task 來發佈安裝檔。

- task: PublishBuildArtifacts@1
  displayName: 'Publish Artifact: drop'
  inputs:
    PathtoPublish: '$(build.artifactstagingdirectory)'
  condition: succeededOrFailed()

之後就看 Release Pipeline 要怎麼將這些內容發佈到指定的地方囉!

如果您覺得我的文章有幫助,歡迎免費成為 LikeCoin 會員,幫我的文章拍手 5 次表示支持!