2015-03-05 8 views
0

Я пишу модуль Puppet для установки приложения на наших тестовых серверах. В среде тестирования нам необходимо установить пакет узлов с именем execSync (https://github.com/mgutz/execSync). Поскольку execSync является родным пакетом, он компилируется при установке. Когда я пытаюсь вручную установить его на сервер, он устанавливается. Однако, когда я делаю то же самое, используя Puppet, шаг компиляции не выполняется.Установка execSync с использованием Puppet

Я попытался установить execSync с помощью модуля puppetlabs-nodejs (https://github.com/puppetlabs/puppetlabs-nodejs) и используя exec определенный тип с командой npm install execSync, как хорошо, и ничто не похоже на работу. Я также проверил, что используются правильные версии nodejs и npm.

Я хотел бы полностью автоматизировать этот процесс, но ничего не работает, и у меня закончились варианты. Каковы могут быть возможные причины?

Отредактировано:

Вот манифеста я использую:

exec { 'npm-install': 
     command => 'npm install execSync', 
     cwd => '/var/www/appv3', 
     path => '/usr/local/node/node-default/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin', 
     logoutput => true, 
} 

Я бегу это с помощью puppet apply.

Это то, что я вижу в консоли вывода:

Notice: Compiled catalog for test.app.com in environment production in 0.54 seconds 
Notice: /Stage[main]/Main/Exec[npm-install]/returns: npm http GET https://registry.npmjs.org/execSync 
Notice: /Stage[main]/Main/Exec[npm-install]/returns: npm http 304 https://registry.npmjs.org/execSync 
Notice: /Stage[main]/Main/Exec[npm-install]/returns: npm http GET https://registry.npmjs.org/temp 
Notice: /Stage[main]/Main/Exec[npm-install]/returns: npm http 304 https://registry.npmjs.org/temp 
Notice: /Stage[main]/Main/Exec[npm-install]/returns: npm http GET https://registry.npmjs.org/rimraf 
Notice: /Stage[main]/Main/Exec[npm-install]/returns: npm http 304 https://registry.npmjs.org/rimraf 
Notice: /Stage[main]/Main/Exec[npm-install]/returns: npm http GET https://registry.npmjs.org/graceful-fs 
Notice: /Stage[main]/Main/Exec[npm-install]/returns: npm http 304 https://registry.npmjs.org/graceful-fs 
Notice: /Stage[main]/Main/Exec[npm-install]/returns: 
Notice: /Stage[main]/Main/Exec[npm-install]/returns: > [email protected] install /var/www/appv3frontend_testapp.vwo.com/node_modules/execSync 
Notice: /Stage[main]/Main/Exec[npm-install]/returns: > node install.js 
Notice: /Stage[main]/Main/Exec[npm-install]/returns: 
Notice: /Stage[main]/Main/Exec[npm-install]/returns: [execsync v1.0.2] Attempting to compile native extensions. 
Notice: /Stage[main]/Main/Exec[npm-install]/returns: [execSync v1.0.2] 
Notice: /Stage[main]/Main/Exec[npm-install]/returns:  Native code compile failed!! 
Notice: /Stage[main]/Main/Exec[npm-install]/returns: [email protected] node_modules/execSync 
Notice: /Stage[main]/Main/Exec[npm-install]/returns: └── [email protected] ([email protected]) 
Notice: /Stage[main]/Main/Exec[npm-install]/returns: executed successfully 

То же самое работает нормально, когда я запускаю команду вручную. Компиляция выполняется успешно.

+1

Из предоставленной вами информации, это может быть в буквальном смысле ничего. Пожалуйста, укажите журналы отладки и т. Д. –

+0

Когда вы говорите, что он работает, когда вы запускаете его вручную, используете ли вы тот же пользователь и среду, что и марионетка? –

+0

@ChrisPitman Да. Запуск «марионетки» в качестве корня. переменная 'path' была установлена ​​так же, как и при попытке установить вручную. – vaidik

ответ

2

Выяснил это. Я пытался понять, что в них было по-другому. Кажется, что окружающая среда была иной. Для этапа компиляции необходимо установить переменную env HOME. Когда он не установлен, шаг компиляции выходит из строя без каких-либо полезных сообщений об ошибках.

Наконец, в конечном итоге, используя следующий манифест:

exec { 'npm-install': 
     command => 'npm install execSync', 
     cwd => '/var/www/appv3', 
     path => '/usr/local/node/node-default/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin', 
     environment => ['HOME=/root'], 
} 
0

Обязательно используйте полные пути, делая в EXEC, что-то вроде:

exec {'install-execSync': 
    command => '/usr/local/bin/npm install execSync', 
} 

Для полностью автоматизировать процесс с помощью модуля puppetlabs (который вы хотите сделать), нужно больше информации.

+0

Ну, как я уже сказал, я уже все, что вы упомянули в своем ответе. – vaidik

 Смежные вопросы

  • Нет связанных вопросов^_^