Jenkins di OS X: xcodebuild memberikan kesalahan Tanda Kode


107

Ringkasan:

Menyiapkan Jenkins di OS X telah menjadi jauh lebih mudah dengan penginstal terbaru ( mulai 1.449 - 9 Maret 2012 ), namun mengelola proses penandatanganan kode masih sangat sulit tanpa jawaban langsung.

Motivasi:

Jalankan server CI tanpa kepala yang mengikuti praktik terbaik umum untuk menjalankan layanan di OS X ( Beberapa di antaranya dijelaskan di sini dalam bahasa sederhana ).

Latar Belakang:

Proses:

Instal Jenkins CI melalui OS X paket installer . Untuk langkah "Jenis Instalasi", klik tombol Ubahsuai, dan pilih "Mulai saat boot sebagai 'jenkins.'"

Diskusi:

Harapan naif pada saat ini adalah bahwa proyek gaya bebas dengan skrip build xcodebuild -target MyTarget -sdk iphoneosseharusnya berfungsi. Seperti yang ditunjukkan oleh judul posting ini, itu tidak dan gagal dengan:

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

Sudah cukup jelas apa yang perlu terjadi - Anda perlu menambahkan sertifikat penandatanganan kode yang valid dan kunci pribadi ke dalam rantai kunci default. Dalam meneliti bagaimana mencapai ini, saya belum menemukan solusi yang tidak membuka sistem ke beberapa tingkat kerentanan.

Masalah 1: Tidak ada rantai kunci default untuk jenkins daemon

sudo -u jenkins security default-keychain ... menghasilkan "Gantungan kunci default tidak dapat ditemukan"

Seperti yang ditunjukkan di bawah ini oleh Ivo Dancet , UserShell diatur ke / usr / bin / false secara default untuk jenkins daemon (menurut saya ini adalah fitur, bukan bug); ikuti jawabannya untuk mengubah UserShell menjadi bash. Anda kemudian dapat menggunakan sudo su jenkinsuntuk masuk sebagai pengguna jenkins dan mendapatkan prompt 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

Oke bagus. Kami punya gantungan kunci default sekarang; ayo lanjutkan kan? Tapi, pertama-tama kenapa kita malah repot-repot membuat gantungan kunci bawaan?

Hampir semua jawaban, saran, atau percakapan yang saya baca selama penelitian menyarankan bahwa seseorang sebaiknya membuang sertifikat dan kunci penandatanganan kode mereka ke dalam rantai kunci sistem. Jika Anda menjalankan security list-keychainsproyek gaya bebas di Jenkins, Anda akan melihat bahwa satu-satunya rantai kunci yang tersedia adalah rantai kunci sistem; Saya pikir di situlah kebanyakan orang muncul dengan ide untuk meletakkan sertifikat dan kunci mereka di sana. Tapi, ini sepertinya ide yang sangat buruk - terutama mengingat Anda harus membuat skrip teks biasa dengan kata sandi untuk membuka rantai kunci .

Masalah 2: Menambahkan sertifikat penandatanganan kode dan kunci pribadi

Di sinilah saya benar-benar mulai mual. Saya memiliki firasat bahwa saya harus membuat kunci publik / pribadi baru yang unik untuk digunakan dengan Jenkins. Proses pemikiran saya adalah jika jenkins daemon dikompromikan, maka saya dapat dengan mudah mencabut sertifikat di Portal Penyediaan Apple dan membuat kunci publik / pribadi lainnya. Jika saya menggunakan kunci dan sertifikat yang sama untuk akun pengguna saya dan Jenkins, berarti lebih merepotkan (rusak?) Jika layanan jenkins diserang.

Menunjuk ke jawaban Simon Urbanek Anda akan membuka kunci rantai kunci dari skrip dengan kata sandi teks biasa. Tampaknya tidak bertanggung jawab untuk menyimpan apa pun kecuali sertifikat dan kunci "sekali pakai" di gantungan kunci daemon jenkins.

Saya sangat tertarik dengan diskusi yang bertentangan. Apakah saya terlalu berhati-hati?

Untuk membuat CSR baru sebagai jenkins daemon di Terminal saya melakukan hal berikut ...

  1. sudo su jenkins
  2. certtool r CertificateSigningRequest.certSigningRequest Anda akan diminta untuk hal berikut (sebagian besar dari ini saya membuat tebakan dengan jawaban yang benar; apakah Anda memiliki wawasan yang lebih baik? Silakan bagikan.) ...
    • Masukkan kunci dan label sertifikat:
    • Pilih algoritma: r (untuk RSA)
    • Masukkan ukuran kunci dalam bit: 2048
    • Pilih algoritma tanda tangan: 5 (untuk MD5)
    • Masukkan string tantangan:
    • Lalu banyak pertanyaan untuk RDN
  3. Kirimkan file CSR yang dibuat (CertificateSigningRequest.certSigningRequest) ke Portal Penyediaan Apple dengan ID Apple baru
  4. Setujui permintaan dan unduh file .cer
  5. security unlock-keychain
  6. security add-certificate ios_development.cer

Ini membawa kita selangkah lebih dekat ...

Masalah 3: Menyediakan profil dan membuka kunci rantai kunci

Saya membuat profil penyediaan khusus di Provisioning Portal hanya untuk digunakan dengan CI dengan harapan jika terjadi sesuatu yang buruk, saya telah membuat dampaknya sedikit lebih kecil. Praktik terbaik atau terlalu berhati-hati?

  1. sudo su jenkins
  2. mkdir ~/Library/MobileDevice
  3. mkdir ~/Library/MobileDevice/Provisioning\ Profiles
  4. Pindahkan profil penyediaan yang Anda siapkan di Portal Penyediaan ke folder baru ini. Sekarang kita tinggal dua langkah lagi untuk dapat menjalankan xcodebuild dari baris perintah sebagai jenkins, dan itu berarti kita juga hampir bisa mendapatkan build yang menjalankan Jenkins CI.
  5. security unlock-keychain -p <keychain password>
  6. xcodebuild -target MyTarget -sdk iphoneos

Sekarang kita mendapatkan pembangunan yang berhasil dari baris perintah saat masuk sebagai daemon jenkins, jadi jika kita membuat proyek gaya bebas dan menambahkan dua langkah terakhir (# 5 dan # 6 di atas) kita akan dapat mengotomatiskan pembuatan proyek iOS kami!

Ini mungkin tidak perlu, tetapi saya merasa lebih baik mengatur jenkins UserShell kembali ke / usr / bin / false setelah saya berhasil mendapatkan semua pengaturan ini. Apakah saya menjadi paranoid?

Masalah 4: Gantungan kunci default masih tidak tersedia!

( EDIT: Saya memposting hasil edit ke pertanyaan saya, melakukan boot ulang untuk memastikan solusi saya 100%, dan tentu saja, saya meninggalkan satu langkah )

Bahkan setelah semua langkah di atas, Anda harus mengubah plist Launch Daemon di /Library/LaunchDaemons/org.jenkins-ci.plist seperti yang dinyatakan dalam jawaban ini . Harap dicatat ini juga merupakan bug openrdar .

Ini akan terlihat seperti ini:

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

Dengan penyiapan ini, saya juga merekomendasikan plugin Xcode untuk Jenkins , yang membuat penyiapan skrip xcodebuild sedikit lebih mudah. Pada titik ini, saya juga merekomendasikan membaca halaman manual untuk xcodebuild - apakah Anda sudah sampai sejauh ini di Terminal, bukan?

Penyiapan ini tidak sempurna, dan semua saran atau wawasan sangat dihargai.

Saya mengalami kesulitan memilih jawaban yang "benar" karena apa yang saya gunakan untuk memecahkan masalah saya adalah kumpulan masukan dari semua orang. Saya sudah mencoba memberikan setidaknya satu suara untuk semua orang, tetapi berikan jawaban kepada Simon karena dia kebanyakan menjawab pertanyaan asli. Selanjutnya Sami Tikka layak mendapatkan banyak pujian atas upayanya membuat Jenkins bekerja melalui AppleScript sebagai aplikasi OS X biasa. Jika Anda hanya tertarik untuk membuat Jenkins aktif dan berjalan cepat dalam sesi pengguna Anda (yaitu, bukan sebagai server tanpa kepala), solusinya jauh lebih mirip Mac.

Saya berharap upaya saya memicu diskusi lebih lanjut, dan membantu orang-orang malang berikutnya yang datang untuk berpikir bahwa mereka bisa mendapatkan pengaturan Jenkins CI untuk proyek iOS mereka di akhir pekan karena semua hal luar biasa yang telah mereka dengar tentangnya.


Pembaruan: 9 Agustus 2013

Dengan begitu banyak suara positif dan favorit, saya pikir saya akan kembali ke ini 18 bulan kemudian dengan beberapa pelajaran singkat yang dipetik.

Pelajaran 1: Jangan paparkan Jenkins ke internet publik

Pada WWDC 2012, saya mengajukan pertanyaan ini kepada teknisi Xcode dan OS X Server. Saya menerima hiruk-pikuk "jangan lakukan itu!" dari siapa pun yang saya tanya. Mereka semua setuju bahwa proses pembuatan otomatis sangat bagus, tetapi server seharusnya hanya dapat diakses di jaringan lokal. Para insinyur OS X Server menyarankan untuk mengizinkan akses jarak jauh melalui VPN.

Pelajaran 2: Ada opsi penginstalan baru sekarang

Saya baru-baru ini memberikan ceramah CocoaHeads tentang pengalaman Jenkins saya, dan saya sangat terkejut karena saya menemukan beberapa metode pemasangan baru - Homebrew dan bahkan versi Bitnami Mac App Store . Ini pasti patut untuk dicoba. Jonathan Wright memiliki inti yang merinci bagaimana Homebrew Jenkins bekerja .

Pelajaran 3: Tidak, sungguh, jangan biarkan build box Anda ke internet

Cukup jelas dari posting asli bahwa saya bukan administrator sistem atau pakar keamanan. Akal sehat tentang hal-hal pribadi (gantungan kunci, kredensial, sertifikat, dll) membuat saya merasa tidak nyaman meletakkan kotak Jenkins saya di internet. Nick Arnott dari Neglected Potential dapat mengonfirmasi heebie-jeebies saya dengan cukup mudah di artikel ini .

TL; DR

Rekomendasi saya kepada orang lain yang ingin mengotomatiskan proses build mereka telah berubah selama satu setengah tahun terakhir. Pastikan mesin Jenkins Anda berada di belakang firewall Anda. Instal dan atur Jenkins sebagai pengguna Jenkins khusus baik menggunakan penginstal, versi Bitnami Mac App Store, AppleScript Sami Tikka, dll; ini menyelesaikan sebagian besar sakit kepala yang saya jelaskan di atas. Jika Anda membutuhkan akses jarak jauh, menyiapkan layanan VPN di OS X Server hanya membutuhkan waktu sepuluh menit. Saya telah menggunakan pengaturan ini selama lebih dari setahun dan saya sangat senang dengannya. Semoga berhasil!


10
Saya sedih saya hanya bisa memberikan satu suara positif untuk pertanyaan-dengan-jawaban-diedit-di yang ringkas dan lengkap ini :)
Zsub

Sesuatu merusak peluncuran Jenkins di OS X Yosemite - menggunakan penginstal Jenkins.
Jonny

Pindahkan sertifikat Anda ke gantungan kunci Sistem dan berbahagialah;)
Julian F. Weinert

Jawaban:


30

Gantungan kunci harus dibuka sebelum dapat digunakan. Anda dapat menggunakan security unlock-keychainuntuk membuka kunci. Anda dapat melakukannya secara interaktif (lebih aman) atau dengan menentukan kata sandi pada baris perintah (tidak aman), misalnya:

security unlock-keychain -p mySecretPassword...

Jelas, memasukkan ini ke dalam skrip membahayakan keamanan rantai kunci itu, sehingga sering kali orang menyiapkan rantai kunci individu hanya dengan kredensial penandatanganan untuk meminimalkan kerusakan tersebut.

Biasanya di Terminalrantai kunci sudah dibuka kuncinya oleh sesi Anda, karena rantai kunci default tidak terkunci saat masuk, jadi Anda tidak perlu melakukan itu. Namun, proses apa pun yang tidak berjalan dalam sesi Anda tidak akan memiliki rantai kunci yang tidak terkunci meskipun Anda sebagai pengguna (paling umum ini memengaruhi ssh, tetapi juga proses lainnya).


Namun, saya juga mengalami kesulitan untuk memuat rantai kunci di luar rantai kunci sistem. security unlock-keychain -p password -k /path/codesign.keychaintidak bekerja.
edelaney05

Sudahkah Anda menggunakan rantai kunci default seperti pada contoh saya di atas? Perhatikan bahwa untuk gantungan kunci khusus Anda perlu mengaturnya agar berada di jalur pencarian terlebih dahulu, jadi coba rantai kunci default terlebih dahulu. Juga perhatikan bahwa tidak ada -kargumen untuk unlock-keychainjadi apa pun yang Anda coba lakukan tampaknya tidak benar (lihat security help unlock-keychain).
Simon Urbanek

Saya sudah mencoba sesuatu yang sedikit berbeda, tetapi akhirnya kembali ke tempat yang sama. Saya mengedit pertanyaan saya, semoga sedikit lebih jelas?
edelaney05

Ini sama sekali berbeda dari pertanyaan awal ... Untuk memulainya, Anda harus login sebagai jenkins (misalnya via sudo -u jenkins bash) dan memeriksa apakah Anda memiliki izin di seluruh jalur dengan benar. Anda melakukan banyak hal yang tidak Anda katakan (seperti menggunakan dscluntuk membuat pengguna) jadi Anda benar-benar sendirian. Anda juga akan ingin memeriksa pengaturan rumah (tergantung apakah Anda mengatur shell atau tidak, Anda dapat menggunakan sudo -u jenkins -iuntuk mendapatkan pengaturan login yang sesuai).
Simon Urbanek

12

Misalkan Anda juga ingin melakukan distribusi ad hoc melalui Jenkins, ini mengharuskan Jenkins memiliki akses ke sertifikat Distribusi, dan identitas admin tim, selain profil penyediaan.

Menggunakan identitas yang diekspor dalam file .cer, Anda dapat mengimpornya secara terprogram seperti itu, sakelar -A adalah untuk mengizinkan semua program mengakses entri ini. Sebagai alternatif, Anda dapat menggunakan beberapa -T /path/to/programsakelar untuk mengizinkan codesigndan xcodebuildmengakses .:

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

Tentu saja, kami juga harus memiliki sertifikat WWDCRA Apple, yang diimpor dengan cara yang hampir sama:

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

Namun, kami juga membutuhkan kunci pribadi untuk file devcertificate.cer. Untuk melakukan ini, Anda perlu mengekspor kunci pribadi yang sesuai sebagai kunci .p12 dan menyetel kata sandi. Letakkan di suatu tempat Anda dapat mengaksesnya dari shell Jenkins Anda, membuka kunci rantai kunci, dan mengimpornya:

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

Mengimpor sertifikat distribusi bekerja dengan cara yang sama. Saya tidak tahu mengapa Anda perlu membuka kunci rantai kunci untuk mengimpor .p12 dan bukan untuk .cer, tapi yah.

Anda juga akan membutuhkan akses ke profil penyediaan, saya akan segera mengedit instruksi tersebut ke dalam posting ini.


1
Bisakah Anda memperbarui dengan petunjuk akses profil penyediaan?
Lukas


5

Saya memiliki masalah yang sama dan telah mencari-cari jawabannya selama beberapa waktu. Inilah satu hal yang saya pelajari.

Saya menjalankan jenkins sebagai pengguna jenkins, pengguna yang dibuat oleh penginstal, dan seperti yang disebutkan orang lain, dia tidak memiliki akses ke rantai kunci yang sama dengan pengguna normal Anda. Alih-alih mencoba masuk sebagai pengguna jenkins, saya membuat proyek pembangunan kedua yang hanya memiliki satu langkah pembangunan yaitu "Execute Shell" di mana saya menjalankan perintah yang ingin saya uji sebagai pengguna jenkins.

Setelah saya mengaturnya, saya dapat menjalankan perintah

security list-keychains

Dan ini mengungkapkan kepada saya bahwa satu-satunya hal yang bisa dilihat jenkins adalah gantungan kunci sistem.

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

Dengan pengetahuan itu, saya kemudian membuka aplikasi Akses Rantai Kunci dan menyalin sertifikat "Pengembang iPhone: xxxx" saya ke dalam rantai kunci Sistem (Klik kanan, salin dari rantai kunci "login").

Ini membuat saya melewati kesalahan tanda kode sertifikat / pasangan kunci pribadi tetapi membuka yang lain dengan profil penyediaan (sepertinya masalah yang serupa, tetapi berbeda).


Saya mengalami masalah profil penyediaan yang sama, apakah ada pemikiran tentang cara mengatasinya?
Santthosh

2
Saya menemukan bahwa profil penyediaan untuk pengguna Jenkins disimpan di '/ Users / Shared / Jenkins / Library / MobileDevice / Provisioning Profiles' dan dengan demikian selangkah lebih maju untuk menyalin profil penyediaan dari dalam repo git saya ke lokasi itu. Hal ini memungkinkan saya memperbarui profil penyediaan dan memasukkannya ke SCM dan Jenkins secara otomatis mengambil perubahan itu.
Brianestey

jika Anda menyalin login.keychain ke pustaka Keychain jenkins Anda, Anda harus membukanya sehingga pengguna jenkins dapat membukanya dengan keamanan
ganoro

1
Anda adalah pahlawan, saya merobek rambut di kepala saya selama 2 hari, menyalin sertifikat ke sistem membantu
Roman Bobelyuk

5

Untuk mengubah kata sandi, Anda dapat menggunakan sudo passwd jenkins <new-pw>. Namun saya pikir akan lebih baik menggunakan perintah dscl untuk mengubah kata sandi.

Dalam instalasi saya, jenkins (penginstal resmi) memiliki shell pengguna / usr / bin / false. Mengubahnya menjadi bash memecahkan masalah tidak dapat masuk:

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

Sekarang Anda seharusnya sudah bisa masuk dengan su jenkins.


Ini sangat membantu saya - Saya memiliki masalah yang sama dengan create-keychainperintah yang tidak berfungsi dengan pengguna jenkins. Menjalankan perintah ini sepertinya memperbaiki masalah.
lxt

Ketika saya menjalankan perintah untuk mengubah kata sandi pengguna jenkins, saya dimintai kata sandi saat ini. Saya tidak tahu apa ini dan saya tidak bisa menekan enter. Ada saran?
CMVR

4

Saya telah menggunakan plugin Xcode untuk membangun aplikasi iOS. Dalam konfigurasi proyek.

memilih Tambahkan langkah pembuatan> Xcode> penandatanganan kode & opsi rantai kunci OS X.

centang Buka kunci gantungan kunci kotak dan tambahkan sebagai berikut (untuk contoh) masukkan deskripsi gambar di sini

kadang-kadang, jika saya mendapatkan kesalahan

Kesalahan Tanda Kode: ...

Saya akan membuka kembali Jenkins dan memasukkan sandi lagi untuk membuka kunci


3

Untuk orang yang mengalami masalah dengan gantungan kunci, saya sarankan Anda mencoba pemasang Jenkins alternatif saya di https://github.com/stisti/jenkins-app , unduh di https://github.com/stisti/jenkins-app/downloads

Jenkins.app menjalankan Jenkins dalam sesi pengguna Anda, jadi masalah akses rantai kunci tidak menjadi masalah :)


Kekhawatirannya adalah bahwa pengguna Jenkins ini berada di ruang pengguna bukan ruang daemon ... jadi jika penyerang dapat menyusupi pengguna Jenkins Anda, mereka akan memiliki akses penuh ke komputer Anda.
edelaney05

Ini mungkin menyelesaikan masalah yang saya dapatkan. Masalahnya adalah saya memiliki instalasi Jenkins yang sudah ada (dilakukan dengan cara lain) dan saya tidak ingin kehilangan semua build saya - dll. Apa yang akan terjadi dalam kasus saya?
Mike S

2

Jika Anda memiliki sudo, Anda dapat menggunakan passwd untuk mengubah kata sandi pengguna Jenkins. Kemudian Anda bisa mendapatkan kata sandi Jenkins.

Selain itu, saya tidak yakin apakah ini masalahnya, tetapi ANT Script yang saya gunakan melalui Jenkins memiliki ini:

<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
Sepertinya Anda memiliki penyiapan Jenkins di bawah pengguna "macbuild"; Saya berasumsi bahwa pengguna ini adalah pengguna dan bukan daemon. Saya pasti mengerti (sekarang) bahwa rantai kunci perlu dibuka kuncinya melalui argumen baris perintah (lihat komentar Simon Urbanek), tetapi saya masih tidak yakin bagaimana membuat rantai kunci default untuk daemon jenkins.
edelaney05

1

Untuk beberapa alasan, utilitas "keamanan" tidak berfungsi untuk saya di Lion dengan pemasangan Jenkins baru.

Setelah "sudo su jenkins" ia dapat membuat rantai kunci baru, tetapi diam-diam mengabaikan semua perintah "default-keychain -s ..." atau "unlock" yang mengembalikan status keluar nol dan tidak mencetak apa pun ke konsol. Cantuman gantungan kunci default atau login tidak memberikan apa-apa, daftar pencarian gantungan kunci hanya berisi rantai kunci sistem, dan saya tidak dapat mengubah ini apa pun yang saya ketik.

Setelah saya masuk ke desktop pengguna itu dan meluncurkan Utilitas Rantai Kunci, itu memang menunjukkan rantai kunci yang saya buat dan setelah itu semuanya berfungsi seperti yang dijelaskan di posting atas.

Saya bertanya-tanya apakah beberapa perilaku gantungan kunci awal berubah di Lion, atau saya kehilangan sesuatu?


Saya melakukan langkah-langkah di atas pada penginstalan Lion yang "bersih", jadi mungkinkah ada masalah dengan keamanan sebelum Anda bergabung? Kemungkinan lain adalah ada pembaruan keamanan / OS X sejak saya pertama kali memposting?
edelaney05

0

Saya menambahkan kunci pribadi dan publik untuk perusahaan ke rantai kunci. Saya menambahkan profil penyediaan untuk produksi yang akan saya buat.

Karena pengguna ini tidak memiliki akun, saya masuk ke devcenter dengan akun saya. Mendownload sertifikat penyediaan dan memuatnya ke Xcode.

Saya tidak menambahkan sertifikat khusus untuk akun peran build, mis. jenkins.

Saya menambahkan ini ke skrip build: buka kunci keamanan-keychain -p mySecretPassword seperti di atas, tapi ...

Saya membuat file ~ / .ssh / mypass dan menambahkan kata sandi ke file tersebut.

Kemudian perintahnya menjadi: buka kunci keamanan-keychain -p cat ~/.ssh/mypass

Bangunan berfungsi seperti juara. Saya mendapatkan file ipa, itu dimuat di pusat aplikasi dan berfungsi di perangkat.


0

Bisa juga menginstal & meluncurkan JenkinsCI sebagai pengguna OS X alih-alih daemon:

  1. instal jenkins menggunakan penginstal resmi ( https://jenkins-ci.org/ )
    • Klik berikutnya
    • Klik "Sesuaikan"
    • Batalkan pilihan "Mulai saat boot sebagai 'jenkins'" - * PENTING * opsi ini biasanya memungkinkan jenkins tanpa kepala yang tidak berfungsi dengan baik dengan akses rantai kunci
  2. Meluncurkan http://127.0.0.1:8080
    • verifikasi itu TIDAK diluncurkan
    • mungkin perlu menghentikan jenkins sudo launchctl unload /Library/LaunchDaemons/org.jenkins-ci.plist
  3. Klik dua kali /Applications/Jenkins/jenkins.war
    • tentu saja ini harus otomatis untuk memulai @ memulai
  4. Buka http://127.0.0.1:8080
    • verifikasi sekarang berjalan

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.