Jenkins trên OS X: xcodebuild mắc lỗi Ký mã


107

Tóm lược:

Việc thiết lập Jenkins trên OS X đã trở nên dễ dàng hơn đáng kể với trình cài đặt gần đây nhất ( kể từ 1.449 - ngày 9 tháng 3 năm 2012 ), tuy nhiên việc quản lý quá trình ký mã vẫn rất khó khăn và không có câu trả lời đơn giản.

Động lực:

Chạy một máy chủ CI không có đầu tuân theo các phương pháp hay nhất phổ biến để chạy các dịch vụ trên OS X ( Một số trong số đó được giải thích ở đây bằng ngôn ngữ đơn giản ).

Lý lịch:

Quá trình:

Cài đặt Jenkins CI qua OS X gói cài đặt . Đối với bước "Loại cài đặt", hãy nhấp vào nút Tùy chỉnh và chọn "Bắt đầu khi khởi động với tên 'jenkins.'"

Thảo luận:

Kỳ vọng ngây thơ vào thời điểm này là một dự án theo phong cách tự do với kịch bản xây dựng xcodebuild -target MyTarget -sdk iphoneossẽ hoạt động. Như được chỉ ra bởi tiêu đề của bài đăng này, nó không và không thành công với:

Code Sign error: The identity 'iPhone Developer' doesn't match any valid certificate/private key pair in the default keychain

Rõ ràng là những gì cần phải xảy ra - bạn cần thêm chứng chỉ ký mã hợp lệ và khóa cá nhân vào chuỗi khóa mặc định. Trong quá trình nghiên cứu cách thực hiện điều này, tôi đã không tìm thấy giải pháp nào không mở ra hệ thống ở một mức độ dễ bị tổn thương nào đó.

Vấn đề 1: Không có chuỗi khóa mặc định cho daemon jenkins

sudo -u jenkins security default-keychain ... cho ra "Không tìm thấy chuỗi khóa mặc định"

Như đã chỉ ra bên dưới bởi Ivo Dancet , UserShell được đặt thành / usr / bin / false cho daemon jenkins theo mặc định (tôi nghĩ đây là một tính năng, không phải lỗi); làm theo câu trả lời của anh ấy để thay đổi UserShell thành bash. Sau đó, bạn có thể sử dụng sudo su jenkinsđể đăng nhập với tư cách người dùng jenkins và nhận được lời nhắc bash.

  1. sudo su jenkins
  2. cd ~/Library
  3. mkdir Keychains
  4. cd Keychains
  5. security create-keychain <keychain-name>.keychain
  6. security default-keychain -s <keychain-name>.keychain

Rất tốt. Bây giờ chúng tôi đã có một chuỗi khóa mặc định; chúng ta hãy tiếp tục phải không? Nhưng, trước tiên, tại sao chúng tôi thậm chí còn bận tâm tạo một chuỗi khóa mặc định?

Hầu hết tất cả các câu trả lời, đề xuất hoặc cuộc trò chuyện mà tôi đã đọc trong suốt quá trình nghiên cứu đều gợi ý rằng người ta chỉ nên đưa các chứng chỉ và khóa ký mã của họ vào chuỗi khóa hệ thống. Nếu bạn chạy security list-keychainsnhư một dự án kiểu tự do trong Jenkins, bạn thấy rằng chuỗi khóa duy nhất có sẵn là chuỗi khóa hệ thống; Tôi nghĩ rằng đó là nơi mà hầu hết mọi người nảy ra ý tưởng đặt chứng chỉ và chìa khóa của họ vào đó. Tuy nhiên, đây có vẻ là một ý tưởng rất tồi - đặc biệt là bạn sẽ cần phải tạo một tập lệnh văn bản thuần túy với mật khẩu để mở chuỗi khóa .

Vấn đề 2: Thêm chứng chỉ ký mã và khóa cá nhân

Đây là nơi tôi thực sự bắt đầu cảm thấy khó chịu. Tôi có cảm giác rằng tôi nên tạo một khóa công khai / riêng tư mới duy nhất để sử dụng với Jenkins. Quá trình suy nghĩ của tôi là nếu daemon jenkins bị xâm phạm, thì tôi có thể dễ dàng thu hồi chứng chỉ trong Cổng cấp phép của Apple và tạo một khóa công khai / riêng tư khác. Nếu tôi sử dụng cùng một khóa và chứng chỉ cho tài khoản người dùng của mình và Jenkins, thì điều đó có nghĩa là rắc rối hơn (thiệt hại?) Nếu dịch vụ jenkins bị tấn công.

Chỉ vào câu trả lời của Simon Urbanek, bạn sẽ mở khóa chuỗi khóa từ một tập lệnh với mật khẩu văn bản thuần túy. Có vẻ như vô trách nhiệm khi giữ bất cứ thứ gì ngoại trừ các chứng chỉ và chìa khóa "dùng một lần" trong móc khóa của jenkins daemon.

Tôi rất quan tâm đến bất kỳ cuộc thảo luận nào ngược lại. Tôi có đang thận trọng quá mức không?

Để tạo CSR mới dưới dạng daemon jenkins trong Terminal, tôi đã làm như sau ...

  1. sudo su jenkins
  2. certtool r CertificateSigningRequest.certSigningRequest Bạn sẽ được nhắc về những điều sau đây (hầu hết những điều này tôi đã phỏng đoán có học thức để đưa ra câu trả lời chính xác; bạn có cái nhìn sâu sắc hơn không? Vui lòng chia sẻ.) ...
    • Nhập khóa và nhãn chứng chỉ:
    • Chọn thuật toán: r(cho RSA)
    • Nhập kích thước khóa theo bit: 2048
    • Chọn thuật toán chữ ký: 5(cho MD5)
    • Nhập chuỗi thử thách:
    • Sau đó, một loạt các câu hỏi cho RDN
  3. Gửi tệp CSR đã tạo (CertificateSignedRequest.certSignsRequest) tới Cổng cấp phép của Apple theo ID Apple mới
  4. Phê duyệt yêu cầu và tải xuống tệp .cer
  5. security unlock-keychain
  6. security add-certificate ios_development.cer

Điều này đưa chúng ta đến gần hơn một bước ...

Sự cố 3: Hồ sơ cấp phép và mở khóa chuỗi khóa

Tôi đã tạo một hồ sơ cấp phép đặc biệt trong Cổng cung cấp chỉ để sử dụng với CI với hy vọng rằng nếu điều gì đó xấu xảy ra, tôi sẽ làm cho tác động nhỏ hơn một chút. Thực hành tốt nhất hay thận trọng quá mức?

  1. sudo su jenkins
  2. mkdir ~/Library/MobileDevice
  3. mkdir ~/Library/MobileDevice/Provisioning\ Profiles
  4. Di chuyển hồ sơ cấp phép mà bạn thiết lập trong Cổng cấp phép vào thư mục mới này. Bây giờ chúng ta chỉ còn hai bước ngắn nữa là có thể chạy xcodebuild từ dòng lệnh dưới dạng jenkins và điều đó có nghĩa là chúng ta cũng sắp có thể chạy các bản dựng Jenkins CI.
  5. security unlock-keychain -p <keychain password>
  6. xcodebuild -target MyTarget -sdk iphoneos

Bây giờ chúng ta có một bản dựng thành công từ một dòng lệnh khi đăng nhập bằng daemon jenkins, vì vậy nếu chúng ta tạo một dự án kiểu tự do và thêm hai bước cuối cùng đó (# 5 và # 6 ở trên), chúng ta sẽ có thể tự động hóa việc xây dựng dự án iOS của chúng tôi!

Nó có thể không cần thiết, nhưng tôi cảm thấy tốt hơn nên đặt jenkins UserShell trở lại / usr / bin / false sau khi tôi đã nhận thành công tất cả thiết lập này. Tôi có bị hoang tưởng không?

Sự cố 4: Chuỗi khóa mặc định vẫn không khả dụng!

( CHỈNH SỬA: Tôi đã đăng các chỉnh sửa cho câu hỏi của mình, khởi động lại để đảm bảo rằng giải pháp của tôi là 100% và tất nhiên, tôi đã bỏ qua một bước )

Ngay cả sau tất cả các bước trên, bạn sẽ cần phải sửa đổi danh sách Launch Daemon tại /Library/LaunchDaemons/org.jenkins-ci.plist như đã nêu trong câu trả lời này . Xin lưu ý rằng đây cũng là một lỗi openrdar .

Nó sẽ giống như thế này:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>EnvironmentVariables</key>
        <dict>
                <key>JENKINS_HOME</key>
                <string>/Users/Shared/Jenkins/Home</string>
        </dict>
        <key>GroupName</key>
        <string>daemon</string>
        <key>KeepAlive</key>
        <true/>
        <key>Label</key>
        <string>org.jenkins-ci</string>
        <key>ProgramArguments</key>
        <array>
                <string>/bin/bash</string>
                <string>/Library/Application Support/Jenkins/jenkins-runner.sh</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
        <key>UserName</key>
        <string>jenkins</string>
        <!-- **NEW STUFF** -->
        <key>SessionCreate</key>
        <true />
</dict>
</plist>

Với thiết lập này, tôi cũng muốn giới thiệu plugin Xcode cho Jenkins , giúp thiết lập tập lệnh xcodebuild dễ dàng hơn một chút. Tại thời điểm này, tôi cũng khuyên bạn nên đọc các trang người đàn ông cho xcodebuild - bạn đã làm được điều đó đến mức này trong Terminal, phải không?

Thiết lập này không hoàn hảo và bất kỳ lời khuyên hoặc thông tin chi tiết nào đều được đánh giá cao.

Tôi đã gặp khó khăn khi chọn một câu trả lời "đúng" vì những gì tôi thường sử dụng để giải quyết vấn đề của mình là một tập hợp tất cả mọi người. Tôi đã cố gắng đưa ra cho mọi người ít nhất một phiếu ủng hộ, nhưng trao câu trả lời cho Simon vì anh ấy chủ yếu trả lời câu hỏi ban đầu. Hơn nữa, Sami Tikka xứng đáng được ghi nhận rất nhiều vì những nỗ lực của anh ấy đã khiến Jenkins hoạt động thông qua AppleScript như một ứng dụng OS X đơn giản. Nếu bạn chỉ quan tâm đến việc Jenkins khởi động và tiến hành nhanh chóng trong phiên người dùng của mình (tức là không phải là một máy chủ không đầu) thì giải pháp của anh ấy giống Mac hơn nhiều.

Tôi hy vọng rằng những nỗ lực của tôi sẽ khơi dậy cuộc thảo luận sâu hơn và giúp những người nghèo tiếp theo nghĩ rằng họ có thể thiết lập Jenkins CI cho các dự án iOS của họ trong một ngày cuối tuần vì tất cả những điều tuyệt vời mà họ đã nghe về nó.


Cập nhật: ngày 9 tháng 8 năm 2013

Với rất nhiều lượt ủng hộ và yêu thích, tôi nghĩ rằng tôi sẽ quay trở lại nơi này 18 tháng sau với một số bài học kinh nghiệm ngắn gọn.

Bài học 1: Đừng để Jenkins tiếp xúc với internet công cộng

Tại WWDC 2012, tôi đã đưa câu hỏi này đến các kỹ sư Xcode và OS X Server. Tôi đã nhận được một tràng nhạc "đừng làm vậy!" từ bất kỳ ai tôi đã hỏi. Tất cả đều đồng ý rằng quá trình xây dựng tự động là rất tốt, nhưng máy chủ chỉ nên truy cập được trên mạng cục bộ. Các kỹ sư của OS X Server đề xuất cho phép truy cập từ xa qua VPN.

Bài 2: Hiện có các tùy chọn cài đặt mới

Gần đây, tôi đã nói chuyện với CocoaHeads về trải nghiệm Jenkins của mình và tôi rất ngạc nhiên khi tìm thấy một số phương pháp cài đặt mới - Homebrew và thậm chí là phiên bản Bitnami Mac App Store . Đây chắc chắn là những thứ đáng để kiểm tra. Jonathan Wright có một ý chính chi tiết để Homebrew Jenkins hoạt động .

Bài học 3: Không, nghiêm túc, không để lộ hộp xây dựng của bạn lên internet

Từ bài đăng ban đầu, khá rõ ràng rằng tôi không phải là quản trị viên hệ thống hay chuyên gia bảo mật. Cảm giác chung về những thứ riêng tư (móc khóa, thông tin đăng nhập, chứng chỉ, v.v.) khiến tôi cảm thấy khá bất an khi đưa hộp Jenkins của mình lên internet. Nick Arnott tại Tiềm năng bị lãng quên đã có thể xác nhận khá dễ dàng những người yêu thích của tôi trong bài viết này .

TL; DR

Đề xuất của tôi cho những người khác đang tìm cách tự động hóa quy trình xây dựng của họ đã thay đổi trong năm rưỡi qua. Đảm bảo rằng máy Jenkins của bạn nằm sau tường lửa của bạn. Cài đặt và thiết lập Jenkins trở thành người dùng Jenkins chuyên dụng bằng cách sử dụng trình cài đặt, phiên bản Bitnami Mac App Store, AppleScript của Sami Tikka, v.v.; điều này giải quyết hầu hết các vấn đề mà tôi đã trình bày ở trên. Nếu bạn cần truy cập từ xa, việc thiết lập dịch vụ VPN trong OS X Server mất mười phút. Tôi đã sử dụng thiết lập này hơn một năm và rất hài lòng với nó. Chúc may mắn!


10
Tôi buồn tôi chỉ có thể cung cấp cho một phiếu bầu tán thành để súc tích này và hoàn thành câu hỏi-với-câu trả lời-sửa-in :)
Zsub

Có điều gì đó đã phá vỡ sự ra mắt của Jenkins trên OS X Yosemite - đã sử dụng trình cài đặt của Jenkins.
Jonny

Di chuyển chứng chỉ của bạn để keychain hệ thống và được hạnh phúc;)
Julian F. Weinert

Câu trả lời:


30

Móc khóa cần được mở khóa trước khi có thể sử dụng. Bạn có thể sử dụng security unlock-keychainđể mở khóa. Bạn có thể làm điều đó một cách tương tác (an toàn hơn) hoặc bằng cách chỉ định mật khẩu trên dòng lệnh (không an toàn), ví dụ:

security unlock-keychain -p mySecretPassword...

Rõ ràng, việc đưa điều này vào tập lệnh sẽ ảnh hưởng đến tính bảo mật của chuỗi khóa đó, vì vậy, mọi người thường thiết lập một chuỗi khóa cá nhân chỉ với thông tin xác thực ký tên để giảm thiểu thiệt hại đó.

Thông thường trong Terminalchuỗi khóa đã được mở khóa theo phiên của bạn, vì chuỗi khóa mặc định được mở khóa khi đăng nhập, vì vậy bạn không cần phải làm điều đó. Tuy nhiên, bất kỳ quy trình nào không chạy trong phiên của bạn sẽ không có chuỗi khóa được mở khóa ngay cả khi có bạn là người dùng (điều này thường ảnh hưởng nhất ssh, nhưng cũng ảnh hưởng đến bất kỳ quy trình nào khác).


Tuy nhiên, tôi cũng gặp khó khăn khi tải bất kỳ chuỗi khóa nào ngoài chuỗi khóa hệ thống. security unlock-keychain -p password -k /path/codesign.keychainkhông hoạt động.
edelaney05

Bạn đã sử dụng chuỗi khóa mặc định như trong ví dụ của tôi ở trên chưa? Lưu ý rằng đối với móc khóa tùy chỉnh, trước tiên bạn cần thiết lập để chúng có trên đường dẫn tìm kiếm, vì vậy hãy thử móc khóa mặc định trước. Cũng lưu ý rằng không có -ktranh luận nào để unlock-keychainbất cứ điều gì bạn đang cố gắng làm dường như không đúng (xem security help unlock-keychain).
Simon Urbanek

Tôi đã thử một cái gì đó hơi khác một chút, nhưng cuối cùng đều trở lại cùng một chỗ. Tôi đã chỉnh sửa câu hỏi của mình, hy vọng nó rõ ràng hơn một chút?
edelaney05

Nó hoàn toàn khác với câu hỏi ban đầu ... Để bắt đầu, bạn nên đăng nhập bằng jenkins (ví dụ: qua sudo -u jenkins bash) và kiểm tra xem bạn có quyền trên toàn bộ đường dẫn hay không. Bạn đã làm rất nhiều điều bạn không nói (như sử dụng dsclđể tạo người dùng) vì vậy bạn thực sự là của riêng mình. Bạn cũng sẽ muốn kiểm tra cài đặt chính (tùy thuộc vào việc bạn đặt shell hay không mà bạn có thể sử dụng sudo -u jenkins -iđể nhận cài đặt đăng nhập tương ứng).
Simon Urbanek

12

Giả sử bạn cũng muốn thực hiện phân phối đặc biệt thông qua Jenkins, điều này đòi hỏi Jenkins phải có quyền truy cập vào chứng chỉ Phân phối và danh tính quản trị viên nhóm, ngoài các cấu hình cấp phép.

Sử dụng danh tính đã xuất trong tệp .cer, bạn có thể nhập theo chương trình như vậy, công tắc -A cho phép tất cả các chương trình truy cập vào mục này. Ngoài ra, bạn có thể sử dụng một số -T /path/to/programcông tắc để cho phép codesignxcodebuildtruy cập:

$ security import devcertificate.cer -k jenkins.keychain -A

Tất nhiên, chúng ta cũng nên có chứng chỉ WWDCRA của Apple, được nhập theo cách tương tự:

$ security import AppleWWDRCA.cer -k jenkins.keychain -A

Tuy nhiên, chúng tôi cũng cần khóa riêng cho devcertificate.cer. Để thực hiện việc này, bạn cần xuất khóa cá nhân tương ứng dưới dạng khóa .p12 và đặt mật khẩu. Đặt nó ở nơi nào đó mà bạn có thể truy cập từ vỏ Jenkins của mình, mở khóa chuỗi khóa và nhập nó:

$ security unlock-keychain -p YourKeychainPass jenkins.keychain
$ security import devprivatekey.p12 -k login.keychain -P ThePasswordYouSetWhenExporting -A

Việc nhập chứng chỉ phân phối hoạt động theo cùng một cách. Tôi không biết tại sao bạn cần mở khóa chuỗi khóa để nhập .p12 chứ không phải .cer, nhưng tốt.

Bạn cũng sẽ cần quyền truy cập vào các cấu hình cấp phép, tôi sẽ sớm chỉnh sửa các hướng dẫn đó vào bài đăng này.


1
Bạn có thể vui lòng cập nhật hướng dẫn truy cập hồ sơ cấp phép không?
Luke

Xem modeet.com/what-we-know/2013/03/11/jenkins_keychain_timeouts để biết cách tiếp cận liên quan.
Gili

5

Tôi đã gặp vấn đề tương tự và đã tìm kiếm câu trả lời trong một thời gian. Đây là một điều mà tôi đã học được.

Tôi đang chạy jenkins với tư cách là người dùng jenkins, người dùng được tạo bởi trình cài đặt và như những người khác đã đề cập, anh ta không có quyền truy cập vào chuỗi khóa giống như người dùng bình thường của bạn. Thay vì cố gắng đăng nhập với tư cách người dùng jenkins, tôi đã tạo một dự án xây dựng thứ hai chỉ đơn giản có một bước xây dựng là "Thực thi Shell", trong đó tôi chạy các lệnh mà tôi muốn kiểm tra với tư cách là người dùng jenkins.

Sau khi thiết lập xong, tôi có thể chạy lệnh

security list-keychains

Và điều này tiết lộ cho tôi rằng thứ duy nhất mà jenkins có thể thấy là chuỗi khóa hệ thống.

+ security list-keychains
    "/Library/Keychains/System.keychain"
    "/Library/Keychains/System.keychain"

Với kiến ​​thức đó, tôi sau đó mở ứng dụng Keychain Access và sao chép chứng chỉ "Nhà phát triển iPhone: xxxx" của tôi vào chuỗi khóa Hệ thống (Nhấp chuột phải, sao chép từ chuỗi khóa "đăng nhập").

Điều này đã giúp tôi vượt qua lỗi ký mã cặp khóa cá nhân / chứng chỉ nhưng lại mở ra một lỗi khác với hồ sơ cấp phép (có vẻ như một vấn đề tương tự, nhưng khác,).


Tôi đang gặp phải cùng một vấn đề về hồ sơ cung cấp, bất kỳ suy nghĩ nào về cách giải quyết vấn đề này?
Santthosh

2
Tôi nhận thấy rằng các cấu hình cấp phép cho người dùng Jenkins được lưu trữ trong '/ Users / Shared / Jenkins / Library / MobileDevice / Provisinstall Profiles' và do đó, hãy thực hiện một bước trong bản dựng của tôi để sao chép cấu hình cấp phép từ bên trong git repo của tôi đến vị trí đó. Điều này cho phép tôi cập nhật hồ sơ cung cấp và đẩy nó vào SCM và Jenkins tự động nhận thay đổi đó.
brianestey

nếu bạn sao chép login.keychain để Jenkins của bạn thư viện Keychain bạn sẽ cần phải chown nó nên Jenkins dùng unlock lon an ninh nó
ganoro

1
Bạn là những anh hùng, tôi đã xé tóc trên đầu tôi trong 2 ngày, sao chép Certs vào hệ thống đã giúp
La Mã Bobelyuk

5

Để thay đổi mật khẩu bạn có thể sử dụng sudo passwd jenkins <new-pw>. Tuy nhiên, tôi nghĩ sẽ tốt hơn nếu sử dụng lệnh dscl để thay đổi mật khẩu.

Trong bản cài đặt jenkins (trình cài đặt chính thức) của tôi có user shell / usr / bin / false. Thay đổi nó thành bash đã giải quyết được vấn đề không thể đăng nhập:

sudo dscl . -change /Users/jenkins UserShell /usr/bin/false /bin/bash

Bây giờ bạn có thể đăng nhập với su jenkins.


Điều này rất hữu ích đối với tôi - Tôi đã gặp sự cố tương tự với create-keychainlệnh không hoạt động với người dùng jenkins. Chạy lệnh này dường như khắc phục được sự cố.
tiếp theo

Khi tôi chạy lệnh thay đổi mật khẩu người dùng jenkins, tôi được yêu cầu nhập mật khẩu hiện tại. Tôi không biết đây là gì và tôi không thể nhấn enter. Bất kỳ đề xuất?
CMVR

4

Tôi đã sử dụng plugin Xcode để tạo ứng dụng iOS. Trong cấu hình của một dự án.

chọn Thêm bước xây dựng> Xcode> ký mã & tùy chọn chuỗi khóa OS X.

đánh dấu vào hộp Mở khóa chuỗi khóa và thêm vào như sau (ví dụ) nhập mô tả hình ảnh ở đây

đôi khi, nếu tôi gặp lỗi

Lỗi ký mã: ...

Tôi sẽ mở lại Jenkins và nhập lại mật khẩu để mở khóa


3

Đối với những người gặp sự cố với móc khóa, tôi khuyên bạn nên thử trình cài đặt Jenkins thay thế của tôi tại https://github.com/stisti/jenkins-app , tải xuống tại https://github.com/stisti/jenkins-app/downloads

Jenkins.app chạy Jenkins trong phiên người dùng của bạn, vì vậy vấn đề truy cập chuỗi khóa không phải là vấn đề :)


Điều đáng quan tâm là người dùng Jenkins này đang ở trong không gian người dùng chứ không phải không gian daemon ... vì vậy nếu kẻ tấn công có thể xâm phạm người dùng Jenkins của bạn, họ sẽ có toàn quyền truy cập vào máy tính của bạn.
edelaney05

Điều này có thể giải quyết các vấn đề tôi đang gặp phải. Vấn đề là tôi có một bản cài đặt Jenkins hiện có (được thực hiện theo cách khác) và tôi không muốn mất tất cả các bản dựng của mình - v.v. Điều gì sẽ xảy ra trong casE của tôi?
Mike S

2

Nếu bạn có sudo, bạn có thể sử dụng passwd để thay đổi mật khẩu của người dùng Jenkins. Sau đó, bạn có thể lấy mật khẩu Jenkins.

Ngoài ra, tôi không chắc đây có phải là vấn đề với bạn hay không, nhưng ANT Script tôi sử dụng qua Jenkins có điều này:

<target name="unlock_keychain">
    <exec executable="security">
        <arg value="-v"/>
        <arg value="unlock-keychain"/>          
        <arg value="-p"/>
        <arg value="<My Password>"/>
        <arg value="/Users/macbuild/Library/Keychains/login.keychain"/>
    </exec>
</target>

1
Có vẻ như bạn đã thiết lập Jenkins với người dùng "macbuild"; Tôi giả định rằng người dùng này là người dùng chứ không phải daemon. Tôi chắc chắn hiểu (bây giờ) rằng chuỗi khóa sẽ cần được mở khóa thông qua args dòng lệnh (xem nhận xét của Simon Urbanek), nhưng tôi vẫn không chắc chắn về cách tạo chuỗi khóa mặc định cho daemon jenkins.
edelaney05

1

Vì lý do nào đó, tiện ích "bảo mật" không hoạt động với tôi trên Lion với cài đặt Jenkins mới.

Sau "sudo su jenkins", nó có thể tạo chuỗi khóa mới, nhưng im lặng bỏ qua tất cả các lệnh "default-keychain -s ..." hoặc "mở khóa" trả về trạng thái không thoát và không in gì vào bảng điều khiển. Danh sách móc khóa mặc định hoặc đăng nhập không có gì, danh sách tìm kiếm móc khóa chỉ chứa chuỗi khóa hệ thống và tôi không thể thay đổi điều này bất cứ điều gì tôi nhập.

Sau khi tôi đăng nhập vào máy tính của người dùng đó và khởi chạy Tiện ích chuỗi khóa, nó đã hiển thị chuỗi khóa đã tạo của tôi và sau đó mọi thứ hoạt động như mô tả trong các bài viết trên.

Tôi đang tự hỏi liệu một số hành vi móc khóa ban đầu đã thay đổi ở Sư tử, hay tôi đang thiếu thứ gì đó?


Tôi đã thực hiện các bước trên trên một bản cài đặt "sạch" của Lion, vì vậy có thể có vấn đề với bảo mật trước khi bạn tham gia? Một khả năng khác là có một bản cập nhật bảo mật / OS X kể từ khi tôi đăng lần đầu?
edelaney05

0

Tôi đã thêm khóa riêng tư và khóa công khai cho công ty vào chuỗi khóa. Tôi đã thêm các hồ sơ cung cấp cho quá trình sản xuất mà tôi sẽ xây dựng.

Vì người dùng này không có tài khoản nên tôi đã đăng nhập vào devcenter bằng tài khoản của mình. Đã tải xuống các chứng chỉ cấp phép và tải chúng vào Xcode.

Tôi đã không thêm chứng chỉ cụ thể cho tài khoản vai trò xây dựng, ví dụ: jenkins.

Tôi đã thêm cái này vào tập lệnh xây dựng: security unlock-keychain -p mySecretPassword như ở trên, nhưng ...

Tôi đã tạo một tệp ~ / .ssh / mypass và thêm mật khẩu vào tệp.

Sau đó, lệnh trở thành: security unlock-keychain -p cat ~/.ssh/mypass

Các công trình xây dựng đang hoạt động như một nhà vô địch. Tôi nhận được tệp ipa, nó tải trên trung tâm ứng dụng và hoạt động trên thiết bị.


0

Cũng có thể cài đặt và khởi chạy JenkinsCI với tư cách người dùng OS X thay vì daemon:

  1. cài đặt jenkins bằng trình cài đặt chính thức ( https://jenkins-ci.org/ )
    • Nhấn tiếp
    • Nhấp vào "Tùy chỉnh"
    • Bỏ chọn "Bắt đầu lúc khởi động là 'jenkins'" - * QUAN TRỌNG * tùy chọn này thường cho phép jenkins không đầu không hoạt động tốt với quyền truy cập chuỗi khóa
  2. Phóng http://127.0.0.1:8080
    • xác minh nó KHÔNG khởi chạy
    • có thể cần phải dừng jenkins sudo launchctl unload /Library/LaunchDaemons/org.jenkins-ci.plist
  3. Nhấn đúp chuột /Applications/Jenkins/jenkins.war
    • tất nhiên điều này sẽ được tự động hóa để start @ start up
  4. Mở http://127.0.0.1:8080
    • xác minh nó hiện đang chạy

0

Để giải quyết vấn đề này, hãy thử đăng nhập vào http://appleid.apple.com và cập nhật câu hỏi bảo mật của bạn.

Nó đã giúp đỡ tôi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.