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

Posted

技术标签:

【中文标题】如何在 Azure Pipeline (Windows) 中安装 .msi 程序【英文标题】:How to install an .msi program in Azure Pipeline (Windows) 【发布时间】:2021-10-25 14:03:02 【问题描述】:

我的目标是在 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 映像上使用。

CppCheck for Windows 是一个可在this 页面上下载的 .msi 文件。下载链接很容易获得。

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

谢谢!

【问题讨论】:

【参考方案1】:

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

您可以使用 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

【讨论】:

"或者您可以使用 PowerShell 脚本从 URL 下载 .msi" 您能否提供更多信息? 下载和安装命令都在工作。谢谢您的帮助!剩下的唯一部分是运行 cppcheck(找不到 cppcheck 可执行文件)。一旦它工作,我会发布最终解决方案。 有这方面的文档吗?下面的命令给了我错误“cppcheck 不被识别为内部或外部命令、可运行程序或批处理文件。” - 脚本:|设置 PATH=%PATH%;C:\Program Files\Cppcheck\ cppcheck --error-exitcode=1 --addon=misra.json --inline-suppr 。 displayName: 'MISRA 检查' @RafaelNicolay,没有这样的文件。这是作为开发人员的基本技能。这个新的错误很明显是系统路径中没有添加Cppcheck。你只需要google一下如何在系统路径中添加文件路径。【参考方案2】:

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

# 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 的帮助!

【讨论】:

以上是关于如何在 Azure Pipeline (Windows) 中安装 .msi 程序的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Azure DevOps Pipeline 读取 Azure 文件共享文件

如何在 ML Azure Pipeline 中使用环境

如何在 Azure Pipeline 中为 iOS 版本使用自动预配

如何向 Azure 存储授予对 Azure Pipeline 的 Azure 文件副本的访问权限?

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

如何在任何分支上的每次新推送时触发 Azure Pipeline?