2011-06-20 10 views
30

Używam serwera CI Jenkins na komputerze z systemem OS X. Serwer działa jako standardowy użytkownik "john" i jest uruchamiany przez uruchomienie programu launchctl. Jedną z rzeczy, którą robi ten serwer, jest budowanie projektów XCode za pomocą kluczy i certyfikatów przechowywanych w pęku kluczy "xcode.keychain":Keychain nie odblokuje się ze skryptu Jenkins, chyba że użytkownik jest zalogowany

Jenkins (który działa pod użytkownikiem "john" według monitora aktywności) wywołuje te polecenia z poziomu skrypt, gdy użytkownik naciśnie przycisk w interfejsie internetowym.

security default-keychain -s /Users/john/Library/Keychains/xcode.keychain 
security unlock-keychain -p password /Users/john/Library/Keychains/xcode.keychain 
xcodebuild ... 

Jeśli zdarza mi się być zalogowany na serwerze jako „John” za pośrednictwem interfejsu użytkownika, keychain zostaje odblokowany prawidłowo gdy Jenkins zwraca te polecenia. Ale jeśli nie jestem zalogowany, xcode.keychain nie zostanie odblokowany i kompilacja nie powiedzie się. Jakieś pomysły?

+3

Moving wszystkie klucze i certyfikatów do System.keychain stałe ten problem. Zgaduję, że ma to coś wspólnego z Jenkinsem, który pracuje z launchctl, ale wciąż ciekaw, dlaczego dokładnie to nie działało wcześniej. –

+0

Jak dokładnie to zrobiłeś? Próbowałem powtórzyć twoje rozwiązanie, ale nadal dostaję błąd :( – Zsub

+0

YMMV, ale właśnie przeniosłem moje klucze i certyfikaty do pęku kluczy systemu zgodnie z zaleceniami powyżej i zadziałało to dla mnie. – makdad

Odpowiedz

5

Uruchamianie Jenkins bez uruchomionych prac. Użyłem następującej komendy:

sudo su jenkins -c "JENKINS_HOME=/Users/Shared/Jenkins/Home /Library/Application\ Support/Jenkins/jenkins-runner.sh" 
0

można spróbować Jenkins.app, alternatywny sposób prowadzenia Jenkins. Działa Jenkins podczas sesji użytkownika, więc Keychain nie powinien stanowić problemu.

8

musiałem:

  1. prawym przyciskiem myszy na klucz prywatny w moim pęku kluczy, że mój proces budowania próbował użyć
  2. Kliknij „Get Info”
  3. następnie „Access Control” patka.
  4. Możesz dodawać określone aplikacje (takie jak "codesign") do listy aplikacji, którym mają dostęp do tego klucza, lub po prostu zezwalaj na dostęp ze wszystkich aplikacji.

To mi wyjaśniło.

Więcej informacji w tych komentarzach: https://stackoverflow.com/a/12235462/544130 https://stackoverflow.com/a/14761060/544130