แสดงสถานะปัจจุบันของเจนกินส์บิวด์บน GitHub repo


182

มีวิธีแสดงสถานะการสร้างเจนกินส์ใน GitHub Readme.md ของโครงการของฉันหรือไม่

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

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


9
เหตุใดจึงลงคะแนนนี้ มีบางสิ่งที่ชัดเจนในคู่มือผู้ใช้ของ Jenkins ที่ฉันพลาดไปหรือไม่ ฉันทำ google มาก่อนแล้วและหาอะไรไม่เจอ
Jasper Blues

1
Travis build server สามารถทำสิ่งนี้ได้ แต่ฉันใช้ Jenkins กับ Osx นี่คือสิ่งที่ฉันตามมา: github.com/CocoaPods/CocoaPods
Jasper Blues


2
ลิงก์ไปยังคำถามที่คล้ายกันแนะนำ Travis ซึ่งปัจจุบันยังไม่รองรับ iOS และ OSX ดังนั้นจึงไม่ตอบคำถาม
Jasper Blues

4
นี่ไม่ใช่สิ่งซ้ำซ้อน .. travis! = jenkins
Banjocat

คำตอบ:


167

ตกลงนี่คือวิธีที่คุณสามารถตั้งค่าเจนกินส์เพื่อตั้งสถานะการสร้าง GitHub สิ่งนี้ถือว่าคุณได้ Jenkins มาแล้วด้วยปลั๊กอิน GitHub ที่กำหนดค่าให้สร้างทุกครั้งที่กด

  1. ไปที่ GitHub เข้าสู่ระบบให้ไปที่การตั้งค่า , โทเค็นการเข้าถึงส่วนบุคคลคลิกสร้างโทเค็นใหม่

    สกรีนช็อตของการตั้งค่า GitHub

  2. ตรวจสอบrepo: สถานะ (ฉันไม่แน่ใจว่าจำเป็น แต่ฉันทำและทำงานได้สำหรับฉัน)

    สกรีนช็อตของการสร้างโทเค็น GitHub

  3. สร้างโทเค็นคัดลอก

  4. ตรวจสอบให้แน่ใจว่าผู้ใช้ GitHub ที่คุณจะใช้เป็นผู้ทำงานร่วมกันในที่เก็บ (สำหรับ repos ส่วนตัว) หรือเป็นสมาชิกของทีมที่มีการเข้าถึงแบบพุชและดึง (สำหรับ repos ขององค์กร) ไปยังที่เก็บที่คุณต้องการสร้าง

  5. ไปที่เซิร์ฟเวอร์ Jenkins ของคุณเข้าสู่ระบบ

  6. จัดการเจนกินส์กำหนดค่าระบบ
  7. ภายใต้GitHub Web Hookเลือกให้ Jenkins จัดการ URL ของ hook โดยอัตโนมัติจากนั้นระบุชื่อผู้ใช้ GitHub และโทเค็น OAuth ที่คุณได้รับในขั้นตอนที่ 3

    สกรีนช็อตของการตั้งค่าส่วนกลางของเจนกินส์

  8. ตรวจสอบว่ามันทำงานกับปุ่ม ทดสอบข้อมูลรับรอง บันทึกการตั้งค่า

  9. ค้นหางาน Jenkins และเพิ่มการตั้งค่าสถานะการสร้างบน GitHubยอมรับขั้นตอนหลังการสร้าง

    สกรีนช็อตของการกำหนดค่างานของเจนกินส์

แค่นั้นแหละ. ตอนนี้สร้างแบบทดสอบและไปที่พื้นที่เก็บข้อมูล GitHub เพื่อดูว่ามันทำงาน คลิกที่สาขาในหน้าพื้นที่เก็บข้อมูลหลักเพื่อดูสถานะการสร้าง

sceenshot ของหน้าหลักที่คุณคลิกที่ 'สาขา'

คุณควรเห็นเครื่องหมายถูกสีเขียว:

สกรีนช็อตของสาขา GitHub ที่มีสถานะบิลด์


GitHub ได้อัปเดตเวิร์กโฟลว์การให้สิทธิ์ตอนนี้ผู้ใช้ไม่ได้ระบุสิ่งที่จะอนุญาตอีกต่อไป แต่แอปพลิเคชันจะต้องขอสิ่งที่พวกเขาต้องการในระหว่างการให้สิทธิ์และผู้ใช้อนุมัติสิทธิ์ที่ร้องขอ
Ian Vaughan

6
ดูเหมือนจะไม่ทำงานกับ Jenkins> 1.609 และ Github plugin v 1.13.3 - ฉันไม่พบตัวเลือก "ปล่อยให้ Jenkins จัดการ URL ของ hook โดยอัตโนมัติ"
สิ้นสุดเมื่อ

2
ฉันเห็นด้วยกับ @pyeleven ฉันใช้ Jenkins LTS 1.625.3 กับ Github Plugin 1.16.0 และ Github API Plugin 1.71 ตัวเลือกนี้ไม่ปรากฏขึ้น ค่อนข้างฉันเห็นรายการแบบหล่นลงสำหรับข้อมูลประจำตัว แต่ไม่มีรายชื่อหนังสือรับรอง (แม้ว่าฉันจะตั้งค่าข้อมูลรับรอง) ข้อมูลรับรองเหล่านี้จะปรากฏขึ้นเมื่อไปที่ Advance-> จัดการ Github Actions เพิ่มเติม -> เปลี่ยนชื่อล็อกอินและรหัสผ่านเป็นโทเค็น Github
Shehzan

4
ดูเหมือนว่าจะล้าสมัย การกระทำภายหลังการสร้างคำตอบที่กล่าวถึงตอนนี้ถูกทำเครื่องหมายเป็นเลิกใช้แล้วและมีอีกหนึ่ง
Daenyth

1
ตอนนี้โพสต์พารามิเตอร์ขั้นตอนการสร้างมีการเปลี่ยนแปลง @Alex มีคำตอบที่ถูกต้อง
Bibek Mantree

51

ในขณะเดียวกัน UI ของ Jenkins และ GitHub ได้เปลี่ยนไปเล็กน้อยและผมใช้เวลาสักครู่ในการหาวิธีกำหนดค่า Jenkins ในขณะนี้อย่างถูกต้อง คำอธิบายที่นี่ขึ้นอยู่กับ Jenkins เวอร์ชัน 2.121.1

ฉันยังสันนิษฐานว่าคุณได้กำหนดค่างานเจนกินส์ของคุณแล้วจะถูกเรียกโดย webhook หรือโดยการเลือกตั้ง นี่คือขั้นตอนที่ฉันได้ดำเนินการเพื่อให้มันทำงานได้:

  1. กำหนดค่า Github: สร้างโทเค็นการเข้าถึงส่วนบุคคลด้วยขอบเขต OAuth repo:status
  2. กำหนดค่า Jenkins: Configure Systemและเพิ่ม OAuth Secret เป็นเซิร์ฟเวอร์ GitHub - ใช้Secret Textเป็นวิธีการตรวจสอบสิทธิ์เพื่อใส่ OAuth Secret ไว้ในนั้น
  3. การกำหนดค่าของคุณเจนกินส์การทำงาน: เพิ่มSet GitHub commit statusเป็นโพสต์สร้างการกระทำ ตั้งค่าผลสถานะOne of the default messages and statusesการ
  4. ตรวจสอบผลลัพธ์ของคุณใน GitHub: ตรวจสอบว่าคุณได้รับสถานะบิลด์และระยะเวลาดำเนินการบิลด์ที่ GitHub ของคุณส่งมอบหรือไม่

กำหนดค่า Github

สร้างโทเค็นการเข้าถึงส่วนบุคคล


ป้อนคำอธิบายรูปภาพที่นี่


ป้อนคำอธิบายรูปภาพที่นี่


ป้อนคำอธิบายรูปภาพที่นี่


กำหนดค่าเจนกินส์

ป้อนคำอธิบายรูปภาพที่นี่


ป้อนคำอธิบายรูปภาพที่นี่


ป้อนคำอธิบายรูปภาพที่นี่


ป้อนคำอธิบายรูปภาพที่นี่


ป้อนคำอธิบายรูปภาพที่นี่


กำหนดค่างาน Jenkins

ป้อนคำอธิบายรูปภาพที่นี่


ป้อนคำอธิบายรูปภาพที่นี่


ป้อนคำอธิบายรูปภาพที่นี่


ผลลัพธ์

ตอนนี้คุณจะเห็นสถานะของการผูกพันและสาขาของคุณ:

ป้อนคำอธิบายรูปภาพที่นี่


2
ว้าวในที่สุดก็พบวิธีแก้ปัญหาขอบคุณมาก! "ข้อความลับ" ทำให้ฉันสับสน
head01

เจนกินส์ดูเหมือนว่าจะผลักดันสถานะ แต่ repo ส่วนตัวของฉันไม่ได้รับพวกเขา ข้อเสนอแนะใด ๆ
Patrick Michaelsen

อัปเดต: ปัญหาของฉันเกี่ยวข้องกับความเป็นส่วนตัวของ repo ของฉัน ฉันต้องมีปัญหากับการตั้งค่าข้อมูลประจำตัวของฉัน
Patrick Michaelsen

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

1
Manage Hooksกล่องจะถูกเน้น แต่ไม่ ticked ในภาพข้างต้นหมายความว่ามันควรจะเป็น unticked เมื่อเราบันทึก?
Perplexabot

37

สิ่งที่ฉันทำง่ายมาก:

  1. ติดตั้งปลั๊กอินงานโพสต์ของฮัดสัน
  2. สร้างโทเค็นการเข้าถึงส่วนบุคคลที่นี่: https://github.com/settings/tokens
  3. เพิ่มปลั๊กอินงานโพสต์ที่ประสบความสำเร็จเสมอ

    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. เพิ่มปลั๊กอินงานโพสต์ที่จะทำให้เกิดความล้มเหลวหาก "ทำเครื่องหมายว่าบิลด์เป็นความล้มเหลว"

    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. นอกจากนี้คุณยังสามารถเพิ่มการโทรไปยังค้างอยู่ที่จุดเริ่มต้นของการทดสอบ

    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!\"
    }"
    

สกรีนช็อตของการกำหนดค่าภารกิจบิลต์


คุณสามารถทำได้จาก Pipeline - ตัวอย่างเช่นคุณสามารถเรียกมันผ่านshและใช้ประโยชน์จากที่เก็บข้อมูลรับรอง Jenkins ด้วยwithCredentials
Ivan Kolmychek

สำหรับ Teamcity คุณสามารถใช้: confluence.jetbrains.com/display/TCD10/Commit+Status+Publisher
Natim

24

ปลั๊กอินนี้ควรใช้งานได้: https://wiki.jenkins-ci.org/display/JENKINS/Embeddable+Build+Status+Plugin

คุณควรฝังป้ายเช่นนี้ลงในREADME.mdไฟล์ของคุณ:

สร้างผ่าน


6
น่าเศร้าที่ดูเหมือนว่า GitHub จะเริ่มแคชรูปภาพเหล่านี้ในบริการโฮสติ้งรูปภาพและตอนนี้พวกเขากำลังแสดงอย่างไม่ถูกต้อง
axel22

ตอนนี้ก็ทำงานได้ดีถ้าคุณได้ตั้งอย่างถูกต้องในการเข้าถึง (ผู้ใช้ที่ไม่ระบุชื่อควรจะสามารถที่จะเห็นการสร้างสถานะ)
Dmitry Meshkov

11

Commit สถานะ APIจะช่วยให้คุณดู " Repo สถานะ API "

และตั้งแต่ 26 เมษายน 2013 ตอนนี้คุณสามารถดูสถานะการสร้างบนหน้าสาขา repo GitHub :

สร้างสถานะในสาขา repit GitHub

ซึ่งหมายความว่าเป็นอีกวิธีหนึ่งโดยไปที่หน้าโครงการ GitHub เพื่อดูสถานะเหล่านั้นแทนที่จะมีเพียงเจนกินส์

เริ่มต้น 30 เมษายน 2013 ที่ปลายทาง API สำหรับการกระทำสถานะได้รับการขยายที่จะอนุญาตให้สาขาและแท็กชื่อเช่นเดียวกับการกระทำ Shas


ฉันจะวาง URL ที่จะตีได้ที่ไหน มีปลั๊กอินหรือฉันต้องทำขั้นตอนบิลด์หรือไม่
Ian Vaughan

@IanVaughan คุณหมายถึงอะไร "to hit"? เพื่อดูอะไร หากต้องการดูสถานะนั้นจะเป็นcurl( developer.github.com/v3/repos/statuses/
......

ขออภัยใช่ฉันรู้ว่าสามารถใช้ curl ได้และฉันรู้ว่าส่วนต่อประสาน API นั้นเป็นเรื่องของการวาง curl และถ้าไม่มีระดับนามธรรมที่สูงขึ้นจาก curl ก็สามารถทำได้ นั่นคือฉันสามารถเพิ่ม curt POST ก่อนที่บิลด์จะเริ่มคอมมิชชัน / PR กำลังสร้างและหลังจากนั้นหนึ่ง แต่ทั้งหมดนี้ดูเหมือนจะอยู่ในระดับต่ำมากและหวังว่าจะมีปลั๊กอินระดับสูงกว่าที่จะทำสิ่งนี้ให้ฉัน
Ian Vaughan

ฉันพบตั้งแต่ Janky ซึ่งค่อนข้างหนักสำหรับกรณีใช้ของฉันดูเหมือนว่าจะทำสิ่งที่ฉันต้องการ
Ian Vaughan


7

หากคุณGithubติดตั้งปลั๊กอินไว้Jenkinsคุณสามารถทำได้ในPost build actionsลักษณะนี้:

ตั้งสถานะการสร้างบน GitHub



4
คำตอบนี้ไม่มีรายละเอียด: ฉันจะสร้างโทเค็นการเข้าถึง OAuth บน GitHub เพื่อให้ปลั๊กอิน GitHub ใช้ API ที่จำเป็นในการตั้งค่าสถานะการสร้างได้อย่างไร โทเค็นนี้ต้องการการอนุญาตใดบ้าง ฉันสามารถระบุชื่อผู้ใช้ / โทเค็นได้ที่ไหน
Marius Gedminas

2
สิ่งนี้ไม่เป็นประโยชน์จริง ๆ คุณจะไปที่หน้าต่างข้อความนี้ได้อย่างไร
Oz123

5

เพิ่มบรรทัดด้านล่างในREADME.mdของคุณและเปลี่ยน URL ทั้งสองตามโครงการเจนกินส์ของคุณ

[![Build Status](https://jenkins../..project/lastBuild/buildStatus)](https://jenkins../..project/lastBuild/)

กราฟิกถูกโหลดโดยอัตโนมัติหรือไม่ ดูเหมือนว่าไม่ใช่สำหรับฉัน ...
HX_unbanned

ใช่มันจะไม่ทำงาน คุณต้องรีเฟรชหน้า
Kaushal

3

เกี่ยวกับการจัดตั้งสาขาที่ได้รับการคุ้มครองของเจนกินส์และกิตฮับ ฉันใช้ Jenkins 2.6 และนี่คือขั้นตอนที่ฉันทำเพื่อให้ใช้ได้:

บนเว็บเพจ GitHub ของที่เก็บของคุณ:

  1. นำทางไปยังการตั้งค่า> สาขา
  2. ภายใต้ป้องกันสาขาคลิกที่เมนูเลือกสาขาที่จมอยู่และเลือกสาขาที่คุณต้องการตั้งเป็นสาขาที่ได้รับการป้องกัน
  3. เปิดใช้งานตัวเลือกตามต้องการ

บนเซิร์ฟเวอร์เจนกินส์: (ตรวจสอบให้แน่ใจว่าคุณติดตั้งปลั๊กอิน Git และ GitHub แล้ว)

  1. นำทางไปยัง Manage Jenkins> Configure System
  2. ภายใต้ GitHub ตั้ง URL API เพื่อhttps://api.github.com แม้ว่านี่จะเป็นค่าเริ่มต้น
  3. เลือกโทเค็นที่คุณสร้างขึ้นสำหรับข้อมูลรับรอง หากคุณยังไม่ได้สร้างโทเค็นให้คลิกที่ขั้นสูง ... จากนั้นในการดำเนินการเพิ่มเติมคุณสามารถแปลงล็อกอินและรหัสผ่านของคุณเป็นโทเค็นและใช้เป็นข้อมูลประจำตัวของคุณ

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

หวังว่านี่จะช่วยได้


2

ฉันทำตามคำแนะนำจากAlexและใช้งานได้

แต่สำหรับ GitHub Enterprise คุณต้องแก้ไข API URL เมื่อเพิ่มเซิร์ฟเวอร์ในเจนกินส์

ตัวอย่างเช่นหาก บริษัท ของคุณคือ creditcard.com URL ของคุณจะเป็น

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



1

แก้ไข:

ฉันไม่ได้ใช้วิธีการนี้อีกต่อไปโปรดใช้หนึ่งในคำตอบอื่น ๆ

Update: สิ่งที่ฉันทำลงเอยสำหรับกรณีเฉพาะของเรา: (คำตอบข้างต้นดีมาก - ขอบคุณ!)

เนื่องจากเซิร์ฟเวอร์การสร้างของเราไม่ได้อยู่บนอินเทอร์เน็ตเราจึงมีสคริปต์เพื่อเผยแพร่สถานะการสร้างไปยังสาขา gh-pages ใน github

  • จุดเริ่มต้นของการสร้างแสตมป์ล้มเหลว
  • สิ้นสุดการสร้างความสำเร็จของแสตมป์
  • โครงการทำงานหลังจากโครงการหลักเพื่อเผยแพร่ผลลัพธ์ -> สถานะการสร้างเอกสาร API รายงานการทดสอบและการทดสอบครอบคลุม

GitHub เก็บภาพดังนั้นเราจึงสร้างไฟล์. htaccess ขึ้นมาเพื่อสั่งให้หมดเวลาแคชสั้น ๆ สำหรับภาพสถานะบิลด์

วางสิ่งนี้ลงในไดเร็กทอรีด้วยอิมเมจสถานะบิลด์:

ExpiresByType image/png "access plus 2 minutes"

นี่คือสคริปต์สร้าง เป้าหมายที่เผยแพร่ไปยัง gh-pages คือ'--publish.site.dry.run'

ด้วย config น้อยกว่า 400 บรรทัดเรามี:

  • ตรวจสอบคอมไพล์
  • การทดสอบหน่วยและการรวม
  • รายงานผลการทดสอบ
  • รายงานการครอบคลุมรหัส
  • เอกสาร API
  • เผยแพร่ไปยัง Github

. . และสคริปต์นี้สามารถทำงานในหรือนอกเจนกิ้นส์เพื่อ:

  • นักพัฒนาสามารถเรียกใช้สคริปต์นี้ก่อนที่จะส่งมอบลดโอกาสของการสร้างที่เสียหายซึ่งส่งผลกระทบต่อผู้อื่น
  • ความล้มเหลวเป็นเรื่องง่ายที่จะทำซ้ำในท้องถิ่น

ผลลัพธ์:

หน้าหลักของโครงการมีสถานะบิลด์การอัปเดตหลังจากแต่ละบิลด์พร้อมด้วยเอกสาร API ล่าสุดผลการทดสอบและการครอบคลุมการทดสอบ


ข้อเสนอแนะที่ยอดเยี่ยมแม่นยำกว่าคำตอบของฉัน +1
VonC

1
ลิงค์สคริปต์สำหรับ Build is Dead
Saikat

คุณมีลิงค์ไปยังสคริปต์ของคุณหรือไม่?
เอียน

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