2013-08-15 43 views
7

Tôi có gói tre xây dựng một gói và tôi muốn ký gói đó với chứng chỉ nhà phát triển của mình. Trong tập lệnh xây dựng của tôi, tôi có điều này:Mac OS X - Tạo Chứng chỉ Keychain có sẵn cho Atlassian Bamboo

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

Chạy tập lệnh này từ dòng lệnh hoạt động như mong đợi. Tuy nhiên, chạy kịch bản từ tre, tôi luôn nhận được lỗi:

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

Tôi đoán này phải là do bối cảnh xây dựng kịch bản được chạy trong khi chạy từ tre. Làm thế nào để làm cho chứng chỉ có thể sử dụng được trong Bamboo? Nó được cài đặt trong System, không phải login.

Trả lời

2

Nếu bạn cần phải chạy tre như root, sau đó bạn sẽ cần phải sao chép các chứng chỉ thích hợp từ đăng nhập keychain của bạn để hệ thống của bạn keychain sử dụng Keychain Access (Applications> Utilities).

Có nói rằng, có lẽ sẽ tốt hơn nếu bạn chạy Bamboo làm người dùng thay vì root. Ví dụ. nếu bạn cần sử dụng hồ sơ cấp phép di động để ký bất kỳ bản dựng iOS nào trên cùng một máy chủ, thì root sẽ không hoạt động.

+0

Nếu bạn đang chạy các đại lý tre từ một LaunchDaemon, bạn có thể chỉ định tre để chạy bằng cách thêm trường UserName để plist LaunchDaemon của bạn ( UserName yourusername) – oggmonster

+0

tôi có đại lý Bamboo cấu hình để khởi động như LaunchDaemon và tôi đã chỉ định UserName như tốt, nhưng vẫn 'xcodebuild' không thể truy cập các khóa trong keychain. Tôi đã phải di chuyển các phím từ 'đăng nhập 'keychain vào' Hệ thống', đã làm việc cho tôi. – i4niac

1

Bạn đã thử sudo'ing hoạt động chưa?

Ie:

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

Như chìa khóa là trong hệ thống keychain (? Mà có lẽ nó không nên đối với trường hợp sử dụng của bạn), bạn có thể không có quyền truy cập vào nó như là một 'bình thường' người dùng, mặc dù [theo thiết kế] bạn có quyền truy cập vào các chứng chỉ trong đó.

+0

Tôi đã thử điều này nhưng rất tiếc, bạn gặp lỗi tương tự – oggmonster

+0

Điều đó có thể quá dễ dàng, phải không? Điều gì về việc xuất khóa và nhập lại khóa vào keychain đăng nhập? Nếu CN bạn đang sử dụng để xác định khóa là chính xác, có rất ít người khác nên đứng trong cách xử lý chữ ký. –

0

Đề xuất của tôi là lưu trữ các khóa bạn cần trong một keychain riêng biệt. Điều đó sẽ giúp bạn tìm thấy chúng dễ dàng hơn và quản lý chúng. Chỉ cần tạo một keychain mới và di chuyển cert của bạn vào nó; lưu trữ nó ở đâu đó thuận tiện. Sau đó, tôi ký mọi thứ theo cách này (Tôi đang sử dụng codesign, nhưng --productsign là giống nhau). Tôi không xây dựng như là người chủ, cũng không phải tôi sử dụng sudo cho việc này.

# 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