如何在 Azure Pipeline 中安装 .msi 程序 (Windows)

How to install an .msi program in Azure Pipeline (Windows)

我的 objective 是在 Azure Pipelines 的 Microsoft 托管映像中安装 CppCheck。 我已经为 Ubuntu 图像做了这个,但是 Ubuntu 的 CppCheck 已经过时了。我的管道:

trigger:
- master

pool:
  vmImage: 'ubuntu-latest'

jobs:
- job: MisraCheck
  displayName: Check for Misra Compliance

  steps:

  - script: |
      sudo apt-get install cppcheck
    displayName: 'Install cppcheck'

  - script: |
      cppcheck --error-exitcode=1 --addon=misra.json .
    displayName: 'Run cppcheck'

由于我熟悉 Linux(和 apt-get),因此设置此管道非常容易。但是现在我必须“翻译”这个管道以在 Windows 图像上使用。

Windows 的 CppCheck 是一个可在 this 页面下载的 .msi 文件。下载link轻松搞定

我知道我需要在管道中使用 Windows 图像,例如“windows-2019”或“vs2017-win2016”。主要问题是如何替换 apt-get 命令以从 link 获取 .msi 文件并安装它?

谢谢!

How to install an .msi program in Azure Pipeline (Windows)

您可以使用 Powershell 任务来安装 .msi 文件:

Start-Process $(System.DefaultWorkingDirectory)\cppcheck-2.6-x64-Setup.msi -ArgumentList "/quiet"

Start-Sleep 180 #waiting for installing complete

并且您需要将 .msi 上传到您的存储库。或者您可以使用 PowerShell 脚本从 URL 下载 .msi

更新:

Invoke-WebRequest https://github.com/danmar/cppcheck/releases/download/2.6/cppcheck-2.6-x64-Setup.msi -OutFile $(System.DefaultWorkingDirectory)\cppcheck-2.6-x64-Setup.msi

Start-Sleep 90 #waiting for downloadig complete

发布最终解决方案。此管道是我在打开问题时发布的管道的“翻译”。

# This pipeline uses a Windows image as host to install cppcheck to verify MISRA guidelines.

trigger:
- master

pool:
  vmImage: 'windows-2019'

jobs:
- job: MisraCheck
  displayName: Check for Misra Compliance

  steps:

# Download and Install CppCheck(full install since we need the MISRA plugin)
  - powershell: |
      Invoke-WebRequest https://github.com/danmar/cppcheck/releases/download/2.6/cppcheck-2.6-x64-Setup.msi -OutFile $(System.DefaultWorkingDirectory)\cppcheck-2.6-x64-Setup.msi
      Start-Process $(System.DefaultWorkingDirectory)\cppcheck-2.6-x64-Setup.msi -ArgumentList "/quiet ADDLOCAL=CppcheckCore,CLI,Translations,ConfigFiles,PlatformFiles,PythonAddons,CRT" -Wait
    displayName: 'Download and Install Cppcheck'

# Adds Cppcheck to PATH and runs it
  - script: |
      PATH=C:\Program Files\Cppcheck\;%PATH%
      cppcheck --error-exitcode=1 --addon=misra.json --inline-suppr .
    displayName: 'MISRA Check'

PS:这不是一个好的解决方案,因为它需要几分钟才能完成管道。 Ubuntu 管道大约需要 30 秒才能完成,而 Windows 管道最多可能需要 4 分钟。也许正确的做法是为此建立一个代理。

感谢 Leo Liu-MSFT 的帮助!