Jenkins บน OS X: xcodebuild ให้ข้อผิดพลาด Code Sign


107

สรุป:

การตั้งค่า Jenkins บน OS X ทำได้ง่ายขึ้นอย่างมากด้วยตัวติดตั้งล่าสุด ( ณ วันที่ 1.449 - 9 มีนาคม 2555 ) อย่างไรก็ตามการจัดการกระบวนการเซ็นรหัสยังคงเป็นเรื่องยากมากโดยไม่มีคำตอบที่ตรงไปตรงมา

แรงจูงใจ:

เรียกใช้เซิร์ฟเวอร์ CI แบบไม่มีหัวซึ่งเป็นไปตามแนวทางปฏิบัติที่ดีที่สุดทั่วไปสำหรับการเรียกใช้บริการบน OS X ( บางส่วนมีคำอธิบายที่นี่เป็นภาษาธรรมดา )

พื้นหลัง:

กระบวนการ:

ติดตั้งเจนกินส์ CI ผ่าน OS X แพคเกจติดตั้ง สำหรับขั้นตอน "ประเภทการติดตั้ง" ให้คลิกปุ่มกำหนดค่าเองแล้วเลือก "เริ่มที่การบูตเป็น" เจนกินส์ "

อภิปรายผล:

ความคาดหวังที่ไร้เดียงสา ณ จุดนี้คือโปรเจ็กต์ฟรีสไตล์ที่มีสคริปต์บิลด์xcodebuild -target MyTarget -sdk iphoneosควรใช้งานได้ ตามที่ระบุโดยชื่อของโพสต์นี้มันไม่ได้และล้มเหลวด้วย:

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

เห็นได้ชัดว่าต้องเกิดอะไรขึ้น - คุณต้องเพิ่มใบรับรองการเซ็นชื่อรหัสที่ถูกต้องและคีย์ส่วนตัวลงในพวงกุญแจเริ่มต้น ในการค้นคว้าวิธีการทำสิ่งนี้ฉันไม่พบวิธีแก้ปัญหาที่ไม่ทำให้ระบบมีช่องโหว่ในระดับหนึ่ง

ปัญหาที่ 1: ไม่มีพวงกุญแจเริ่มต้นสำหรับ jenkins daemon

sudo -u jenkins security default-keychain ... ให้ผล "ไม่พบพวงกุญแจเริ่มต้น"

ตามที่ระบุไว้ด้านล่างโดยIvo Dancet UserShell ถูกตั้งค่าเป็น / usr / bin / false สำหรับ jenkins daemon ตามค่าเริ่มต้น (ฉันคิดว่านี่เป็นคุณสมบัติไม่ใช่ข้อผิดพลาด) ทำตามคำตอบของเขาเพื่อเปลี่ยน UserShell เป็น bash จากนั้นคุณสามารถใช้sudo su jenkinsเพื่อเข้าสู่ระบบในฐานะผู้ใช้ jenkins และรับข้อความ 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

โอเคดีมาก ตอนนี้เรามีพวงกุญแจเริ่มต้นแล้ว ไปต่อเลยดีไหม? แต่ก่อนอื่นทำไมเราถึงต้องกังวลกับการสร้างพวงกุญแจเริ่มต้น?

คำตอบคำแนะนำหรือบทสนทนาเกือบทั้งหมดที่ฉันอ่านตลอดการค้นคว้าแนะนำว่าควรโยนใบรับรองการเซ็นชื่อรหัสและคีย์ลงในพวงกุญแจระบบ หากคุณดำเนินsecurity list-keychainsโครงการฟรีสไตล์ในเจนกินส์คุณจะเห็นว่าพวงกุญแจเดียวที่ใช้ได้คือพวงกุญแจระบบ ฉันคิดว่านั่นเป็นจุดที่คนส่วนใหญ่คิดที่จะใส่ใบรับรองและคีย์ไว้ที่นั่น แต่นี้ก็ดูเหมือนว่าความคิดที่ดีมาก - โดยเฉพาะอย่างยิ่งที่คุณจะต้องสร้างสคริปต์ข้อความธรรมดาด้วยรหัสผ่านเพื่อเปิดพวงกุญแจ

ปัญหาที่ 2: การเพิ่มใบรับรองการเซ็นชื่อรหัสและคีย์ส่วนตัว

นี่คือจุดที่ฉันเริ่มรู้สึกแย่จริงๆ ฉันมีความรู้สึกว่าควรสร้างคีย์สาธารณะ / ส่วนตัวใหม่ที่ไม่ซ้ำใครเพื่อใช้กับเจนกินส์ กระบวนการคิดของฉันคือถ้า jenkins daemon ถูกบุกรุกฉันสามารถเพิกถอนใบรับรองได้อย่างง่ายดายในพอร์ทัลการจัดเตรียมของ Apple และสร้างคีย์สาธารณะ / ส่วนตัวอื่น หากฉันใช้คีย์และใบรับรองเดียวกันสำหรับบัญชีผู้ใช้ของฉันและเจนกินส์นั่นหมายถึงความยุ่งยาก (ความเสียหาย) มากขึ้นหากบริการเจนกินส์ถูกโจมตี

เมื่อชี้ไปที่คำตอบของ Simon Urbanekคุณจะปลดล็อกพวงกุญแจจากสคริปต์ด้วยรหัสผ่านแบบข้อความธรรมดา ดูเหมือนว่าไม่มีความรับผิดชอบที่จะเก็บอะไรไว้นอกจากใบรับรองและกุญแจ "ทิ้ง" ในพวงกุญแจของเจนคินส์ภูต

ฉันสนใจมากในการอภิปรายใด ๆ ในทางตรงกันข้าม ฉันระมัดระวังตัวมากเกินไปหรือไม่?

ในการสร้าง CSR ใหม่เป็น jenkins daemon ใน Terminal ฉันทำสิ่งต่อไปนี้ ...

  1. sudo su jenkins
  2. certtool r CertificateSigningRequest.certSigningRequest คุณจะได้รับแจ้งสิ่งต่อไปนี้ (ส่วนใหญ่ฉันคาดเดาคำตอบที่ถูกต้องคุณมีความเข้าใจที่ดีขึ้นหรือไม่โปรดแบ่งปัน) ...
    • ป้อนคีย์และป้ายกำกับใบรับรอง:
    • เลือกอัลกอริทึม: r(สำหรับ RSA)
    • ป้อนขนาดคีย์เป็นบิต: 2048
    • เลือกอัลกอริทึมลายเซ็น: 5(สำหรับ MD5)
    • ป้อนสตริงคำท้า:
    • จากนั้นคำถามมากมายสำหรับ RDN
  3. ส่งไฟล์ CSR ที่สร้างขึ้น (CertificateSigningRequest.certSigningRequest) ไปที่ Provisioning Portal ของ Apple ภายใต้ Apple ID ใหม่
  4. อนุมัติคำขอและดาวน์โหลดไฟล์. cer
  5. security unlock-keychain
  6. security add-certificate ios_development.cer

สิ่งนี้ทำให้เราเข้าใกล้อีกก้าว ...

ปัญหาที่ 3: การจัดเตรียมโปรไฟล์และการปลดล็อกพวงกุญแจ

ฉันสร้างโปรไฟล์การจัดเตรียมพิเศษในพอร์ทัลการจัดเตรียมเพื่อใช้กับ CI โดยหวังว่าหากมีสิ่งเลวร้ายเกิดขึ้นฉันจะทำให้ผลกระทบน้อยลงเล็กน้อย วิธีปฏิบัติที่ดีที่สุดหรือระมัดระวังมากเกินไป?

  1. sudo su jenkins
  2. mkdir ~/Library/MobileDevice
  3. mkdir ~/Library/MobileDevice/Provisioning\ Profiles
  4. ย้ายโปรไฟล์การจัดเตรียมที่คุณตั้งค่าในพอร์ทัลการจัดเตรียมไปไว้ในโฟลเดอร์ใหม่นี้ ตอนนี้เราอยู่ห่างจากความสามารถในการเรียกใช้ xcodebuild จากบรรทัดคำสั่งเป็นเจนกินส์เพียงสองก้าวและนั่นหมายความว่าเราใกล้จะได้รับ Jenkins CI ที่รันบิลด์แล้ว
  5. security unlock-keychain -p <keychain password>
  6. xcodebuild -target MyTarget -sdk iphoneos

ตอนนี้เราได้รับการสร้างที่ประสบความสำเร็จจากบรรทัดคำสั่งเมื่อเข้าสู่ระบบเป็น jenkins daemon ดังนั้นหากเราสร้างโครงการฟรีสไตล์และเพิ่มสองขั้นตอนสุดท้าย (# 5 และ # 6 ด้านบน) เราจะสามารถสร้างการสร้างโดยอัตโนมัติ โครงการ iOS ของเรา!

อาจไม่จำเป็น แต่ฉันรู้สึกดีกว่าที่จะตั้งค่า jenkins UserShell กลับไปที่ / usr / bin / false หลังจากที่ฉันได้รับการตั้งค่าทั้งหมดนี้สำเร็จ ฉันกำลังหวาดระแวง?

ปัญหาที่ 4: พวงกุญแจเริ่มต้นยังไม่พร้อมใช้งาน!

( แก้ไข: ฉันโพสต์การแก้ไขคำถามของฉันรีบูตเพื่อให้แน่ใจว่าการแก้ปัญหาของฉันเป็น 100% และแน่นอนฉันจะทิ้งขั้นตอนไว้ )

แม้จะทำตามขั้นตอนข้างต้นทั้งหมดแล้วคุณจะต้องแก้ไข Launch Daemon plist ที่ /Library/LaunchDaemons/org.jenkins-ci.plist ตามที่ระบุไว้ในคำตอบนี้ โปรดทราบว่านี่เป็นข้อผิดพลาดของ openrdarด้วย

ควรมีลักษณะดังนี้:

<?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>

ด้วยการตั้งค่านี้ฉันขอแนะนำปลั๊กอิน Xcode สำหรับ Jenkinsซึ่งทำให้การตั้งค่าสคริปต์ xcodebuild ง่ายขึ้นเล็กน้อย ณ จุดนี้ฉันขอแนะนำให้อ่านหน้าคนสำหรับ xcodebuild - คุณทำมันมาไกลใน Terminal ใช่ไหม?

การตั้งค่านี้ไม่สมบูรณ์แบบและคำแนะนำหรือข้อมูลเชิงลึกจะได้รับการชื่นชมอย่างมาก

ฉันมีปัญหาในการเลือกคำตอบที่ "ถูกต้อง" เนื่องจากสิ่งที่ฉันใช้ในการแก้ปัญหาของฉันคือการรวบรวมข้อมูลที่ทุกคนป้อนเข้ามา ฉันพยายามให้ทุกคนโหวตอย่างน้อยที่สุด แต่ให้รางวัลกับ Simon เพราะเขาตอบคำถามเดิมเป็นส่วนใหญ่ นอกจากนี้Sami Tikka ยังสมควรได้รับเครดิตอย่างมากสำหรับความพยายามของเขาที่ทำให้ Jenkins ทำงานผ่าน AppleScript ในฐานะแอป OS X ธรรมดา ๆ หากคุณสนใจเพียงแค่ทำให้ Jenkins เริ่มต้นและดำเนินการอย่างรวดเร็วภายในเซสชันผู้ใช้ของคุณ (เช่นไม่ใช่เซิร์ฟเวอร์ที่ไม่มีหัว) โซลูชันของเขานั้นคล้ายกับ Mac มาก

ฉันหวังว่าความพยายามของฉันจะจุดประกายการสนทนาเพิ่มเติมและช่วยผู้ที่น่าสงสารคนต่อไปที่คิดว่าพวกเขาสามารถตั้งค่า Jenkins CI สำหรับโปรเจ็กต์ iOS ของพวกเขาได้ในช่วงสุดสัปดาห์เพราะทุกสิ่งที่ยอดเยี่ยมที่พวกเขาเคยได้ยินเกี่ยวกับเรื่องนี้


อัปเดต: 9 สิงหาคม 2556

ด้วยการโหวตและรายการโปรดมากมายฉันคิดว่าฉันจะกลับมาที่ 18 เดือนต่อมาพร้อมกับบทเรียนสั้น ๆ ที่ได้เรียนรู้

บทที่ 1: อย่าเปิดเผย Jenkins สู่อินเทอร์เน็ตสาธารณะ

ใน WWDC 2012 ฉันได้ถามคำถามนี้กับวิศวกร Xcode และ OS X Server ฉันได้รับเสียงขรมว่า "อย่าทำอย่างนั้น!" จากใครก็ตามที่ฉันถาม พวกเขาทั้งหมดเห็นพ้องกันว่ากระบวนการสร้างอัตโนมัตินั้นยอดเยี่ยม แต่เซิร์ฟเวอร์ควรเข้าถึงได้บนเครือข่ายท้องถิ่นเท่านั้น วิศวกร OS X Server แนะนำให้อนุญาตการเข้าถึงระยะไกลผ่าน VPN

บทที่ 2: ตอนนี้มีตัวเลือกการติดตั้งใหม่

ฉันเพิ่งให้ CocoaHeads พูดคุยเกี่ยวกับประสบการณ์ของเจนกินส์ของฉันและฉันประหลาดใจมากที่ผมพบว่าบางวิธีการติดตั้งใหม่ - Homebrew และแม้กระทั่งBitNami Mac App Storeรุ่น สิ่งเหล่านี้คุ้มค่าที่จะลองดู โจนาธานไรท์มีส่วนสำคัญรายละเอียดการรับHomebrew เจนกินส์ทำงาน

บทที่ 3: ไม่จริงจังอย่าเปิดเผยกล่องงานสร้างของคุณกับอินเทอร์เน็ต

ค่อนข้างชัดเจนจากโพสต์เดิมว่าฉันไม่ใช่ผู้ดูแลระบบหรือผู้เชี่ยวชาญด้านความปลอดภัย สามัญสำนึกเกี่ยวกับสิ่งของส่วนตัว (พวงกุญแจหนังสือรับรองใบรับรอง ฯลฯ ) ทำให้ฉันรู้สึกไม่สบายใจที่วางกล่อง Jenkins ไว้บนอินเทอร์เน็ต นิค Arnottที่มีศักยภาพที่ถูกทอดทิ้งก็สามารถที่จะยืนยัน heebie-Jeebies ของฉันสวยได้อย่างง่ายดายในบทความนี้

TL; ดร

คำแนะนำของฉันสำหรับคนอื่น ๆ ที่ต้องการทำให้กระบวนการสร้างของพวกเขาเป็นแบบอัตโนมัติได้เปลี่ยนไปในช่วงปีครึ่งที่ผ่านมา ตรวจสอบให้แน่ใจว่าเครื่อง Jenkins ของคุณอยู่หลังไฟร์วอลล์ของคุณ ติดตั้งและตั้งค่า Jenkins เป็นผู้ใช้ Jenkins โดยเฉพาะไม่ว่าจะใช้โปรแกรมติดตั้งเวอร์ชัน Bitnami Mac App Store AppleScript ของ Sami Tikka ฯลฯ วิธีนี้ช่วยแก้อาการปวดหัวส่วนใหญ่ตามรายละเอียดข้างต้น หากคุณต้องการการเข้าถึงระยะไกลการตั้งค่าบริการ VPN ใน OS X Server จะใช้เวลาสูงสุดสิบนาที ฉันใช้การตั้งค่านี้มานานกว่าหนึ่งปีแล้วและมีความสุขมากกับมัน โชคดี!


10
ฉันเสียใจที่สามารถให้คะแนนโหวตเพิ่มได้เพียงข้อเดียวสำหรับคำถามที่กระชับและสมบูรณ์พร้อมคำตอบแก้ไขใน :)
Zsub

มีบางอย่างทำให้เจนกินส์เปิดตัวบน OS X Yosemite - ใช้โปรแกรมติดตั้งของเจนกินส์
จอนนี่

ย้ายใบรับรองของคุณไปที่พวงกุญแจระบบและมีความสุข;)
Julian F. Weinert

คำตอบ:


30

ต้องปลดล็อกพวงกุญแจก่อนจึงจะใช้ได้ คุณสามารถใช้security unlock-keychainเพื่อปลดล็อก คุณสามารถทำได้แบบโต้ตอบ (ปลอดภัยกว่า) หรือโดยการระบุรหัสผ่านในบรรทัดคำสั่ง (ไม่ปลอดภัย) เช่น:

security unlock-keychain -p mySecretPassword...

เห็นได้ชัดว่าการใส่สิ่งนี้ลงในสคริปต์จะทำให้ความปลอดภัยของพวงกุญแจนั้นลดลงดังนั้นผู้คนมักจะตั้งค่าพวงกุญแจแต่ละอันโดยใช้เฉพาะข้อมูลรับรองการเซ็นชื่อเพื่อลดความเสียหายดังกล่าว

โดยปกติแล้วในTerminalพวงกุญแจจะถูกปลดล็อกโดยเซสชันของคุณอยู่แล้วเนื่องจากพวงกุญแจเริ่มต้นจะถูกปลดล็อกเมื่อเข้าสู่ระบบดังนั้นคุณจึงไม่จำเป็นต้องทำเช่นนั้น อย่างไรก็ตามกระบวนการใด ๆ ที่ไม่ทำงานในเซสชันของคุณจะไม่มีพวงกุญแจปลดล็อกแม้ว่าจะมีคุณเป็นผู้ใช้ก็ตาม (โดยทั่วไปสิ่งนี้จะส่งผลกระทบsshแต่ยังรวมถึงกระบวนการอื่น ๆ ด้วย)


แต่ฉันก็มีปัญหาในการโหลดพวงกุญแจที่อยู่นอกเหนือจากพวงกุญแจระบบ security unlock-keychain -p password -k /path/codesign.keychainไม่ทำงาน
edelaney05

คุณใช้พวงกุญแจเริ่มต้นตามตัวอย่างด้านบนหรือไม่? โปรดทราบว่าสำหรับพวงกุญแจที่กำหนดเองคุณต้องตั้งค่าให้อยู่ในเส้นทางการค้นหาก่อนดังนั้นให้ลองใช้พวงกุญแจเริ่มต้นก่อน นอกจากนี้โปรดทราบว่าไม่มี-kข้อโต้แย้งunlock-keychainใด ๆ ดังนั้นสิ่งที่คุณพยายามทำดูเหมือนจะไม่ถูกต้อง (ดูsecurity help unlock-keychain)
Simon Urbanek

ฉันได้ลองทำอะไรที่แตกต่างออกไปเล็กน้อย แต่สุดท้ายก็กลับมาที่จุดเดิม ฉันแก้ไขคำถามแล้วหวังว่าจะชัดเจนกว่านี้หน่อยนะ?
edelaney05

มันแตกต่างจากคำถามเดิมอย่างสิ้นเชิง ... ในการเริ่มต้นคุณควรเข้าสู่ระบบด้วยเจนกินส์ (เช่นผ่านsudo -u jenkins bash) และตรวจสอบว่าคุณมีสิทธิ์ในเส้นทางทั้งหมดถูกต้อง คุณทำหลายสิ่งหลายอย่างที่คุณไม่ได้พูด (เช่นใช้dsclสร้างผู้ใช้) ดังนั้นคุณจึงเป็นของตัวเอง คุณจะต้องตรวจสอบการตั้งค่าโฮมด้วย (ขึ้นอยู่กับว่าคุณตั้งค่าเชลล์หรือไม่คุณสามารถใช้sudo -u jenkins -iเพื่อรับการตั้งค่าการเข้าสู่ระบบที่เกี่ยวข้อง)
Simon Urbanek

12

สมมติว่าคุณต้องการทำการแจกจ่ายแบบเฉพาะกิจผ่าน Jenkins สิ่งนี้จำเป็นที่ Jenkins จะต้องเข้าถึงใบรับรองการแจกจ่ายและข้อมูลประจำตัวของผู้ดูแลระบบของทีมนอกเหนือจากโปรไฟล์การจัดเตรียม

การใช้ข้อมูลประจำตัวที่ส่งออกในไฟล์. cer คุณสามารถนำเข้าโดยทางโปรแกรมได้เช่นนี้สวิตช์ -A คือการอนุญาตให้โปรแกรมทั้งหมดเข้าถึงรายการนี้ หรือคุณสามารถใช้-T /path/to/programสวิตช์หลายตัวเพื่ออนุญาตcodesignและxcodebuildเข้าถึง:

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

แน่นอนเราควรมีใบรับรอง Apple WWDCRA ซึ่งนำเข้าในลักษณะเดียวกัน:

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

อย่างไรก็ตามเราต้องใช้คีย์ส่วนตัวสำหรับไฟล์devcertificate.cer. ในการดำเนินการนี้คุณต้องส่งออกคีย์ส่วนตัวที่เกี่ยวข้องเป็นคีย์. p12 และตั้งรหัสผ่าน วางไว้ที่ใดที่หนึ่งที่คุณสามารถเข้าถึงได้จากเปลือก Jenkins ของคุณปลดล็อกพวงกุญแจและนำเข้า:

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

การนำเข้าใบรับรองการแจกจ่ายจะทำงานในลักษณะเดียวกัน ฉันไม่รู้ว่าทำไมคุณต้องปลดล็อกพวงกุญแจสำหรับการนำเข้า. p12 ไม่ใช่สำหรับ. cer แต่ก็ดี

คุณจะต้องเข้าถึงโปรไฟล์การจัดเตรียมเราจะแก้ไขคำแนะนำเหล่านั้นในโพสต์นี้ในไม่ช้า


1
คุณช่วยอัปเดตด้วยคำแนะนำการเข้าถึงโปรไฟล์การจัดสรรได้ไหม
ลุค

ดูmodeet.com/what-we-know/2013/03/11/jenkins_keychain_timeoutsสำหรับแนวทางที่เกี่ยวข้อง
Gili

5

ฉันมีปัญหาเดียวกันและได้ค้นหาคำตอบมาระยะหนึ่งแล้ว นี่คือสิ่งหนึ่งที่ฉันได้เรียนรู้

ฉันใช้เจนกินส์ในฐานะผู้ใช้เจนกินส์ผู้ใช้ที่สร้างโดยโปรแกรมติดตั้งและอย่างที่คนอื่นพูดถึงเขาไม่สามารถเข้าถึงพวงกุญแจเดียวกับที่ผู้ใช้ปกติของคุณทำ แทนที่จะพยายามเข้าสู่ระบบในฐานะผู้ใช้เจนกินส์ฉันสร้างโปรเจ็กต์บิลด์ที่สองซึ่งมีขั้นตอนการสร้างเพียงขั้นตอนเดียวนั่นคือ "Execute Shell" ซึ่งฉันรันคำสั่งที่ฉันต้องการทดสอบในฐานะผู้ใช้เจนกินส์

เมื่อฉันตั้งค่าแล้วฉันสามารถเรียกใช้คำสั่งได้

security list-keychains

และสิ่งนี้เผยให้ฉันเห็นว่าสิ่งเดียวที่เจนกินส์เห็นคือพวงกุญแจระบบ

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

ด้วยความรู้ดังกล่าวฉันจึงเปิดแอป Keychain Access และคัดลอกใบรับรอง "iPhone Developer: xxxx" ของฉันลงในพวงกุญแจระบบ (คลิกขวาคัดลอกจากพวงกุญแจ "เข้าสู่ระบบ")

สิ่งนี้ทำให้ฉันผ่านข้อผิดพลาดในการลงชื่อรหัสคู่ใบรับรอง / คีย์ส่วนตัว แต่เปิดขึ้นมาอีกอันหนึ่งพร้อมกับโปรไฟล์การจัดสรร (ดูเหมือนจะคล้ายกัน แต่แตกต่างกัน)


ฉันพบปัญหาในโปรไฟล์การจัดเตรียมเดียวกันมีความคิดเกี่ยวกับวิธีแก้ปัญหานี้อย่างไร
Santthosh

2
ฉันพบว่าโปรไฟล์การจัดเตรียมสำหรับผู้ใช้เจนกินส์ถูกเก็บไว้ใน '/ Users / Shared / Jenkins / Library / MobileDevice / Provisioning Profiles' ดังนั้นจึงใส่ขั้นตอนในการสร้างของฉันเพื่อคัดลอกโปรไฟล์การจัดเตรียมจากภายใน git repo ของฉันไปยังตำแหน่งนั้น สิ่งนี้ช่วยให้ฉันอัปเดตโปรไฟล์การจัดเตรียมและส่งไปยัง SCM และ Jenkins จะรับการเปลี่ยนแปลงนั้นโดยอัตโนมัติ
brianestey

หากคุณคัดลอก login.keychain ไปยังห้องสมุด jenkins Keychain ของคุณคุณจะต้องเลือกมันเพื่อให้ผู้ใช้ jenkins สามารถปลดล็อกได้อย่างปลอดภัย
ganoro

1
คุณคือฮีโร่ฉันฉีกผมบนศีรษะเป็นเวลา 2 วันคัดลอกใบรับรองไปยังระบบที่ช่วย
Roman Bobelyuk

5

ในการเปลี่ยนรหัสผ่านคุณสามารถsudo passwd jenkins <new-pw>ใช้ได้ อย่างไรก็ตามฉันคิดว่ามันจะดีกว่าถ้าใช้คำสั่ง dscl เพื่อเปลี่ยนรหัสผ่าน

ในเจนกินส์การติดตั้งของฉัน (ตัวติดตั้งอย่างเป็นทางการ) มีเชลล์ผู้ใช้ / usr / bin / false การเปลี่ยนเป็น bash ช่วยแก้ปัญหาการล็อกอินไม่ได้:

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

su jenkinsตอนนี้คุณควรจะสามารถเข้าสู่ระบบด้วย


สิ่งนี้มีประโยชน์มากสำหรับฉัน - ฉันมีปัญหาคล้ายกันกับcreate-keychainคำสั่งที่ไม่ทำงานกับผู้ใช้เจนกินส์ การเรียกใช้คำสั่งนี้ดูเหมือนจะช่วยแก้ปัญหาได้
lxt

เมื่อฉันรันคำสั่งเพื่อเปลี่ยนรหัสผ่านผู้ใช้เจนกินส์ฉันจะถูกถามถึงรหัสผ่านปัจจุบัน ฉันไม่รู้ว่านี่คืออะไรและฉันไม่สามารถกด Enter ได้ ข้อเสนอแนะใด ๆ ?
CMVR

4

ฉันใช้ปลั๊กอิน Xcode เพื่อสร้างแอป iOS ในการกำหนดค่าโครงการ

เลือกเพิ่มขั้นตอนการสร้าง> Xcode> การลงนามรหัสและตัวเลือกพวงกุญแจ OS X

ติ๊กกล่องปลดล็อกพวงกุญแจและเพิ่มตาม (ตัวอย่าง) ใส่คำอธิบายภาพที่นี่

บางครั้งถ้าฉันได้รับข้อผิดพลาด

ข้อผิดพลาดในการเข้าสู่ระบบรหัส: ...

ฉันจะเปิด Jenkins อีกครั้งและป้อนรหัสผ่านอีกครั้งเพื่อปลดล็อก


3

สำหรับผู้ที่มีปัญหากับพวงกุญแจฉันขอแนะนำให้คุณลองใช้ตัวติดตั้ง Jenkins ทางเลือกของฉันที่https://github.com/stisti/jenkins-appดาวน์โหลดได้ที่https://github.com/stisti/jenkins-app/downloads

Jenkins.app เรียกใช้ Jenkins ในเซสชันผู้ใช้ของคุณดังนั้นปัญหาการเข้าถึงพวงกุญแจจึงไม่ใช่ปัญหา :)


ข้อกังวลคือผู้ใช้ Jenkins รายนี้อยู่ในพื้นที่ผู้ใช้ไม่ใช่พื้นที่ภูต ... ดังนั้นหากผู้โจมตีสามารถโจมตีผู้ใช้ Jenkins ของคุณได้พวกเขาจะสามารถเข้าถึงคอมพิวเตอร์ของคุณได้อย่างเต็มที่
edelaney05

วิธีนี้อาจช่วยแก้ปัญหาที่ฉันได้รับ ปัญหาคือฉันมีการติดตั้ง Jenkins อยู่แล้ว (ทำวิธีอื่น) และฉันไม่ต้องการสูญเสียงานสร้างทั้งหมดของฉัน - ฯลฯ จะเกิดอะไรขึ้นในเคสของฉัน?
Mike S

2

หากคุณมี sudo คุณสามารถใช้ passwd เพื่อเปลี่ยนรหัสผ่านของผู้ใช้ Jenkins จากนั้นคุณจะได้รับรหัสผ่าน Jenkins

นอกจากนี้ฉันไม่แน่ใจว่านี่เป็นปัญหาสำหรับคุณหรือไม่ แต่ ANT Script ที่ฉันใช้ผ่าน Jenkins มีสิ่งนี้:

<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
ดูเหมือนว่าคุณมีการตั้งค่า Jenkins ภายใต้ผู้ใช้ "macbuild" ฉันสมมติว่าผู้ใช้รายนี้เป็นผู้ใช้ไม่ใช่ภูต ฉันเข้าใจแน่นอน (ตอนนี้) ว่าจะต้องปลดล็อกพวงกุญแจผ่านทางบรรทัดคำสั่ง (ดูความคิดเห็นของ Simon Urbanek) แต่ฉันยังไม่แน่ใจว่าจะสร้างพวงกุญแจเริ่มต้นสำหรับ jenkins daemon ได้อย่างไร
edelaney05

1

ด้วยเหตุผลบางประการยูทิลิตี้ "ความปลอดภัย" ไม่ทำงานสำหรับฉันบน Lion ที่ติดตั้ง Jenkins ใหม่

หลังจาก "sudo su jenkins" มันสามารถสร้างพวงกุญแจใหม่ได้ แต่ไม่สนใจคำสั่ง "default-keychain -s ... " หรือ "ปลดล็อก" ทั้งหมดที่ส่งคืนสถานะการออกเป็นศูนย์และไม่พิมพ์อะไรลงในคอนโซล การแสดงรายการพวงกุญแจเริ่มต้นหรือการเข้าสู่ระบบไม่ได้ให้อะไรเลยรายการค้นหาพวงกุญแจมีเพียงพวงกุญแจระบบและฉันไม่สามารถเปลี่ยนแปลงสิ่งที่ฉันพิมพ์ได้

หลังจากที่ฉันลงชื่อเข้าใช้เดสก์ท็อปของผู้ใช้และเปิดใช้งานยูทิลิตี้พวงกุญแจมันแสดงพวงกุญแจที่ฉันสร้างขึ้นและหลังจากนั้นทุกอย่างก็ทำงานตามที่อธิบายไว้ในโพสต์ด้านบน

ฉันสงสัยว่าพฤติกรรมของพวงกุญแจเริ่มต้นบางอย่างเปลี่ยนไปใน Lion หรือไม่หรือฉันทำอะไรหายไป


ฉันทำตามขั้นตอนข้างต้นในการติดตั้ง Lion แบบ "สะอาด" แล้วอาจมีปัญหาด้านความปลอดภัยก่อนที่คุณจะเข้ามา ความเป็นไปได้อีกประการหนึ่งคือมีการอัปเดตความปลอดภัย / OS X ตั้งแต่ที่ฉันโพสต์ครั้งแรก?
edelaney05

0

ฉันเพิ่มคีย์ส่วนตัวและคีย์สาธารณะของ บริษัท ลงในพวงกุญแจ ฉันได้เพิ่มโปรไฟล์การจัดเตรียมสำหรับการผลิตที่ฉันจะสร้าง

เนื่องจากผู้ใช้รายนี้ไม่มีบัญชีฉันจึงลงชื่อเข้าใช้ devcenter ด้วยบัญชีของฉัน ดาวน์โหลดใบรับรองการจัดเตรียมและโหลดลงใน Xcode

ฉันไม่ได้เพิ่มใบรับรองเฉพาะสำหรับบัญชีบิลด์บทบาทเช่น เจนกินส์

ฉันได้เพิ่มสิ่งนี้ลงในบิลด์สคริปต์: security unlock-keychain -p mySecretPassword ตามด้านบน แต่ ...

ฉันสร้างไฟล์ ~ / .ssh / mypass และเพิ่มรหัสผ่านลงในไฟล์

จากนั้นคำสั่งจะกลายเป็น: security unlock-keychain -p cat ~/.ssh/mypass

สิ่งปลูกสร้างกำลังทำงานเหมือนแชมป์ ฉันได้รับไฟล์ ipa มันโหลดบนแอพส่วนกลางและทำงานบนอุปกรณ์


0

นอกจากนี้ยังสามารถติดตั้งและเปิดใช้งาน JenkinsCI ในฐานะผู้ใช้ OS X แทน daemon:

  1. ติดตั้งเจนกินส์โดยใช้ตัวติดตั้งอย่างเป็นทางการ ( https://jenkins-ci.org/ )
    • คลิกถัดไป
    • คลิก "ปรับแต่ง"
    • ยกเลิกการเลือก "Start at boot as" jenkins "" - * สำคัญ *โดยปกติแล้วตัวเลือกนี้จะอนุญาตให้ใช้เจนกินส์แบบไม่มีหัวซึ่งใช้งานไม่ได้กับการเข้าถึงพวงกุญแจ
  2. เปิด http://127.0.0.1:8080
    • ตรวจสอบว่าไม่มีการเปิดตัว
    • อาจต้องหยุดเจนกินส์ sudo launchctl unload /Library/LaunchDaemons/org.jenkins-ci.plist
  3. ดับเบิลคลิก /Applications/Jenkins/jenkins.war
    • แน่นอนว่าสิ่งนี้ควรเป็นไปโดยอัตโนมัติเพื่อ start @ start up
  4. เปิด http://127.0.0.1:8080
    • ตรวจสอบว่ากำลังทำงานอยู่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.