2013-08-15 6 views
7

Ho un piano Bamboo che crea un pacchetto e voglio firmare quel pacchetto con il mio certificato sviluppatore. Nel mio script di build, ho questo:Mac OS X - Rendere i certificati portachiavi disponibili per Atlassian Bamboo

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

L'esecuzione di questo script dalla riga di comando funziona come previsto. Tuttavia, l'esecuzione dello script da bambù, ho sempre arrivare l'errore:

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

Presumo che questo deve essere a causa del contesto che lo script di build viene eseguito in quando viene eseguito da bambù. Come posso rendere il certificato utilizzabile in Bamboo? È installato in System, non login.

risposta

2

Se avete bisogno di eseguire bambù come root, allora avrete bisogno di copiare i certificati appropriati dal login portachiavi per la vostra sistema portachiavi utilizzando Accesso Portachiavi (Applicazioni> Utility).

Detto questo, probabilmente sarebbe meglio eseguire Bamboo come utente anziché root. Per esempio. se hai bisogno di utilizzare i profili di provisioning mobile per firmare qualsiasi build iOS sullo stesso server, essere root non funzionerà.

+0

Se si esegue l'agente di bambù da un LaunchDaemon, è possibile specificare di bambù per eseguire aggiungendo il campo nome utente al tuo plist LaunchDaemon ( UserName yourusername) – oggmonster

+0

ho agente di bambù configurato in modo da lanciare come LaunchDaemon e ho specificato UserName come bene, ma ancora 'xcodebuild' non ha potuto accedere alle chiavi nel portachiavi. Ho dovuto spostare le chiavi dal portachiavi 'login' a' System', che funzionava per me. – i4niac

1

Hai provato a eseguire l'operazione?

Ie:

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

Come la chiave è nel portachiavi di sistema (? Che forse non dovrebbe essere per il vostro caso d'uso), è probabile che non si ha accesso ad esso come un 'regolare' utente, anche se [design] hai accesso ai certificati in esso contenuti.

+0

Avevo già provato questo, ma purtroppo, si ottiene lo stesso errore – oggmonster

+0

che sarebbe stato troppo facile, giusto? Cosa ne pensi dell'esportazione della chiave e dell'importazione nel portachiavi di accesso? Se la CN che stai usando per identificare la chiave è corretta, c'è poco altro che dovrebbe ostacolare l'elaborazione della firma. –

0

Il mio consiglio è quello di memorizzare le chiavi necessarie in un portachiavi separato. Ciò renderà molto più facile trovarli e gestirli. Basta creare un nuovo portachiavi e spostare il tuo cert in esso; conservalo in un posto conveniente. Quindi firmo le cose in questo modo (sto usando codesign, ma --productsign è lo stesso). Non costruisco come root, né utilizzo sudo per questo.

# 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