Jenkins Git Eklentisi: Belirli bir etiket nasıl oluşturulur?


121

Jenkins'in belirli bir etiketi oluşturması konusunda sorun yaşıyorum. Etiket parametreleştirilmiş bir yapının parçası, ancak sadece bu etiketi oluşturmak için bunu git eklentisine nasıl aktaracağımı bilmiyorum. Bu günümün 3 saatini alıyor ve üstatlara yığın taşması sırasında yenilgiyi kabul ettim.


Bunun stackoverflow.com/questions/7157170/… ' den farklı olduğunu mu söylüyorsunuz ? ( google.com/… 'nin üçüncü sonucu )
VonC

1
"Bu günümün 3 saatini alıyor"
Günümün

1
Bu şekilde yapmak istediğine emin misin? Git'te etiketlemenin ölçeklenmediğinin farkında mısınız? Belki de gerçekten istediğiniz etiketi / revizyonu kontrol etmek için bir komut dosyası yazmak için bir "kabuğu çalıştır" görevi kullanabilirsiniz.
mpontillo

Yanıtlar:


223

"Oluşturulacak dallar" parametresini kullanarak bunu yapabildim:

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

[Etiket-adı] 'nı etiketinizin adıyla değiştirin.


5
Bunun neden daha fazla +1 içermediğini bilmiyorum. Eric-notes blog yazısı cehennem gibi kafa karıştırıcı. Bu basit ve harika çalışıyor. Teşekkürler!
Cody S

3
Benim için harika çalıştı. Teşekkürler. Parametrem RELEASE_TAG olarak adlandırıldı, bu yüzden Dal Belirteci değeri olarak etiketleri / $ {RELEASE_TAG} kullandım.
Wesley Womack

3
Bu işe yaramadı. Bazı nedenlerden dolayı etiketi kontrol edemiyorum. Anlıyorum: 'HATA: Derlenecek herhangi bir revizyon bulunamadı. Bu iş için havuz ve şube yapılandırmasını doğrulayın. ' Etiket / 3.0.1 belirtiyorum, ayrıca * / etiketleri / 3.0.1 denedim etiketinin var olduğunu doğruladım.
lostintranslation

1
Bu cevapta önerilen şeyi yapmaya çalıştığımda, depodaki her anket bir yapıyı tetikliyor. Git yoklama günlüğü sürekli olarak "Son Yapılan Revizyon" un etiketin revizyonu olduğunu, ancak "En son uzak kafa revizyonunun" en yeninin revizyonu olduğunu gösterecektir HEAD. Git eklentisinin mantığı, depomdaki her zaman eşit olmayan ve bu nedenle yeni bir derleme her zaman tetiklenen bu iki revizyonu karşılaştırıyor gibi görünüyor .
Louis

Bu kesinlikle doğru cevap olmalı, benim için işe yaradı ve çok basit. Yine de repo için anket yapmıyorum, bu yüzden sanırım hala bu sorun var.
Jeremy

76

Jenkins CI v.1.555, Git Client eklentisi v.1.6.4 ve Git eklentisi 2.0.4 kullanarak bu cevapların hiçbiri benim için yeterli değildi.

Belirli, sabit (yani parametreleştirilmemiş) bir etiket için bir Git deposu için bir iş oluşturmak istedim. Çeşitli yanıtlardan bir çözümü ve Thilo tarafından alıntılanan "Git etiketi oluştur" blog gönderisini bir araya getirmek zorunda kaldım .

  1. Etiketinizi uzak depoya ittiğinizden emin olun. git push --tags
  2. İşinizin "Git Deposu" bölümünde, "Kaynak Kod Yönetimi" başlığı altında "Gelişmiş" seçeneğini tıklayın.
  3. Refspec alanına aşağıdaki metni ekleyin: +refs/tags/*:refs/remotes/origin/tags/*
  4. "Oluşturulacak dallar" altında, "Şube belirticisi" koyun */tags/<TAG_TO_BUILD>( <TAG_TO_BUILD>gerçek etiket adınızla değiştirin ).

Refspec'i eklemek benim için kritik oldu. Git depoları tüm uzak bilgileri varsayılan olarak boş bıraktığımda alıyor gibi görünse de, Git eklentisi yine de etiketimi bulamayacaktı. Sadece Refspec alanında açıkça "uzak etiketleri al" seçeneğini belirlediğimde Git eklentisi etiketimi tanımlayıp oluşturabiliyordu.

Güncelleme 2014-5-7 : Maalesef, bu çözüm Jenkins CI (v.1.555) ve Git deposu için Stash Webhook'tan Jenkins'e itme bildirim mekanizması için istenmeyen bir yan etkiyle geliyor : depodaki herhangi bir dal her güncellendiğinde bir itmede, etiket oluşturma işleri de yeniden tetiklenir. Bu, aynı etiket işlerinin birçok gereksiz yeniden oluşturulmasına yol açar. İşleri "Çalışma alanını kullanarak yoklamayı zorla" seçeneği ile ve olmadan yapılandırmayı denedim ve hiçbir etkisi olmadı. Jenkins'in etiket işleri için gereksiz derlemeler yapmasını engellememin tek yolu Refspec alanını temizlemek (yani, silmek +refs/tags/*:refs/remotes/origin/tags/*).

Herhangi biri daha zarif bir çözüm bulursa, lütfen bu yanıtı bir güncellemeyle düzenleyin. Örneğin, refspec +refs/tags/<TAG TO BUILD>:refs/remotes/origin/tags/<TAG TO BUILD>yıldız işaretinin tümünü yakalama yerine özellikle belirtilmiş olsaydı, bunun gerçekleşmeyeceğinden şüpheleniyorum . Ancak şimdilik bu çözüm bizim için çalışıyor, sadece iş başarılı olduktan sonra fazladan Refspec'i kaldırıyoruz.


4
Refspec'e "aşağıdaki metni eklemek" için ... eğer refspec'iniz daha önce +refs/heads/*:refs/remotes/origin/*olsaydı, şimdi olacaktır +refs/heads/*:refs/remotes/origin/* +refs/tags/*:refs/remotes/origin/tags/*. (Refspecs ile pek çalışmadım, bu yüzden bu alanın alanla sınırlı olduğunu öğrenmek için biraz deney
yaptım

1
Bu çözüm için fazladan +1. Önceki çözümler benim için de işe yaramadı.
whitespy9

16

Jenkins'e bir Ref adından inşa etmesini söyleyemez misin? Eğer öyleyse o zaman

refs/tags/tag-name

Jenkins ve Hudson hakkında gördüğüm tüm sorulardan, TeamCity'ye geçmenizi öneririm. TeamCity'nin çalışması için herhangi bir yapılandırma dosyasını düzenlemem gerekmedi.


Aslında takım şehrini öneren ilk kişi sen değilsin. Gerçekten o kadar iyi mi? Kontrol edebilirim.
sksamuel

1
@monkjack Aynı sözdizimini depomdan birinde denedim ve işe yaradı. Mevcut etiketlerinizi listeleyebilir misiniz? Emin Özellikle uzaktan repo bu etiketi itti ettik Aregit push --tags
Andrew T Finnell

4
Yakınlaşmak. Etiketleri uzağa itmiyordum ama şimdi öyleyim. Refs / tags / harpercollins-1.0.16 kullanarak jenkins'i şimdi inşa ettirebilirim, ancak oraya ne koyarsam yapayım her zaman kafa inşa etmekte ısrar ediyor. Uzaktan kumandanın etiketi olduğunu doğruladım (gitweb'de görebilir) ve bu etiketin anlık görüntüsünü yapmak, oradaki her şeyin doğru şekilde olduğunu doğrular.
sksamuel

6
TeamCity tescillidir, bu da onu oldukça kullanışsız hale getirir.
argo

2
Oh evet, ücretsiz araçtan reklama geçmek doğru seçimdir! Jetbrains tekerleği yeniden icat ettiğinde ve yeni böcek izleyici yarattığında, başkalarına bugzilla'dan ona geçiş yapmayı önerecek misin?
m1ld

11

Jenkins ardışık düzenleri kullanıyorsanız ve belirli bir etiketi kontrol etmek istiyorsanız (örneğin: TAGderlemenizin bir parametresi), şunları yapabilirsiniz:

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

En son Jenkins'te (1.639 ve üzeri) şunları yapabilirsiniz:

  1. sadece 'Oluşturulacak dallar' alanında etiketin adını belirtin.
  2. parametrize bir yapıda, parametreyi değişken olarak aynı alanda 'Oluşturulacak şubeler' yani $ {Branch_to_build} olarak kullanabilirsiniz.
  3. Mevcut tüm dalları ve etiketleri listeleyerek size işlevsellik sağlayacak Git Parametre Eklentisini kurabilirsiniz .

1
Aslında sadece bir etiket adı girmek benim için de çalıştı. Git eklentisindeki bunun için dokümantasyon yine de özellikle bunu yapmanın işe yaramayacağını söylese de
Zitrax

Bu benim için Jenkins 1.532.3'te çalıştı, sadece 1.0.1inşa edilecek dallarda etiket sürümünü (örn. ) Belirledim .
andre

9

Bunun gibi bir şey yaptım ve işe yaradı:

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

görüntü açıklamasını buraya girin

Jenkins günlüğü, kaynağı etiketten aldığını doğruladı

Revizyon Kontrol Ediliyor 0b4d6e810546663e931cccb45640583b596c24b9(v0.9.5.2)


Bu, tüm etiketleri oluşturmak için harika, teşekkürler! refspecGelişmiş düğmesini tıklayarak hünerini eklemek oldu.
styfle

9

Advanced-> Refspec alanını şu şekilde ayarladım: refs/tags/[your tag name] . Bu, Refspec için sunulan diğer önerilerden daha basit görünüyor, ancak benim için gayet iyi çalıştı.

GÜNCELLEME 23/7/2014 - Aslında, daha fazla test yaptıktan sonra, bunun beklendiği gibi çalışmadığı ortaya çıktı. HEAD sürümü hala kontrol ediliyor gibi görünüyor. Lütfen bunu kabul edilen yanıt olarak geri alın. Gönderiyi takip ederek çalışan bir çözüm buldum gotgenes bunda iplik (30 Mart). Yapımların gereksiz şekilde tetiklenmesi gönderisinde bahsedilen sorun, benim için bir sorun değildi, çünkü işim SCM sorgulamasından değil, bir yukarı akış işinden tetiklendi.

GÜNCEL NİSAN-2018 - Yorumlarda bunun bir kişi için işe yaradığını ve Jenkins belgelerini kabul ettiğini unutmayın.


Sadece bu cevabın gönderilmesinden dört yıl sonra - refs/tags/<tagname>Jenkins belgelerinin kullanılması gerektiğini söylediği şeyin kullanılması olduğunu ve benim için iyi çalıştığını not etmek istedim. Belki eklentisi Nisan 2018 tarihi itibariyle, bu ... Orijinal yazının anda arabası, ama bir doğru cevap.
evadeflow

Önceki yorumumu güncelleme: Aslında, refs/tagsöneki çıkarabileceğimi ve sadece kullanabileceğimi fark ettim <tagname>. YMMV, ama ... amaçlarım için iyi çalışıyor.
evadeflow

3

Bu blog yazısında ayrıntılı olarak belirtildiği gibi Refspec ve Branch Specifier'ı ayarlayarak Jenkins'in bir etiket oluşturmasını sağlayabildim .

Ayrıca, Depo Adını (benim durumumda "orijin" olarak), Refspec'te referans verebilmek için (aksi halde görünüşte rastgele oluşturulmuş bir ad kullanacaktı) ayarlamam gerekiyordu.


2

Sonunda yaptığım şey şuydu:

  • yeni bir şube oluşturdu jenkins-targetve bunu izleyecek jenkins var
  • üzerine oluşturmak istediğim dal veya etiketten birleştir jenkins-target
  • derleme çalıştıktan, testler geçtikten vb. sonra jenkins-targetşubeden bir etiket oluşturmanız yeterlidir.

Bunun herkes için işe yarayıp yaramayacağından emin değilim, projem oldukça küçüktü, çok fazla etiket falan değildi, ama yapılması çok kolay, refspec'ler, parametreler ve benzeri şeyler ile uğraşmak zorunda değilsiniz :-)


Bu çok basit yaklaşımı seviyorum.
zochhuana

2

1.2.3-alpha43Joker karakterler kullanarak bir etiket türü bile oluşturabilirsiniz:

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

Dal belirleyici: origin/tags/1.2.3-alpha*

Ayrıca aktarımı tetiklemek için " GitHub'a bir değişiklik gönderildiğinde oluştur " seçeneğini de işaretleyebilirsiniz , ancak web kancasına "oluştur" eylemi eklemeniz gerekir.


1

Jenkins'te "Parametrelerle oluştur" seçeneğini kullanan bir yanıt görmediğim için buraya iki sentimi ekliyorum.

Burada starwars_api projesi için Jenkins CI tarayıcı konsolunu kullanıyorum ve refs / tags / tag-name değeriyle "Build with parameters" ile doğrudan inşa edebildim

  1. "parametrelerle oluştur" seçeneğini seçin.
  2. kutuya "refs / tags / tag_142" olarak değer ekleyin (benim örneğim için tag_name = tag_142)

ref etiketi adıyla oluştur

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.