Tampilkan status Jenkins saat ini berdasarkan repo GitHub

182

Apakah ada cara untuk menunjukkan status pembangunan Jenkins di GitHub Readme.md proyek saya?

Saya menggunakan Jenkins untuk menjalankan build integrasi berkelanjutan. Setelah setiap komit, memastikan semuanya mengkompilasi, serta menjalankan tes unit dan integrasi, sebelum akhirnya menghasilkan dokumentasi dan merilis bundel.

Masih ada risiko secara tidak sengaja melakukan sesuatu yang merusak gedung. Akan baik bagi pengguna yang mengunjungi halaman proyek GitHub untuk mengetahui master saat ini dalam keadaan itu.

Jasper Blues
sumber
9
Mengapa ini dipilih? Apakah ada sesuatu yang jelas dalam panduan pengguna Jenkins yang saya lewatkan? Saya melakukan google sebelumnya, dan tidak dapat menemukan apa pun.
Jasper Blues
1
Server build Travis dapat melakukan sesuatu seperti ini, tapi saya menggunakan Jenkins di Osx. Inilah hal yang saya kejar: github.com/CocoaPods/CocoaPods
Jasper Blues
2
Tautan ke pertanyaan serupa merekomendasikan Travis, yang saat ini tidak mendukung iOS dan OSX, jadi itu tidak menjawab pertanyaan.
Jasper Blues
4
Ini bukan duplikat .. travis! =
Jenkins

Jawaban:

167

Oke, beginilah cara Anda mengatur Jenkins untuk mengatur status build GitHub. Ini mengasumsikan Anda sudah memiliki Jenkins dengan plugin GitHub yang dikonfigurasikan untuk melakukan build pada setiap push.

  1. Pergi ke GitHub, masuk, pergi ke Pengaturan , Token akses pribadi , klik Hasilkan token baru .

    tangkapan layar pengaturan GitHub

  2. Periksa repo: status (saya tidak yakin ini perlu, tetapi saya melakukannya, dan itu berhasil untuk saya).

    tangkapan layar dari generasi token GitHub

  3. Buat token, salin.

  4. Pastikan pengguna GitHub yang akan Anda gunakan adalah kolaborator repositori (untuk repo pribadi) atau anggota tim dengan akses push dan pull (untuk repo organisasi) ke repositori yang ingin Anda buat.

  5. Pergi ke server Jenkins Anda, masuk.

  6. Kelola JenkinsConfigure System
  7. Di bawah GitHub Web Hook pilih Biarkan Jenkins mengelola URL kait otomatis , lalu tentukan nama pengguna GitHub Anda dan token OAuth yang Anda dapatkan di langkah 3.

    tangkapan layar pengaturan global Jenkins

  8. Pastikan itu berfungsi dengan tombol Kredensial Uji . Simpan pengaturan.

  9. Temukan pekerjaan Jenkins dan tambahkan Setel status build di GitHub, komit ke langkah post-build

    tangkapan layar konfigurasi pekerjaan Jenkins

Itu dia. Sekarang lakukan test build dan buka repositori GitHub untuk melihat apakah itu berhasil. Klik Cabang di halaman repositori utama untuk melihat status build.

sceenshot dari halaman utama tempat Anda mengklik 'cabang'

Anda akan melihat tanda centang hijau:

tangkapan layar cabang GitHub dengan status build

Marius Gedminas
sumber
GitHub telah memperbarui alur kerja otorisasi mereka sekarang, pengguna tidak lagi menentukan apa yang harus diizinkan, melainkan aplikasi harus meminta apa yang mereka butuhkan selama otorisasi dan pengguna menyetujui izin yang diminta.
Ian Vaughan
6
Ini sepertinya tidak berfungsi dengan Jenkins> 1.609 dan plugin Github v 1.13.3 - Saya tidak dapat menemukan opsi "Biarkan Jenkins mengelola URL kait otomatis"
endre
2
Saya setuju dengan @pyeleven. Saya menggunakan Jenkins LTS 1.625.3 dengan Github Plugin 1.16.0 dan Github API Plugin 1.71. Opsi ini tidak muncul. Sebaliknya saya melihat drop down untuk kredensial, tetapi tidak ada kredensial terdaftar (meskipun saya memiliki kredensial yang diatur). Kredensial ini muncul ketika pergi ke Advance-> Kelola Tindakan Github Tambahan -> Konversi Login dan Kata Sandi ke token Github.
shehzan
4
Ini tampaknya ketinggalan zaman; tindakan pasca-pembangunan jawaban ini menyebutkan sekarang sudah dianggap usang dan ada yang kedua
Daenyth
1
Sekarang parameter post build build telah diubah. @Alex memiliki jawaban yang benar.
Bibek Mantree
51

Sementara itu, UI Jenkins dan GitHub telah berubah sedikit dan butuh beberapa saat untuk mengetahui cara mengkonfigurasi Jenkins sekarang dengan benar. Penjelasan di sini didasarkan pada Jenkins versi 2.121.1.

Saya juga berasumsi bahwa Anda telah mengonfigurasi Pekerjaan Jenkins Anda dipicu oleh webhook atau oleh polling. Itulah langkah-langkah yang telah saya ambil untuk membuatnya bekerja:

  1. Konfigurasikan Github: Buat Token Akses Pribadi dengan Lingkup OAuth repo:status
  2. Konfigurasikan Jenkins: Configure Systemdan tambahkan Rahasia OAuth sebagai Server GitHub - gunakan Secret Textsebagai metode otentikasi untuk meletakkan Rahasia OAuth di sana.
  3. Konfigurasikan Pekerjaan Jenkins Anda: Tambahkan Set GitHub commit statussebagai tindakan Post-build . Setel Hasil Status ke One of the default messages and statuses.
  4. Periksa hasil Anda di GitHub: Periksa apakah Anda mendapatkan status build dan lamanya eksekusi eksekusi di komit GitHub Anda.

Konfigurasikan Github

Buat Token Akses Pribadi


masukkan deskripsi gambar di sini


masukkan deskripsi gambar di sini


masukkan deskripsi gambar di sini


Konfigurasikan Jenkins

masukkan deskripsi gambar di sini


masukkan deskripsi gambar di sini


masukkan deskripsi gambar di sini


masukkan deskripsi gambar di sini


masukkan deskripsi gambar di sini


Konfigurasikan Pekerjaan Jenkins

masukkan deskripsi gambar di sini


masukkan deskripsi gambar di sini


masukkan deskripsi gambar di sini


Hasil

Anda sekarang akan melihat status untuk komit dan cabang Anda:

masukkan deskripsi gambar di sini

Alex
sumber
2
Wow akhirnya menemukan solusinya, terima kasih banyak! "Teks rahasia" itu membuatku bingung.
head01
Jenkins tampaknya mendorong status, tetapi repo pribadi saya tidak mengambilnya. Ada saran?
Patrick Michaelsen
Pembaruan: masalah saya terkait dengan privasi repo saya. Saya harus memiliki masalah dengan pengaturan kredensial saya.
Patrick Michaelsen
Pembaruan: akhirnya saya menemukan ini hanya berfungsi jika dipicu oleh dorongan git yang sebenarnya. Menjalankan pembuatan sendiri tidak memicu pembaruan status dengan benar.
Patrick Michaelsen
1
The Manage Hooksbox disorot tetapi tidak berdetak dalam gambar di atas, apakah itu berarti itu harus unticked ketika kita menyimpan?
Perplexabot
37

Apa yang saya lakukan cukup sederhana:

  1. Instal Plugin Hudson Post Task
  2. Buat Token Akses Pribadi di sini: https://github.com/settings/tokens
  3. Tambahkan Plugin Post Task yang selalu berhasil

    curl -XPOST -H "Authorization: token OAUTH TOKEN" https://api.github.com/repos/:organization/:repos/statuses/$(git rev-parse HEAD) -d "{
      \"state\": \"success\",
      \"target_url\": \"${BUILD_URL}\",
      \"description\": \"The build has succeeded!\"
    }"
    
  4. Tambahkan Plugin Post Task yang akan membuat kegagalan jika "ditandai build as failure"

    curl -XPOST -H "Authorization: token OAUTH TOKEN" https://api.github.com/repos/:organization/:repos/statuses/$(git rev-parse HEAD) -d "{
      \"state\": \"failure\",
      \"target_url\": \"${BUILD_URL}\",
      \"description\": \"The build has failed!\"
    }"
    
  5. Anda juga dapat menambahkan panggilan ke yang tertunda pada awal tes

    curl -XPOST -H "Authorization: token OAUTH TOKEN" https://api.github.com/repos/:organization/:repos/statuses/$(git rev-parse HEAD) -d "{
      \"state\": \"pending\",
      \"target_url\": \"${BUILD_URL}\",
      \"description\": \"The build is pending!\"
    }"
    

Cuplikan layar dari konfigurasi tugas build Post

Natim
sumber
Anda juga dapat melakukannya dari Pipeline - misalnya, Anda dapat memanggilnya shdan bahkan memanfaatkan penyimpanan kredensial Jenkins denganwithCredentials
Ivan Kolmychek
Untuk Teamcity Anda dapat menggunakan: confluence.jetbrains.com/display/TCD10/Commit+Status+Publisher
Natim
24

Plugin ini akan berfungsi: https://wiki.jenkins-ci.org/display/JENKINS/Embeddable+Build+Status+Plugin

Anda harus dapat menyematkan lencana seperti ini ke README.mdfile Anda :

membangun passing

Koraktor
sumber
6
Sayangnya, sepertinya GitHub mulai melakukan caching gambar-gambar ini pada beberapa layanan hosting gambar, dan mereka ditampilkan dengan tidak benar sekarang.
axel22
Sekarang berfungsi dengan baik jika Anda telah mengatur akses dengan benar (pengguna anonim seharusnya dapat melihat status build)
Dmitry Meshkov
11

The Komit Status API memungkinkan Anda untuk melihat " Repo Status API ".

Dan sejak 26 April 2013, Anda sekarang dapat melihat status pembangunan di halaman cabang repo GitHub Anda :

membangun status di cabang repo GitHub

Itu berarti itu adalah cara lain, dengan mengunjungi halaman proyek GitHub, untuk melihat status itu daripada hanya memiliki Jenkins.

Mulai 30 April 2013, titik akhir API untuk status komit telah diperluas untuk memungkinkan nama cabang dan tag, serta komit SHA .

VONC
sumber
Di mana saya harus menekan URL? Apakah ada Plugin atau saya harus menggunakan ikal pengguna dalam langkah membangun?
Ian Vaughan
@IanVaughan apa maksudmu "memukul"? Untuk melihat apa? Untuk melihat status, itu akan menjadi curl( developer.github.com/v3/repos/statuses/… )
VonC
Maaf, ya, saya tahu bahwa curl dapat digunakan, dan saya tahu antarmuka API, itu lebih merupakan tempat untuk menempatkan curl, dan jika tidak tersedia abstraksi level yang lebih tinggi dari curl? yaitu saya bisa menambahkan POST ikal sebelum membangun mulai menyatakan komit / PR sedang membangun, dan kemudian satu setelah, tapi ini semua tampaknya tingkat yang sangat rendah, dan berharap ada plugin tingkat yang lebih tinggi untuk melakukan hal-hal ini untuk saya.
Ian Vaughan
Sejak itu saya menemukan Janky, yang cukup berat untuk kasus penggunaan saya, tampaknya melakukan apa yang saya inginkan.
Ian Vaughan
7

Jika Anda memiliki Githubplugin yang diinstal pada Anda Jenkins, Anda dapat melakukannya di Post build actionsseperti ini:

setel status bangun di github

Remy Virin
sumber
13
Tampaknya gagal secara diam-diam.
chrylis -cautiouslyoptimistic-
4
Jawaban ini tidak memiliki detail: bagaimana cara membuat token akses OAuth di GitHub agar plugin GitHub menggunakan API yang diperlukan untuk mengatur status pembangunan? Izin apa yang diperlukan untuk token ini? Di mana dalam konfigurasi Jenkins, saya dapat menentukan nama pengguna / token?
Marius Gedminas
2
Ini benar-benar tidak membantu, bagaimana Anda bisa sampai ke jendela dialog ini?
Oz123
5

Tambahkan baris di bawah ini di README.md Anda dan ubah kedua URL sesuai dengan proyek jenkins Anda.

[![Build Status](https://jenkins../..project/lastBuild/buildStatus)](https://jenkins../..project/lastBuild/)
Kaushal
sumber
Apakah gambar dimuat secara otomatis? Sepertinya ini bukan untuk saya ...
HX_unbanned
Ya, itu tidak akan berhasil. Anda harus menyegarkan halaman Anda.
Kaushal
3

Sehubungan dengan mendirikan cabang yang dilindungi Jenkins dan GitHub. Saya menggunakan Jenkins 2.6, dan ini adalah langkah-langkah yang saya lakukan untuk membuatnya bekerja:

Di halaman web GitHub repositori Anda:

  1. Arahkan ke Pengaturan> Cabang.
  2. Di bawah Proteksi cabang, klik pada menu Pilih cabang yang ditenggelamkan dan pilih cabang yang ingin Anda setel sebagai cabang yang dilindungi.
  3. Aktifkan opsi sesuai kebutuhan.

Di Server Jenkins: (Pastikan Anda telah menginstal Plugin Git dan GitHub)

  1. Arahkan ke Manage Jenkins> Configure System.
  2. Di bawah GitHub, atur URL API ke https://api.github.com . Padahal ini adalah nilai default.
  3. Pilih token Anda yang dihasilkan untuk Kredensial. Jika Anda belum membuat token, klik Advanced ... lalu pada Tindakan tambahan, Anda dapat mengubah login dan kata sandi menjadi token dan menggunakannya sebagai kredensial Anda.

Selain itu, pastikan akun GitHub yang digunakan Jenkins Anda adalah kolaborator untuk repositori. Saya sudah mengaturnya dengan tingkat izin menulis.

Semoga ini membantu.

d 'ghostman
sumber
2

Saya mengikuti petunjuk dari Alex dan itu berhasil.

Namun, untuk GitHub Enterprise Anda perlu memodifikasi URL API saat menambahkan server ke Jenkins.

Misalnya, jika perusahaan Anda creditcard.com, URL Anda adalah

https://github.creditcard.com/api/v3/

Adan Amarillas
sumber
1

Edit:

Saya tidak lagi menggunakan pendekatan ini, silakan gunakan salah satu jawaban lain.

Pembaruan: apa yang akhirnya saya lakukan, untuk kasus khusus kami: (jawaban di atas sangat bagus - terima kasih!)

Karena server build kami tidak ada di internet, kami memiliki skrip untuk menerbitkan status build ke cabang gh-pages di github.

  • Mulai membangun prangko gagal
  • Akhir membangun prangko sukses
  • Proyek berjalan setelah proyek utama untuk mempublikasikan hasil -> status bangunan, dokumen API, laporan pengujian dan cakupan pengujian.

GitHub melakukan cache gambar, jadi kami membuat file .htaccess, yang menginstruksikan batas waktu cache singkat untuk gambar status-bangunan.

Letakkan ini di direktori dengan gambar build-status:

ExpiresByType image/png "access plus 2 minutes"

Ini skrip pembuatannya. Target yang menerbitkan ke gh-pages adalah '--publish.site.dry.run'

Dengan kurang dari 400 baris konfigurasi, kami memiliki:

  • Kompilasi cek
  • tes unit & integrasi
  • Laporan Uji
  • Laporan Cakupan Kode
  • API Documents
  • Penerbitan ke Github

. . dan skrip ini dapat dijalankan di dalam atau di luar Jenkins, sehingga:

  • Pengembang dapat menjalankan skrip ini sebelum melakukan, mengurangi kemungkinan bangunan rusak yang memengaruhi orang lain.
  • Kegagalan mudah direproduksi secara lokal.

Hasil:

Halaman utama proyek memiliki status build, diperbarui setelah setiap build, bersama dengan API Documents terbaru, hasil pengujian dan cakupan pengujian.

Jasper Blues
sumber
Umpan balik yang bagus, lebih tepat daripada jawaban saya. +1
VonC
1
Tautan skrip
pembuatan
Apakah Anda memiliki tautan langsung ke skrip Anda?
Ian
Sudah berhenti menggunakan pendekatan ini - saya pikir jawaban lain akan lebih baik.
Jasper Blues