2013-08-15 4 views
7

J'ai un plan Bamboo qui construit un paquet, et je veux signer ce paquet avec mon certificat de développeur. Dans mon script de génération, j'ai ceci:Mac OS X - Rendre les certificats de trousseau disponibles pour Atlassian Bamboo

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

L'exécution de ce script à partir de la ligne de commande fonctionne comme prévu. Cependant, l'exécution du script de bambou, je reçois toujours l'erreur:

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

Je suppose que ce doit être à cause du contexte que le script de compilation est exécuté dans lorsqu'il est exécuté à partir de bambou. Comment puis-je rendre le certificat utilisable dans Bamboo? Il est installé dans System, et non login.

Répondre

2

Si vous devez exécuter Bamboo comme root, vous devrez copier les certificats appropriés de votre connexion porte-clés à votre système porte-clés en utilisant Trousseau d'accès (Applications> Utilitaires). Cela dit, il serait probablement préférable d'exécuter Bamboo en tant qu'utilisateur au lieu de root. Par exemple. Si vous devez utiliser des profils de provisionnement mobiles pour signer des builds iOS sur le même serveur, être root ne fonctionnera pas.

+0

Si vous utilisez l'agent Bamboo d'un LaunchDaemon, vous pouvez spécifier Bamboo pour exécuter en ajoutant le champ UserName à votre LaunchDaemon plist ( UserName votrenomutilisateur) – oggmonster

+0

Je agent de bambou configuré pour lancer comme LaunchDaemon et je spécifié USERNAME Eh bien, mais toujours 'xcodebuild' n'a pas pu accéder aux clés dans le trousseau. J'ai dû déplacer les clés de 'login' keychain à' System', cela a fonctionné pour moi. – i4niac

1

Avez-vous essayé de faire l'opération avec sudo?

Ie:

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

Comme la clé est dans le trousseau système (? Qui peut-être il ne devrait pas être votre cas d'utilisation), vous n'avez pas susceptibles d'avoir accès à elle comme un « régulier » utilisateur, même si [par conception] vous avez accès aux certificats.

+0

J'avais déjà essayé ceci mais malheureusement, vous obtenez la même erreur – oggmonster

+0

Cela aurait été trop facile, non? Qu'en est-il de l'exportation de la clé et de son réimportation dans le trousseau de connexion? Si la CN que vous utilisez pour identifier la clé est correcte, il y a peu d'autre chose qui devrait faire obstacle au traitement de la signature. –

0

Ma recommandation est de stocker les clés dont vous avez besoin dans un porte-clés séparé. Cela rendra beaucoup plus facile de les trouver et de les gérer. Créez simplement un nouveau trousseau et déplacez votre CERT dans celui-ci. rangez-le quelque part pratique. Puis je signe les choses de cette façon (j'utilise codesign, mais --productsign est la même chose). Je ne compile pas en root, et je n'utilise pas sudo pour ça.

# 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