Наша автоматизированная сборка работает на Jenkins. Сама сборка выполняется на подчиненных, причем подчиненные выполняются через SSH.
Я получаю ошибку:
00:03:25.113 [codesign-app] build/App.app: User interaction is not allowed.
Я попробовал каждое предложение, которое я видел до сих пор в других сообщениях здесь:
- Использование безопасности unlock-keychain непосредственно перед подписью для разблокировки цепочки для ключей.
- Перемещение подписывающего ключа в собственную цепочку для ключей.
- Перемещение подписывающего ключа в связку ключей входа.
- Перемещение подписывающего ключа в системную связку ключей.
- Ручная настройка списков цепочек для ключей только для цепочки для ключей, которая содержит ключ.
Во всех случаях я получаю одну и ту же ошибку.
В попытке диагностировать проблему, я попытался выполнить команду «security unlock-keychain» на своем локальном терминале и обнаружил, что она фактически не разблокирует цепочку для ключей - если я смотрю в Keychain Access, символ блокировки все еще там. Это тот случай, когда я передаю пароль в командной строке или разрешаю ему запрашивать его. Разблокировка той же цепочки для ключей с помощью графического интерфейса предложит мне ввести пароль, а затем разблокировать его. Кроме того, если я бегу «безопасности с замком-брелок», я сделать увидеть блокировку сразу после запуска команды. Это заставляет меня думать, что unlock-keychain на самом деле не работает. Я испытываю такое же поведение на Lion (который мы используем для сборщиков) и Mavericks (на котором я разрабатываю).
Затем я попытался добавить -v ко всем командам безопасности:
list-keychains "-d" "system" "-s" "/Users/tester/.secret/App.keychain"
Listing keychains to see if it was added: ((
"/Library/Keychains/System.keychain"
))
unlock-keychain "-p" "**PASSWORD**" "/Users/tester/.secret/App.keychain"
build/App.app: User interaction is not allowed.
Из этого может показаться, что списки-брелки - это то, что не работает. Может быть, ни работа. : /
Здесь есть похожий вопрос . Решение интересное - установите «SessionCreate» в true в launchctl. Но я не опираюсь на мастер - мой процесс сборки запускается из SSH на подчиненной сборочной машине. Может быть, есть способ командной строки сделать то, что делает launchctl, когда вы запускаете "SessionCreate"?