เราใช้เจนกิ้นส์เป็นตัวลดลงเป็นสองสามปีแล้วและนี่คือข้อดีและข้อเสีย:
ข้อดี
หากคุณกำลังจัดการกระบวนการจำนวนมากในเซิร์ฟเวอร์หลายสิบเครื่องและสภาพแวดล้อมที่หลากหลายมันทำให้ง่ายขึ้น คุณจะได้รับการแจ้งเตือนทางอีเมลนอกกรอบแดชบอร์ดทั่วไปสำหรับทุกอย่างเว็บอินเตอร์เฟสสำหรับบันทึกและวิธีง่ายๆในการตั้งค่าโหนดเพิ่มเติมเพื่อเรียกใช้งาน ทีมสนับสนุนโดยเฉพาะอย่างยิ่งขอบคุณที่มีที่ตั้งส่วนกลางนี้เพื่อตรวจสอบปัญหาและทำงานซ้ำ
ปลั๊กอินระบบนิเวศของเจนกินส์นั้นใช้งานได้ดีและมีโฮสต์ของฟังก์ชั่นเพิ่มเติม ... ฉันคิดว่านี่เป็นคุณสมบัติ 'นักฆ่า' ของเจนกินส์เพราะถ้าเจนกินส์เองไม่ได้ให้สิ่งที่คุณต้องการ (บ่อยครั้ง) มากกว่า บ่อยกว่าไม่มีปลั๊กอินที่ทำ รายการโปรดของฉันบางส่วน: คอลัมน์ Cron, สร้างใหม่, พารามิเตอร์ NodeLabel, ตัวแยกวิเคราะห์บันทึกข้อมูลและอีเมลต่อ
การสนับสนุนการกำหนดตารางเวลาขั้นสูง / ทริกเกอร์ขั้นสูง: ไวยากรณ์กำหนดการโดยทั่วไปคือ cron ดังนั้นคุณจึงมีความยืดหยุ่นเช่นเดียวกับที่นี่ แต่จะเสริมด้วย Triggers, REST API และ Groovy / Java API
จุดด้อย
จุดสำคัญของความล้มเหลว: เนื่องจากงานทั้งหมดของคุณถูกเตะออกจากเซิร์ฟเวอร์เดียวหากกล่องนั้นหยุดทำงานและไม่มีใครสังเกตเห็นปัญหาใหญ่ ดังนั้นคุณควรมีการตรวจสอบที่ดีเพื่อให้เกิดการหยุดทำงานทันทีเช่นเดียวกับการกำหนดค่าทั้งหมดของคุณที่บันทึกไว้ในการควบคุมแหล่งที่มา แม้ว่าคุณจะไม่สามารถสำรองเซิร์ฟเวอร์ดั้งเดิมได้ตราบใดที่คุณมีงานกำหนดค่าของคุณก็เป็นเรื่องที่ไม่สำคัญที่จะให้พวกเขาติดตั้งที่อื่น หากเวลาในการแก้ไขปัญหาเป็นเรื่องที่กังวลการมีสแตนด์บายที่กำหนดค่าไว้ล่วงหน้าแล้วบางแห่งอาจเป็นความคิดที่ดีเช่นกัน
หากคุณมีหลายสภาพแวดล้อม (Dev, UAT, Prod) โดยทั่วไปคุณจะมีเวอร์ชันที่แตกต่างกันเล็กน้อยของงานที่ทำงานในแต่ละสภาพแวดล้อม การมีงานทั้งหมดเหล่านี้ในเจนกินส์หนึ่งสามารถกลายเป็นเรื่องไม่สะดวกและการกำหนดค่าด้วยตนเองจะกลายเป็นความเจ็บปวดครั้งใหญ่ ในกรณีของเราเราเรียกใช้ตัวอย่าง 'Cron' ของ Jenkins แยกกันสำหรับแต่ละสภาพแวดล้อม อินสแตนซ์ถูกติดตั้งและกำหนดค่าโดยอัตโนมัติโดยใช้เครื่องมือการปรับใช้ภายในองค์กร คุณอาจไม่มีอะไรแบบนั้น แต่มีเครื่องมือโอเพ่นซอร์สที่ทำสิ่งที่คล้ายกัน (สร้างการกำหนดค่าโดยใช้แม่แบบ) หากคุณสามารถแก้ปัญหาการสร้างการกำหนดค่าสิ่งนี้จะทำให้การตั้งค่าและการปรับใช้ Jenkins ง่ายขึ้นมากและยังทำให้การควบคุมทุกอย่างของคุณอยู่ในแหล่งข้อมูลได้ง่ายขึ้น
การอัพเกรดเจนกินส์บางครั้งก็เป็นการทำลายการทำงานโดยเฉพาะอย่างยิ่งกับปลั๊กอิน อย่าอัปเกรดอินสแตนซ์ของ Jenkins ที่มีความสำคัญต่อภารกิจจนกว่าคุณจะได้ลองเวอร์ชันใหม่ก่อน นี่คือที่ที่มีสภาพแวดล้อมของ Dev Dev ที่มี Jenkins เป็นของตัวเอง
บางทีสิ่งหนึ่งที่จะเน้นย้ำ: เราใช้ Jenkins สำหรับ CI ด้วยเช่นกัน แต่นี่เป็นตัวอย่างที่แยกจากกัน ... อินสแตนซ์ 'cron' นั้นอุทิศให้กับการจัดการงานและอินสแตนซ์ 'CI' ทุ่มเทให้กับ CI การแยกข้อกังวลออกดูเหมือนจะทำให้ทุกอย่างสะอาดขึ้น
ในฐานะที่เป็นข้อความด้านข้างฉันใช้ Jenkins แทน cron ในกล่อง Linux ที่บ้าน :)
โดยวิธีการนี้เป็นจริงกรณีใช้เจนกินส์สวย ตัวอย่างเช่น Sandia National Lab ใช้ Jenkins ด้วยวิธีนี้:
https://software.sandia.gov/trac/fast/wiki/Hudson
และมีบทความบล็อกและแบบฝึกหัดมากมายที่อธิบายสิ่งนี้ นี่คือตัวอย่างสองสามอย่าง:
http://blog.vuksan.com/2011/08/22/using-jenkins-as-a-cron-server/
http://morgajel.net/2011/12/12/1108
ฉันควรเพิ่มว่าเรื่องนี้เกี่ยวข้องกับเจนกินส์จริง ๆ และไม่ใช่เครื่องมือ CI ทั้งหมดโดยทั่วไป เพียงเพราะเจนกิ้นส์มีความเหมาะสมที่จะทำสิ่งนี้ไม่ได้หมายความว่าคนอื่น ๆ (TeamCity, buildbot ฯลฯ ) คือ ...