Как настроить Jenkins для использования Knife в сценарии Powershell

Я использую Jenkins на Windows Server 2012 R2. Я хотел бы запустить задание, которое создает, и при принудительном повышении оно должно сообщить удаленному серверу шеф-повара, что рецепт был изменен или обновлен, а затем запустить клиент шеф-повара на удаленных узлах.

Я установил плагин Chef Identity, плагин Promoted-builds, плагин MSbuild, плагин TFS-4.0.0 и плагин Deploy.

Пока работает сборка и работают акции. Я настроил на принудительное продвижение, что должны запускаться два скрипта Powershell. Первый работает нормально, он выполняет только базовое управление данными и именование файлов.

Но второй говорит, что это был провал, но продвижение все еще проходит, и нет никаких доказательств того, что оно вообще сработало.

Я явно использовал путь к Knife, потому что, когда я его не использую, Jenkins выдает ошибку:

WARNING: No knife configuration file found
ERROR: Could not find cookbook MyFirstCookingLesson in your cookbook path, skipping it
ERROR: ArgumentError: Cannot sign the request without a client name, check that :node_name is assigned

Если я добавлю флаг -V и запущу скрипт, щелкнув его правой кнопкой мыши и запустив его с помощью Powershell в рабочей области Jenkins, я получу эту информацию:

введите здесь описание изображения

Файл ps1 содержит (назовем его «Chef-client.ps1»):

C:\opscode\chefdk\bin\knife cookbook upload MyFirstCookingLesson
C:\opscode\chefdk\bin\knife job start 'chef-client' WIN-COMPNAME

Chef-client.ps1 вызывается с помощью командной строки Execute Windows:

cd C:\chef-source\cookbooks
PowerShell.exe -File  C:\chef-source\cookbooks\Chef-client.ps1

Я также настроил личность шеф-повара в учетных данных Jenkins следующим образом:

Identity name: geoff
user.pem key : <a whole bunch of secret stuffs and gibberish>

knife.rb : 

log_level :info
log_location STDOUT
node_name 'geoff'
client_key 'C:/Users/user123/.chef/geoff.pem'
validation_client_name  'geoff.pem'
validation_key 'C:/Users/user123/.chef/secretName-validator.pem'
chef_server_url 'https://secretLocation.268lab.local/organizations/secretName/'
syntax_check_cache_path 'C:/Users/user123/.chef/syntax_check_cache'
cookbook_path [ 'c:/chef-source/cookbooks/' ]
http_proxy 'http://22.151.32.85:3128'
https_proxy 'http://22.151.32.85:3128'
no_proxy 'secretLocation.268lab.local'
knife[:editor] = '"C:\Program Files (x86)\Notepad++\notepad++.exe"';

Итак, я также обнаружил, что Jenkins, похоже, работает в своем собственном профиле пользователя, который, как мне кажется, может все отбрасывать.

Я прочитал так много блогов по настройке, но ничего, что действительно говорило бы мне, как настроить это явно. Блоги либо предполагают, что это уже сделано, либо используют другой инструмент.

Я также поместил копии папки .chef как в рабочее пространство Jenkins, так и в «обнадеживающее» пространство профиля пользователя в надежде, что это сработает.

Пожалуйста, может ли кто-нибудь помочь мне?


person Dean Marsden    schedule 10.12.2015    source источник


Ответы (1)


Слишком длинно для комментария:

Итак, я также обнаружил, что Jenkins, похоже, работает в своем собственном профиле пользователя, который, как мне кажется, может все отбрасывать.

Если ваш пользователь jenkins не может прочитать user123 home, нет никаких шансов, что он сможет прочитать конфигурацию ножа, не прошедшую аутентификацию должным образом, поскольку он не может прочитать файл geoff.pem.

Одним из решений этой проблемы является размещение конфигурации, ключей и т. д. в определенном каталоге и использование опции -c для knife, чтобы указать путь к файлу conf. Другой вариант — использовать переменную среды KNIFE_HOME, но в Jenkins это менее просто и подвержено ошибкам.

person Tensibai    schedule 10.12.2015
comment
Прости за это. Я переместил сообщение об ошибке для лучшего чтения. Я предполагаю, что -vv не является (двойной u), и это должно быть -V? если я использую -vv, он преуспевает, а если я использую -W, он говорит, что это недопустимый параметр. - person Dean Marsden; 10.12.2015
comment
Удвоение V приводит к тому, что нож становится более подробным, я хочу сказать, что вы показываете нам ошибку, которую, как вы говорите, вы исправили, что не кажется полезным, чтобы помочь вам - person Tensibai; 10.12.2015
comment
Извините за путаницу. Это сообщение об ошибке — это то, что я получаю от второго сценария, который я запускаю. Пишет, что нет конфигурационного файла Knife. - person Dean Marsden; 10.12.2015
comment
В этом случае первая часть, если мой ответ дает это, это проблема разрешения пользователя Jenkins на доступ к файлу в домашнем каталоге другого пользователя. - person Tensibai; 10.12.2015
comment
Хорошо охлаждает. Значит, я работаю в правильном направлении. Но вы случайно не знаете, как это решить? Должен ли я помещать файлы шеф-повара в профиль пользователя Jenkins или, скорее, настраивать Jenkins, чтобы иметь доступ к домашнему каталогу других пользователей? - person Dean Marsden; 10.12.2015
comment
Лично я использую определенный каталог и передаю путь к ножу с параметром -c (это позволяет мне также иметь две конфигурации для организаций разработчиков и производителей) - person Tensibai; 10.12.2015
comment
Ладно, фантастика. Я куда-то попадаю. -c, кажется, работает для моей команды загрузки. Но запуск задания ножа, похоже, не удался. Но большое спасибо за вашу помощь до сих пор! :) - person Dean Marsden; 10.12.2015
comment
Я не использую аддон для push-уведомлений, поэтому не могу здесь помочь, но, поскольку это плагин для ножей, те же советы должны работать. - person Tensibai; 10.12.2015
comment
Не могли бы вы добавить в свой ответ, что я должен использовать параметр -c, и тогда я приму его как ответ? - person Dean Marsden; 10.12.2015
comment
@DeanMarsden сделал и удалил последнюю часть, поскольку мы устранили проблему с сообщением об ошибке. - person Tensibai; 10.12.2015