2013-08-15 24 views
7

Mam plan Bamboo, który buduje pakiet i chcę podpisać ten pakiet za pomocą mojego certyfikatu programisty. W moim skrypcie kompilacji mam to:Mac OS X - Udostępnianie certyfikatów Keychain dla Atlassian Bamboo

productsign --sign "Name of my certificate" "input.pkg" "output.pkg" 

Uruchomienie tego skryptu z wiersza poleceń działa zgodnie z oczekiwaniami. Jednak uruchomienie skryptu z bambusa, zawsze pojawia się błąd:

productsign: error: Could not find appropriate signing identity for "Name of my certificate" 

Przypuszczam, to musi być ze względu na kontekst, że skrypt kompilacji jest uruchamiany w przypadku uruchomienia z bambusa. Jak sprawić, by certyfikat był dostępny w Bamboo? Jest zainstalowany w System, a nie login.

Odpowiedz

2

Jeśli trzeba uruchomić Bamboo jak root, to musisz skopiować odpowiednie certyfikaty od logowania pęku kluczy w systemie pęk kluczy korzystając Dostęp do pęku kluczy (Aplikacje> Narzędzia).

Powiedziawszy to, lepiej byłoby uruchomić Bamboo jako użytkownika zamiast root. Na przykład. Jeśli musisz używać mobilnych profili udostępniania, aby podpisywać dowolne kompilacje systemu iOS na tym samym serwerze, pozycja root nie będzie działać.

+0

Jeśli używasz środka Bamboo od A LaunchDaemon można określić Bamboo uruchomić poprzez dodanie polu Nazwa użytkownika do plist LaunchDaemon ( nazwa_użytkownika Twoja nazwa użytkownika) – oggmonster

+0

mam agenta Bamboo skonfigurowany do uruchamiania jako LaunchDaemon i podano nazwę użytkownika jako dobrze, ale nadal 'xcodebuild' nie mógł uzyskać dostępu do kluczy w pęku kluczy. Musiałem przenieść klawisze z pęku kluczy 'login' na' System', który działał dla mnie. – i4niac

1

Czy próbowałeś przeprowadzić operację?

Ie:

sudo productsign --sign "Name of my certificate" "input.pkg" "output.pkg" 

Gdy klucz jest w pęku kluczy systemu (?, Które być może nie powinno być dla przypadku użycia), prawdopodobnie nie masz dostępu do niej jako „zwykłej” użytkownik, nawet jeśli [przez projekt] masz dostęp do znajdujących się w nim certyfikatów.

+0

Próbowałem już tego, ale niestety, dostałeś ten sam błąd – oggmonster

+0

To byłoby zbyt łatwe, prawda? Co powiesz na wyeksportowanie klucza i zaimportowanie go do pęku kluczy logowania? Jeśli CN, którego używasz do identyfikacji klucza, jest poprawny, nie ma innych rzeczy, które powinny stać na drodze do przetwarzania podpisu. –

0

Moja rekomendacja to przechowywanie kluczy w oddzielnym pęku kluczy. To znacznie ułatwi ich znalezienie i zarządzanie nimi. Po prostu utwórz nowy pęku kluczy i przenieś do niego swój certyfikat; przechowuj go w dogodnym miejscu. Następnie podpisuję rzeczy w ten sposób (używam codesign, ale --productsign jest taki sam). Nie buduję jako root, ani nie używam sudo do tego.

# Keychain that holds all the required signing certificates 
# To create a keychain like this, create it in "Keychain Access" and copy all your certificates into it 
# Then set its timeout to infinite (so it doesn't re-lock itself during the build): 
# security set-keychain-settings <path> 
# Passing no "-t" option means "no timeout." 
# Generally you should just be able to copy this file from build host to build host as needed. Then 
# add it to the available keychains using Keychain Access, File>Add Keychain…. If you don't add it to 
# Keychain Access, you'll receive signing error CSSMERR_TP_NOT_TRUSTED, since it won't recognize the 
# entire chain 
keychain=~/Library/Keychains/MyProduct.keychain 
keychain_password=somepassword # If you have one on the keychain 
cert_identifier='My Signing Name' 
... 

# We assume the keychain has an infinite timeout, so we just unlock it once here. 
if ! security unlock-keychain -p "${keychain_password}" ${keychain} ; then 
    echo "Cannot unlock keychain. Cannot sign on this host." 
    exit 1 
fi 

sign() 
{ 
    name=$1 ; shift 
    paths=$* 

    if ${sign} ; then 
    echo "** SIGNING $name **" 
    chmod u+w $paths 
    codesign --keychain ${keychain} -f -s ${cert_identifier} $paths 
    fi 
} 

sign "The Whole Package" something.pkg