Я использую 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, так и в «обнадеживающее» пространство профиля пользователя в надежде, что это сработает.
Пожалуйста, может ли кто-нибудь помочь мне?