ฉันมีปัญหาในการขอให้ Jenkins สร้างแท็กที่ระบุ แท็กเป็นส่วนหนึ่งของ build parametrized แต่ฉันไม่รู้วิธีส่งผ่านไปยังปลั๊กอิน git เพื่อสร้างแท็กนั้น นี่ใช้เวลา 3 ชั่วโมงในวันของฉันและฉันยอมรับความพ่ายแพ้ต่อปรมาจารย์ที่กองซ้อน
ฉันมีปัญหาในการขอให้ Jenkins สร้างแท็กที่ระบุ แท็กเป็นส่วนหนึ่งของ build parametrized แต่ฉันไม่รู้วิธีส่งผ่านไปยังปลั๊กอิน git เพื่อสร้างแท็กนั้น นี่ใช้เวลา 3 ชั่วโมงในวันของฉันและฉันยอมรับความพ่ายแพ้ต่อปรมาจารย์ที่กองซ้อน
คำตอบ:
ฉันสามารถทำได้โดยใช้พารามิเตอร์ "branch to build":
Branch Specifier (blank for default): tags/[tag-name]
แทนที่ [tag-name] ด้วยชื่อแท็กของคุณ
HEAD
คือการแก้ไขของใหม่ล่าสุด ตรรกะของปลั๊กอิน git ดูเหมือนจะเปรียบเทียบการแก้ไขทั้งสองนี้ซึ่งในที่เก็บของฉันมักจะไม่เท่ากันดังนั้นการสร้างใหม่จึงถูกเรียกใช้เสมอ
คำตอบเหล่านี้ไม่เพียงพอสำหรับฉันโดยใช้ Jenkins CI v.1.555, Git Client plugin v.1.6.4 และ Git plugin 2.0.4
ฉันต้องการงานสร้างสำหรับที่เก็บ Git หนึ่งแท็กเฉพาะแท็กคงที่ (กล่าวคือไม่กำหนดพารามิเตอร์) ผมต้องซ่อมแซมกันแก้ปัญหาจากคำตอบต่างๆบวก"สร้างแท็ก Git" บล็อกโพสต์ โดยอ้าง Thilo
git push --tags
+refs/tags/*:refs/remotes/origin/tags/*
*/tags/<TAG_TO_BUILD>
(แทนที่<TAG_TO_BUILD>
ด้วยชื่อแท็กจริงของคุณ)การเพิ่ม Refspec สำหรับฉันกลายเป็นเรื่องสำคัญ แม้ว่าดูเหมือนว่าที่เก็บ git จะดึงข้อมูลระยะไกลทั้งหมดตามค่าเริ่มต้นเมื่อฉันเว้นว่างไว้ แต่ปลั๊กอิน Git ก็จะไม่พบแท็กของฉันโดยสิ้นเชิง เฉพาะเมื่อฉันระบุอย่างชัดเจน "รับแท็กระยะไกล" ในฟิลด์ Refspec เท่านั้นปลั๊กอิน Git ที่สามารถระบุและสร้างจากแท็กของฉันได้
อัปเดต 2014-5-7 : น่าเสียดายที่โซลูชันนี้มาพร้อมกับผลข้างเคียงที่ไม่พึงปรารถนาสำหรับ Jenkins CI (v.1.555) และกลไกการแจ้งเตือนแบบพุชที่เก็บ Git à la Stash Webhook to Jenkins : เมื่อใดก็ตามที่มีการอัปเดตสาขาใด ๆในพื้นที่เก็บข้อมูล ในการผลักดันงานสร้างแท็กก็จะเริ่มทำงานอีกครั้ง สิ่งนี้นำไปสู่การสร้างงานแท็กเดิมซ้ำแล้วซ้ำอีกโดยไม่จำเป็น ฉันได้ลองกำหนดค่างานทั้งที่มีและไม่มีตัวเลือก "บังคับให้สำรวจโดยใช้พื้นที่ทำงาน" และดูเหมือนว่าจะไม่มีผลใด ๆ วิธีเดียวที่ฉันสามารถป้องกันไม่ให้เจนกินส์สร้างงานสร้างที่ไม่จำเป็นสำหรับงานแท็กคือการล้างฟิลด์ Refspec (เช่นลบ+refs/tags/*:refs/remotes/origin/tags/*
)
หากใครพบวิธีแก้ปัญหาที่สวยงามกว่านี้โปรดแก้ไขคำตอบนี้ด้วยการอัปเดต ตัวอย่างเช่นฉันสงสัยว่าสิ่งนี้อาจไม่เกิดขึ้นหาก refspec โดยเฉพาะ+refs/tags/<TAG TO BUILD>:refs/remotes/origin/tags/<TAG TO BUILD>
แทนที่จะเป็นเครื่องหมายดอกจัน catch-all อย่างไรก็ตามในตอนนี้โซลูชันนี้ใช้ได้ผลสำหรับเราเราเพียงแค่ลบ Refspec พิเศษหลังจากงานสำเร็จ
+refs/heads/*:refs/remotes/origin/*
+refs/heads/*:refs/remotes/origin/* +refs/tags/*:refs/remotes/origin/tags/*
(ฉันไม่ได้ทำงานกับ refspecs มากนักดังนั้นจึงต้องใช้การทดลองเพื่อเรียนรู้ว่าฟิลด์นี้คั่นด้วยช่องว่าง)
คุณไม่สามารถบอกให้เจนกินส์สร้างจากชื่ออ้างอิงได้หรือไม่? ถ้าเป็นเช่นนั้นก็
refs/tags/tag-name
จากคำถามทั้งหมดที่ฉันเห็นเกี่ยวกับ Jenkins และ Hudson ฉันขอแนะนำให้เปลี่ยนไปใช้ TeamCity ฉันไม่ต้องแก้ไขไฟล์การกำหนดค่าใด ๆ เพื่อให้ TeamCity ทำงานได้
git push --tags
หากคุณใช้ไปป์ไลน์ของ Jenkins และต้องการเช็คเอาต์แท็กเฉพาะ (เช่นTAG
พารามิเตอร์ของบิลด์ของคุณ) คุณสามารถทำได้ดังนี้
stage('Checkout') {
steps {
checkout scm: [$class: 'GitSCM', userRemoteConfigs: [[url: 'YOUR_GIT_REPO_URL.git', credentialsId: 'YOUR_GIT_CREDENTIALS_ID' ]], branches: [[name: 'refs/tags/${TAG}']]], poll: false
}
}
ใน Jenkins ล่าสุด (1.639 ขึ้นไป) คุณสามารถ:
1.0.1
) ในสาขาเพื่อสร้างฟิลด์
ฉันทำสิ่งนี้และได้ผล:
Source Code Management
Git
Repositories
Advance
Name: ref
Refspec : +refs/tags/*:refs/remotes/origin/tags/*
Branches to build
Branch Specifier (blank for 'any') : v0.9.5.2
บันทึกของ Jenkins ยืนยันว่าได้รับแหล่งที่มาจากแท็ก
ตรวจสอบการแก้ไข0b4d6e810546663e931cccb45640583b596c24b9
(v0.9.5.2)
refspec
เคล็ดลับคือการคลิกปุ่มขั้นสูง
ฉันตั้งค่าฟิลด์ Advanced-> Refspec เป็น refs/tags/[your tag name]
ไป ดูเหมือนง่ายกว่าคำแนะนำอื่น ๆ สำหรับ Refspec แต่มันก็ใช้ได้ดีสำหรับฉัน
อัปเดต 23/7/2557 - อันที่จริงหลังจากการทดสอบเพิ่มเติมปรากฎว่าไม่ได้ผลตามที่คาดไว้ ดูเหมือนว่าเวอร์ชัน HEAD ยังคงถูกตรวจสอบ โปรดเลิกทำสิ่งนี้เป็นคำตอบที่ยอมรับ ฉันได้รับวิธีแก้ปัญหาโดยติดตามโพสต์จากgotgenesในหัวข้อนี้(30 มีนาคม) ปัญหาที่กล่าวถึงในโพสต์ของการทริกเกอร์บิวด์ที่ไม่จำเป็นนั้นไม่ใช่ปัญหาสำหรับฉันเนื่องจากงานของฉันถูกทริกเกอร์จากงานอัพสตรีมไม่ใช่จากการสำรวจ SCM
อัปเดต APR-2018 - โปรดทราบในความคิดเห็นว่าสิ่งนี้ใช้ได้กับคน ๆ เดียวและเห็นด้วยกับเอกสารของ Jenkins
refs/tags/<tagname>
คือสิ่งที่เอกสารของ Jenkins ระบุว่าควรใช้และมันก็ใช้ได้ดีสำหรับฉัน บางทีปลั๊กอินอาจมีข้อผิดพลาดในขณะที่โพสต์ต้นฉบับ แต่ ... ณ เดือนเมษายน 2018 นี่คือคำตอบที่ถูกต้อง
refs/tags
<tagname>
YMMV แต่ ... มันทำงานได้ดีตามวัตถุประสงค์ของฉัน
ฉันสามารถให้ Jenkins สร้างแท็กได้โดยตั้งค่า Refspec และ Branch Specifier ตามรายละเอียดในโพสต์บล็อกนี้นี้
ฉันต้องตั้งชื่อที่เก็บด้วย (เป็น "ต้นกำเนิด" ในกรณีของฉัน) เพื่อที่ฉันจะได้อ้างอิงใน Refspec (มิฉะนั้นดูเหมือนจะใช้ชื่อที่สร้างขึ้นแบบสุ่ม)
สิ่งที่ฉันทำในตอนท้ายคือ:
jenkins-target
และให้เจนกินส์ติดตามสิ่งนั้นjenkins-target
jenkins-target
สาขาฉันไม่แน่ใจว่าสิ่งนี้จะใช้ได้กับทุกคนหรือไม่โปรเจ็กต์ของฉันค่อนข้างเล็กแท็กและสิ่งต่างๆไม่มากนัก แต่มันทำได้ง่ายมากไม่ต้องยุ่งกับ refspecs และพารามิเตอร์และสิ่งต่างๆ :-)
คุณสามารถสร้างได้แม้กระทั่งประเภทแท็กตัวอย่างเช่นการ1.2.3-alpha43
ใช้สัญลักษณ์แทน:
Refspec: +refs/tags/*:refs/remotes/origin/tags/*
ตัวระบุสาขา: origin/tags/1.2.3-alpha*
คุณยังสามารถเลือก " สร้างเมื่อมีการพุชการเปลี่ยนแปลงไปที่ GitHub " เพื่อเริ่มการพุช แต่คุณต้องเพิ่มการดำเนินการ"สร้าง"ในเว็บฮุค
การเพิ่มสองเซ็นต์ของฉันที่นี่เนื่องจากฉันไม่เห็นคำตอบที่ใช้ตัวเลือก "สร้างด้วยพารามิเตอร์" ในเจนกินส์
ที่นี่ฉันใช้คอนโซลเบราว์เซอร์ Jenkins CI สำหรับโปรเจ็กต์ starwars_api และฉันสามารถสร้างได้โดยตรงด้วย "สร้างด้วยพารามิเตอร์" ที่มีค่า refs / tags / tag-name