Шоколад не удается установить Inno Setup на Azure Pipeline - PullRequest
0 голосов
/ 22 января 2019

Я пытаюсь установить Inno Setup 5 на встроенном агенте VS2017 в Azure Devops для одного из моих конвейеров сборки, но я получаю следующие две строки в stdout, но он завершается с кодом 1, и в нем ничего нет файлы журнала. Мой вопрос (ы):

  • Inno Support устанавливается таким образом?
  • Что я делаю не так?
  • Требуется ли шоколад для запуска на машине с зарегистрированным GUI?

Вот две строки из stdout, которые я считаю наиболее важными

    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:

enter image description here

Мой установочный скрипт написан на 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

1 Ответ

0 голосов
/ 23 января 2019

Чтобы ответить на некоторые ваши прямые вопросы ...

Устанавливается ли Inno Support таким образом?

Да, innosetup поддерживает установку таким способом.Вы можете видеть это на странице пакетов здесь .Эта зеленая лампочка в верхней части страницы указывает на то, что эта версия пакета правильно установлена ​​с помощью автоматизированных процессов, установленных в Chocolatey, и проверки правильности установки пакета.

Требуется ли запуск шоколада на машине свход в GUI?

Нет, в большинстве случаев это не нужно.Есть некоторые пакеты Chocolatey, которые не устанавливаются без вывода сообщений, и механизм, используемый для их установки, может требовать, чтобы установка выполнялась в реальном процессе пользователя, но большинству пакетов это не нужно.

Что я делаю не так?

У меня есть подозрение, что «что-то» работает неправильно при запуске через npm и установке в Promise.Глядя на журнал, кажется, есть эта запись:

2019-01-22T18: 34: 19.0339462Z Элемент уже добавлен.Ключ в словаре: 'NPM_CONFIG_CACHE' Добавляемый ключ: 'npm_config_cache'

В середине журнала Chocolatey, что не имеет смысла для меня.

Мой лучший совет будетиспользовать автономную задачу Chocolatey для этого расширения ( ПРИМЕЧАНИЕ: полное раскрытие, я являюсь автором этого расширения), или попытаться выполнить установку вне npm, возможно, напрямуюс задачей PowerShell.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...