2016-10-05 10 views
1

Сценарий:Teamcity: агент сборки Mac не может подписать файл .pkg с использованием productsign. SignData не удалось: CSSMERR_CSP_NO_USER_INTERACTION (-2147415840)

У меня есть .pkg файл, который должен быть подписан с помощью TeamCity после нашего TeamCity завершения сборки.

В идеале это может быть шаг сборки или скрипт, который выполняется в конце. После исследования, я попробовал следующее:

Сценарий ВХОД:

security import applicationkey.p12 -k login.keychain -P "password" 

security import installerkey.p12 -k login.keychain -P "password" 

security -v unlock-keychain -p "password" /Users/administrator/Library/Keychains/login.keychain 

security -v unlock-keychain -u /Library/Keychains/System.keychain 

productsign --keychain /Users/administrator/Library/Keychains/login.keychain --sign 'Developer ID Installer: Company LLC' CompanyInstaller.pkg CompanyInstallerSigned.pkg 

pkgutil --check-signature CompanyInstallerSigned.pkg 

ВЫВОД:

unlock-keychain "-p" "mypassword" "/Users/administrator/Library/Keychains/login.keychain" 

unlock-keychain "-u" "/Library/Keychains/System.keychain" 

productsign: using timestamp authority for signature 

productsign: signing product with identity "Developer ID Installer: Company LLC" from keychain /Users/administrator/Library/Keychains/login.keychain 

productsign: adding certificate "Developer ID Certification Authority" 

productsign: adding certificate "Apple Root CA" 

2016-10-05 14:57:11.484 productsign[9385:29611120] SignData failed: CSSMERR_CSP_NO_USER_INTERACTION (-2147415840) 

Error signing data. 

productsign: error: Failed to sign the product. 

ВОПРОС:

Я заметил много решений это упоминание, чтобы щелкнуть «Всегда разрешать» от t он откроет диалоговое окно в первый раз, когда он появится в ссылке на Control Access Keychain, однако мое единственное известное взаимодействие с этим агентом сборки - через SSH. Есть ли способ подписать .pkg с использованием productsign в Teambuilding mac build agent без взаимодействия gui с подсказкой «Всегда разрешать»? Или, есть способ войти в агент сборки и просмотреть gui, чтобы я мог нажать на это «Всегда разрешать», чтобы включить это?

Примечание: Я также попытался сохранением (машина местного подписания) частный ключ управление доступом к «Разрешить все приложения для доступа к этому элементу», экспортировать его, импортировать его в login.keychain агента построения, а затем попробовал выше, чтобы иметь только один вывод. Когда я делаю тот же процесс на моем macbookpro, все работает, однако я не помню, если бы я давно нажал «Alway Allow».

Любые мысли? Очень признателен.

ответ

1

Мы столкнулись с этой проблемой: мы используем TeamCity для подписывания пакетов на агенте сборки Mac.

При первом создании агента сборки мы импортировали сертификат в цепочку ключей и предоставляли разрешение «всегда разрешать»; это, казалось, сработало. В какой-то момент агент сборки был перезагружен, а затем подписывание пакетов больше не работало, что бы мы ни пытались с разрешением & настроек доверия. Мы продолжали получать ошибку SignData failed: CSSMERR_CSP_NO_USER_INTERACTION.

Мы исправили это (надеюсь, навсегда!), Переместив сертификат в брелок «Система» (ранее он был в брекетинге «login»). Нам не нужно было менять наш звонок на productsign - он правильно взял системный брелок. Я предполагаю, что если бы у вас был сертификат в обоих брелках, вам нужно было бы сообщить productsign, какой брелок использовать (--keychain ...).