แสดงสถานะปัจจุบันของเจนกินส์บิวด์บน 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.