Jenkins Git Plugin: จะสร้างแท็กเฉพาะได้อย่างไร


121

ฉันมีปัญหาในการขอให้ Jenkins สร้างแท็กที่ระบุ แท็กเป็นส่วนหนึ่งของ build parametrized แต่ฉันไม่รู้วิธีส่งผ่านไปยังปลั๊กอิน git เพื่อสร้างแท็กนั้น นี่ใช้เวลา 3 ชั่วโมงในวันของฉันและฉันยอมรับความพ่ายแพ้ต่อปรมาจารย์ที่กองซ้อน


คุณหมายถึงสิ่งนี้แตกต่างจากstackoverflow.com/questions/7157170/… ? (ผลที่สามของgoogle.com/… )
VonC

1
"นี่ใช้เวลา 3 ชั่วโมงในวันของฉัน" - ฉันไม่ได้ขี้เกียจขนาดนั้นที่ 3 ชั่วโมงในแต่ละวันของฉันไม่ได้รวมทุกลิงค์ที่ฉันสามารถหาได้ใน Google :)
sksamuel

1
แน่ใจไหมว่าต้องการทำแบบนี้ คุณตระหนักว่าการติดแท็กในคอมไพล์ไม่ได้ขนาด ? บางทีคุณอาจใช้งาน "execute shell" เพื่อเขียนสคริปต์เพื่อตรวจสอบแท็ก / การแก้ไขที่คุณต้องการจริงๆ ?
mpontillo

คำตอบ:


223

ฉันสามารถทำได้โดยใช้พารามิเตอร์ "branch to build":

Branch Specifier (blank for default): tags/[tag-name]

แทนที่ [tag-name] ด้วยชื่อแท็กของคุณ


5
ฉันไม่รู้ว่าทำไมถึงไม่มี +1 มากกว่านี้ รายการบล็อก erics-Notes นั้นสับสนเหมือนนรก นี่เป็นเรื่องง่ายและใช้งานได้ดี ขอบคุณ!
Cody S

3
ทำงานได้ดีสำหรับฉัน ขอบคุณ พารามิเตอร์ของฉันชื่อ RELEASE_TAG ดังนั้นฉันจึงใช้แท็ก / $ {RELEASE_TAG} เป็นค่าสำหรับ Branch Specifier
Wesley Womack

3
ไม่สามารถใช้งานได้ ด้วยเหตุผลบางประการไม่สามารถชำระเงินแท็กได้ ฉันได้รับ: 'ข้อผิดพลาด: ไม่พบการแก้ไขใด ๆ ที่จะสร้าง ตรวจสอบที่เก็บและคอนฟิกูเรชันสาขาสำหรับงานนี้ ' ฉันระบุแท็ก / 3.0.1 ฉันได้ลอง * / tags / 3.0.1 ด้วยฉันตรวจสอบว่ามีแท็ก
lostintranslation

1
เมื่อฉันลองทำตามที่แนะนำในคำตอบนี้การสำรวจความคิดเห็นทุกครั้งของที่เก็บจะทริกเกอร์บิลด์ บันทึกการคอมไพล์เลือกตั้งอย่างต่อเนื่องจะแสดงให้เห็นว่า "สร้างครั้งล่าสุดเมื่อทบทวน" คือการแก้ไขของแท็ก แต่ "ล่าสุดแก้ไขหัวระยะไกลคือ" HEADคือการแก้ไขของใหม่ล่าสุด ตรรกะของปลั๊กอิน git ดูเหมือนจะเปรียบเทียบการแก้ไขทั้งสองนี้ซึ่งในที่เก็บของฉันมักจะไม่เท่ากันดังนั้นการสร้างใหม่จึงถูกเรียกใช้เสมอ
Louis

นี่ต้องเป็นคำตอบที่ถูกต้องแน่นอนมันได้ผลสำหรับฉันและง่ายมาก ฉันไม่สำรวจ repo แต่ฉันเดาว่ายังมีปัญหาอยู่
Jeremy

76

คำตอบเหล่านี้ไม่เพียงพอสำหรับฉันโดยใช้ Jenkins CI v.1.555, Git Client plugin v.1.6.4 และ Git plugin 2.0.4

ฉันต้องการงานสร้างสำหรับที่เก็บ Git หนึ่งแท็กเฉพาะแท็กคงที่ (กล่าวคือไม่กำหนดพารามิเตอร์) ผมต้องซ่อมแซมกันแก้ปัญหาจากคำตอบต่างๆบวก"สร้างแท็ก Git" บล็อกโพสต์ โดยอ้าง Thilo

  1. ตรวจสอบให้แน่ใจว่าคุณพุชแท็กของคุณไปยังที่เก็บระยะไกลด้วย git push --tags
  2. ในส่วน "Git Repository" ของงานของคุณใต้หัวข้อ "Source Code Management" ให้คลิก "Advanced"
  3. ในช่องสำหรับ Refspec ให้เพิ่มข้อความต่อไปนี้: +refs/tags/*:refs/remotes/origin/tags/*
  4. ภายใต้ "สาขาที่จะสร้าง" "ตัวระบุสาขา" ให้ใส่*/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 พิเศษหลังจากงานสำเร็จ


4
"เพิ่มข้อความต่อไปนี้" เพื่อ refspec ... ถ้า refspec ของคุณก่อนหน้านี้ได้ในขณะนี้จะเป็น+refs/heads/*:refs/remotes/origin/* +refs/heads/*:refs/remotes/origin/* +refs/tags/*:refs/remotes/origin/tags/*(ฉันไม่ได้ทำงานกับ refspecs มากนักดังนั้นจึงต้องใช้การทดลองเพื่อเรียนรู้ว่าฟิลด์นี้คั่นด้วยช่องว่าง)
driftcatcher

1
+1 พิเศษสำหรับโซลูชันนี้ วิธีแก้ปัญหาก่อนหน้านี้ไม่ได้ผลสำหรับฉันเช่นกัน
whitespy9

16

คุณไม่สามารถบอกให้เจนกินส์สร้างจากชื่ออ้างอิงได้หรือไม่? ถ้าเป็นเช่นนั้นก็

refs/tags/tag-name

จากคำถามทั้งหมดที่ฉันเห็นเกี่ยวกับ Jenkins และ Hudson ฉันขอแนะนำให้เปลี่ยนไปใช้ TeamCity ฉันไม่ต้องแก้ไขไฟล์การกำหนดค่าใด ๆ เพื่อให้ TeamCity ทำงานได้


คุณไม่ใช่คนแรกที่แนะนำทีมซิตี้จริงๆ มันดีขึ้นมากจริงหรือ? ฉันอาจจะลองดู
sksamuel

1
@monkjack ฉันลองใช้ไวยากรณ์เดียวกันกับหนึ่งใน repo ของฉันและมันใช้งานได้ คุณสามารถแสดงรายการแท็กปัจจุบันของคุณได้หรือไม่? คุณแน่ใจหรือไม่ว่าคุณได้ผลักดันแท็กนั้นไปยัง repo ระยะไกลโดยเฉพาะgit push --tags
Andrew T Finnell

4
เข้าใกล้มากขึ้น ฉันไม่ได้ดันแท็กขึ้นไปที่รีโมต แต่ตอนนี้ฉันเป็น ฉันสามารถสร้างเจนกินส์ได้ทันทีโดยใช้ refs / tags / harpercollins-1.0.16 อย่างไรก็ตามมันมักจะยืนยันในการสร้างหัวโดยไม่คำนึงถึงสิ่งที่ฉันใส่ไว้ในนั้น ฉันยืนยันว่ารีโมตมีแท็ก (ดูได้ใน gitweb) และการทำสแนปชอตของแท็กนั้นยืนยันว่าทุกอย่างอยู่ในนั้นอย่างถูกต้อง
sksamuel

6
TeamCity เป็นกรรมสิทธิ์ทำให้มันไร้ประโยชน์มาก
แสลง

2
ใช่แล้วการเปลี่ยนจากเครื่องมือฟรีไปใช้เชิงพาณิชย์เป็นทางเลือกที่ถูกต้อง! เมื่อ Jetbrains สร้างล้อใหม่และสร้างตัวติดตามข้อผิดพลาดใหม่คุณจะเสนอให้คนอื่นเปลี่ยนจาก Bugzilla เป็นสิ่งนั้นหรือไม่?
m1ld

11

หากคุณใช้ไปป์ไลน์ของ 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
  }
}

9

ใน Jenkins ล่าสุด (1.639 ขึ้นไป) คุณสามารถ:

  1. เพียงระบุชื่อแท็กในฟิลด์ "Branches to build"
  2. ในการสร้าง parametrized คุณสามารถใช้พารามิเตอร์เป็นตัวแปรในฟิลด์เดียวกัน "Branches to build" เช่น $ {Branch_to_build}
  3. คุณสามารถติดตั้งGit Parameter Pluginซึ่งจะช่วยให้คุณทำงานได้โดยการแสดงรายการสาขาและแท็กที่มีอยู่ทั้งหมด

1
การป้อนชื่อแท็กก็ใช้ได้ผลสำหรับฉันเช่นกัน แม้ว่าเอกสารประกอบสำหรับสิ่งนี้ในปลั๊กอิน git ยังคงบอกเป็นพิเศษว่าการทำเช่นนั้นไม่ควรได้ผล: "<tagName>: สิ่งนี้ใช้ไม่ได้เนื่องจากแท็กจะไม่ได้รับการยอมรับว่าเป็นแท็กให้ใช้ refs / tags / <tagName> แทน"
Zitrax

สิ่งนี้ใช้ได้ผลสำหรับฉันใน Jenkins 1.532.3 ฉันเพิ่งระบุเวอร์ชันแท็ก (เช่น1.0.1) ในสาขาเพื่อสร้างฟิลด์
andre

9

ฉันทำสิ่งนี้และได้ผล:

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เคล็ดลับคือการคลิกปุ่มขั้นสูง
styfle

9

ฉันตั้งค่าฟิลด์ Advanced-> Refspec เป็น refs/tags/[your tag name]ไป ดูเหมือนง่ายกว่าคำแนะนำอื่น ๆ สำหรับ Refspec แต่มันก็ใช้ได้ดีสำหรับฉัน

อัปเดต 23/7/2557 - อันที่จริงหลังจากการทดสอบเพิ่มเติมปรากฎว่าไม่ได้ผลตามที่คาดไว้ ดูเหมือนว่าเวอร์ชัน HEAD ยังคงถูกตรวจสอบ โปรดเลิกทำสิ่งนี้เป็นคำตอบที่ยอมรับ ฉันได้รับวิธีแก้ปัญหาโดยติดตามโพสต์จากgotgenesในหัวข้อนี้(30 มีนาคม) ปัญหาที่กล่าวถึงในโพสต์ของการทริกเกอร์บิวด์ที่ไม่จำเป็นนั้นไม่ใช่ปัญหาสำหรับฉันเนื่องจากงานของฉันถูกทริกเกอร์จากงานอัพสตรีมไม่ใช่จากการสำรวจ SCM

อัปเดต APR-2018 - โปรดทราบในความคิดเห็นว่าสิ่งนี้ใช้ได้กับคน ๆ เดียวและเห็นด้วยกับเอกสารของ Jenkins


แค่อยากทราบว่า - สี่ปีหลังจากโพสต์คำตอบนี้ - การใช้refs/tags/<tagname>คือสิ่งที่เอกสารของ Jenkins ระบุว่าควรใช้และมันก็ใช้ได้ดีสำหรับฉัน บางทีปลั๊กอินอาจมีข้อผิดพลาดในขณะที่โพสต์ต้นฉบับ แต่ ... ณ เดือนเมษายน 2018 นี่คือคำตอบที่ถูกต้อง
evadeflow

อัปเดตความคิดเห็นก่อนหน้าของฉัน: ที่จริงฉันพบว่าฉันสามารถละเว้นคำนำหน้าและการใช้งานเพียงแค่refs/tags <tagname>YMMV แต่ ... มันทำงานได้ดีตามวัตถุประสงค์ของฉัน
evadeflow

3

ฉันสามารถให้ Jenkins สร้างแท็กได้โดยตั้งค่า Refspec และ Branch Specifier ตามรายละเอียดในโพสต์บล็อกนี้นี้

ฉันต้องตั้งชื่อที่เก็บด้วย (เป็น "ต้นกำเนิด" ในกรณีของฉัน) เพื่อที่ฉันจะได้อ้างอิงใน Refspec (มิฉะนั้นดูเหมือนจะใช้ชื่อที่สร้างขึ้นแบบสุ่ม)


2

สิ่งที่ฉันทำในตอนท้ายคือ:

  • สร้างสาขาใหม่jenkins-targetและให้เจนกินส์ติดตามสิ่งนั้น
  • รวมจากสาขาหรือแท็กใดก็ตามที่ฉันต้องการสร้างลงในไฟล์ jenkins-target
  • เมื่อบิวด์ใช้งานได้ให้ทดสอบผ่าน ฯลฯ เพียงแค่สร้างแท็กจากjenkins-targetสาขา

ฉันไม่แน่ใจว่าสิ่งนี้จะใช้ได้กับทุกคนหรือไม่โปรเจ็กต์ของฉันค่อนข้างเล็กแท็กและสิ่งต่างๆไม่มากนัก แต่มันทำได้ง่ายมากไม่ต้องยุ่งกับ refspecs และพารามิเตอร์และสิ่งต่างๆ :-)


ฉันชอบวิธีง่ายๆนี้มาก
zochhuana

2

คุณสามารถสร้างได้แม้กระทั่งประเภทแท็กตัวอย่างเช่นการ1.2.3-alpha43ใช้สัญลักษณ์แทน:

Refspec: +refs/tags/*:refs/remotes/origin/tags/*

ตัวระบุสาขา: origin/tags/1.2.3-alpha*

คุณยังสามารถเลือก " สร้างเมื่อมีการพุชการเปลี่ยนแปลงไปที่ GitHub " เพื่อเริ่มการพุช แต่คุณต้องเพิ่มการดำเนินการ"สร้าง"ในเว็บฮุค


1

การเพิ่มสองเซ็นต์ของฉันที่นี่เนื่องจากฉันไม่เห็นคำตอบที่ใช้ตัวเลือก "สร้างด้วยพารามิเตอร์" ในเจนกินส์

ที่นี่ฉันใช้คอนโซลเบราว์เซอร์ Jenkins CI สำหรับโปรเจ็กต์ starwars_api และฉันสามารถสร้างได้โดยตรงด้วย "สร้างด้วยพารามิเตอร์" ที่มีค่า refs / tags / tag-name

  1. เลือกตัวเลือก "สร้างด้วยพารามิเตอร์"
  2. เพิ่มค่าในช่องเป็น "refs / tags / tag_142" (tag_name = tag_142 สำหรับตัวอย่างของฉัน)

สร้างด้วยชื่อแท็กอ้างอิง

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