【问题标题】:Chocolatey fails to install Inno Setup on Azure PipelineChocolatey 无法在 Azure Pipeline 上安装 Inno Setup
【发布时间】:2019-01-22 18:59:02
【问题描述】:

我正在尝试在 Azure Devops 上的内置 VS2017 代理上为我的一个构建管道安装 Inno Setup 5,但我在标准输出中得到以下两行,但它以代码 1 退出,并且没有任何内容日志文件。我的问题:

  • Inno Support 是否以这种方式安装?
  • 我做错了什么?
  • chocolatey 是否需要在已登录 GUI 的机器上运行?

这是标准输出中我认为最重要的两行

    innosetup not installed. An error occurred during installation:
    The process cannot access the file '...\.chocolateyPending' because it is being used by another process.

这是我在 Azure Devops 上的构建管道:

我的安装程序脚本是用 javascript 编写的,并在安装依赖项后通过 npm 脚本执行

const utils = require('./utils');
const fs = require('fs');
const path = require('path');
const spawn = require('child_process').spawn;

const command = 'cmd /c choco install innosetup --yes --force --no-progress -ia \'/VERYSILENT\'';
const logDirectory = path.join( 'C:', 'ProgramData', 'chocolatey', 'logs' );

function install() {
  return new Promise( resolve => {

    const cmd = command.split(' ').filter( ( x, i ) => i === 0 ).join('');
    const args = command.split(' ').filter( ( x, i ) => i !== 0 );

    var sqlcmd = spawn( cmd, args );
    sqlcmd.stdout.on( 'data', data => {
      console.log( data.toString().replace( /\r\n$/gmi, '' ) );
    } )
    sqlcmd.stderr.on( 'data', data => {
      console.error( 'error', data.toString() );
      process.exit( 1 );
    } )
    sqlcmd.on( 'exit', code => {
      resolve( code );
    } )

  });
}

( async () => {

  utils.header( 'installing Inno Setup' );
  const installExitCode = await install();

  utils.header( 'Log directory:', logDirectory );
  console.log( '  *', fs.readdirSync( logDirectory ).join( '\r\n  * ' ) );
  utils.header( 'chocolatey.log' );
  fs.createReadStream( path.join( logDirectory, 'chocolatey.log' ) ).pipe( process.stdout );
  utils.header( 'choco.summary.log' );
  fs.createReadStream( path.join( logDirectory, 'choco.summary.log' ) ).pipe( process.stdout );

  if ( installExitCode !== 0 ) {
    console.log( 'installer exited with error code:', installExitCode );
    process.exit( installExitCode );
  }

})();

这是我从失败的 Azure Devops 构建中获得的标准输出:

2019-01-22T18:34:19.0336866Z ########################################
2019-01-22T18:34:19.0337014Z 
2019-01-22T18:34:19.0337191Z   installing Inno Setup
2019-01-22T18:34:19.0337335Z 
2019-01-22T18:34:19.0337513Z Chocolatey v0.10.11
2019-01-22T18:34:19.0337798Z Installing the following packages:
2019-01-22T18:34:19.0338258Z innosetup
2019-01-22T18:34:19.0338554Z By installing you accept licenses for the packages.
2019-01-22T18:34:19.0338705Z 
2019-01-22T18:34:19.0338856Z InnoSetup v5.6.1 (forced) [Approved]
2019-01-22T18:34:19.0339051Z innosetup package files install completed. Performing other installation steps.
2019-01-22T18:34:19.0339266Z innosetup not installed. An error occurred during installation:
2019-01-22T18:34:19.0339462Z  Item has already been added. Key in dictionary: 'NPM_CONFIG_CACHE'  Key being added: 'npm_config_cache'
2019-01-22T18:34:19.0339703Z The process cannot access the file 'C:\ProgramData\chocolatey\lib\InnoSetup\.chocolateyPending' because it is being used by another process.
2019-01-22T18:34:19.0339890Z 
2019-01-22T18:34:19.0340054Z ########################################
2019-01-22T18:34:19.0340204Z 
2019-01-22T18:34:19.0340364Z   Log directory: C:\ProgramData\chocolatey\logs
2019-01-22T18:34:19.0340513Z 
2019-01-22T18:34:19.0340775Z   * choco.summary.log
2019-01-22T18:34:19.0342937Z   * chocolatey.log
2019-01-22T18:34:19.0343090Z 
2019-01-22T18:34:19.0343282Z ########################################
2019-01-22T18:34:19.0343425Z 
2019-01-22T18:34:19.0343598Z   chocolatey.log
2019-01-22T18:34:19.0343738Z 
2019-01-22T18:34:19.0344018Z 
2019-01-22T18:34:19.0344255Z ########################################
2019-01-22T18:34:19.0344406Z 
2019-01-22T18:34:19.0344582Z   choco.summary.log
2019-01-22T18:34:19.0344722Z 
2019-01-22T18:34:19.0344902Z installer exited with error code: 1

【问题讨论】:

  • 在您自己的机器上安装该软件包时是否有效?您是否尝试过使用 Chocolatey 扩展程序? marketplace.visualstudio.com/…
  • 在我的 Win10 电脑上运行良好。我没有尝试过该扩展,因为在代理上安装了巧克力。列表中的第一项。
  • @GaryEwanPark 市场上的扩展似乎与构建软件包或在缺少它的机器上安装巧克力有关。我能够很好地执行 choco -v 并且它运行的版本与我在我的 PC 上运行的版本相同
  • 不确定您指的是什么。我链接到的扩展处理以下命令:apikey、c​​onfig、feature、install、pack、push、source、upgrade,以及执行直接支持的自定义命令的能力。我建议作为第一遍,使用该任务执行,删除通过 npm 时可能发生的任何“有趣”的事情。
  • @GaryEwanPark 我错过了这可以安装。我认为这更多是关于发布自己的包。它确实有效。不确定运行 cli 命令在做什么,但它可以工作。

标签: azure-devops inno-setup azure-pipelines chocolatey


【解决方案1】:

回答您的一些直接问题...

Inno Support 是这样安装的吗?

是的,innosetup 确实支持以这种方式安装。您可以在包裹页面here 上看到这一点。页面顶部的绿色灯泡表示此软件包版本已通过 Chocolatey 的自动化流程正确安装,验证软件包是否安装正确。

chocolatey 是否需要在已登录 GUI 的机器上运行?

不,在大多数情况下这不是必需的。有一些 Chocolatey 包不会静默安装,用于安装这些“可能”的机制要求安装在实际的用户进程中运行,但大多数包不需要这个。

我做错了什么?

我怀疑“某物”在通过 npm 运行并安装在 Promise 中时无法正常工作。看日志,好像有这个条目:

2019-01-22T18:34:19.0339462Z 项目已添加。字典中的键:'NPM_CONFIG_CACHE' 正在添加的键:'npm_config_cache'

在 Chocolatey 日志的中间,这对我来说没有意义。

我最好的建议是在这个 extension 上使用独立的 Chocolatey 任务(注意: 完全公开,我是这个扩展的作者),或者,尝试在npm,也许直接使用 PowerShell 任务。

【讨论】:

    猜你喜欢
    • 2020-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-21
    • 2011-07-04
    相关资源
    最近更新 更多