2013-08-15 5 views
7

パッケージをビルドするBambooプランがあります。そのパッケージを開発者証明書で署名したいと思います。私のビルドスクリプトでは、私はこれを持っています:Mac OS X - Atlassian Bambooでキーチェーン証明書を利用できるようにする

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

このスクリプトをコマンドラインから実行すると、期待どおりに動作します。私はこれが原因でビルドスクリプトは、竹から実行したときに実行されるコンテキストでなければならないと推定

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

:しかし、竹からスクリプトを実行している、私は常にエラーを取得します。 Bambooで証明書を使用できるようにするにはどうすればよいですか? loginではなく、Systemにインストールされています。

答えて

2

あなたはrootとして竹を実行する必要がある場合は、キーチェーンアクセス(アプリケーション>ユーティリティ)を使用してシステムキーチェーンにあなたのログインキーチェーンから適切な証明書をコピーする必要があります。

これは、rootの代わりにBambooをユーザーとして実行する方がいいでしょう。例えば。モバイルプロビジョニングプロファイルを使用して同じサーバー上のiOSビルドに署名する必要がある場合は、rootは機能しません。

+0

ユーザー名あなたのユーザ名) – oggmonster

+0

私は竹のエージェントが起動するように設定していますまあ、 'xcodebuild'はキーチェーンのキーにアクセスできませんでした。私は 'login'キーチェーンから' System'にキーを移動しなければなりませんでした。 – i4niac

1

操作をsudoしてみましたか?

すなわち:

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

キーはシステムキーチェーン(これは多分それはあなたのユースケースのためにすべきではない?)であるとして、あなたはおそらく「定期的」とそれへのアクセスを持っていませんたとえ[設計通り]であれば、その証明書にアクセスすることができます。

+0

右、私はすでにこれをしようとしたが、残念ながら、あなたはあまりにも簡単だっただろうと同じエラー – oggmonster

+0

を取得しますか? キーのエクスポートとログインキーチェーンへのインポートについてはどうですか?鍵を識別するために使用しているCNが正しい場合は、署名処理の途中に立つ必要があります。 LaunchDaemonと私のようにユーザー名を指定して、あなたがLaunchDaemonから竹のエージェントを実行している場合、あなたはLaunchDaemon plistをするには、usernameフィールドを追加することによって実行するために竹を指定することができます –

0

必要なキーを別のキーチェーンに保存することをお勧めします。そうすれば、それらを見つけて管理するのがずっと簡単になります。新しいキーチェーンを作成し、証明書をその中に移動してください。どこか便利な場所に保管してください。それから、私はこの方法で署名します(私はcodesignを使っていますが、--productsignは同じです)。私はrootとしてビルドしていないし、sudoを使っていない。

# 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 
関連する問題