Aynı Jenkins çalışma alanında birden fazla git deposunu kontrol edin


127

Jenkins 1.501 ve Jenkins Git eklentisini 1.1.26 kullanma

Her biri birden fazla projeye sahip 3 farklı git depom var.

Şimdi 3 git deposundaki tüm projeleri bir Jenkins slave üzerindeki aynı çalışma alanına kontrol etmem gerekiyor. Her git deposunu şurada tanımladım: Kaynak kodu Yönetimi: Birden çok SCM . Ancak bir repo her kontrol edildiğinde önceki repo (ve ilişkili projeleri) silinir.

Bunu okudum:

http://jenkins.361315.n4.nabble.com/multiple-git-repos-in-one-job-td4633300.html

ama gerçekten yardımcı olmuyor. Depo için yerel alt dizin altında (isteğe bağlı) tüm depolar için aynı klasörü belirtmeye çalıştım ama aynı sonucu veriyor.

Eğer Jenkins kullanarak bu imkansızsa, sanırım projeleri doğru yere taşımak için bazı ön-inşa adımları / betikleri kullanılabilir. Projelerin yapı yapılandırmasını değiştirme seçeneği değildir.

Yanıtlar:


69

Jenkins + Git Plugin ile tek bir çalışma alanında aynı anda birden fazla depoyu kontrol etmek mümkün değildir.

Geçici bir çözüm olarak, her biri tek bir depoyu kontrol eden ve ardından son proje çalışma alanınıza kopyalayan birden fazla yukarı akış işiniz olabilir (birkaç düzeyde sorunlu) veya gerekli her bir depoyu kontrol eden bir kabuk komut dosyası oluşturma adımı oluşturabilirsiniz. derleme zamanında iş çalışma alanı.

Daha önce Çoklu SCM eklentisi bu soruna yardımcı olabilirdi ancak artık kullanımdan kaldırılmıştır. Çoklu SCM eklenti sayfasından: "Kullanıcılar https://wiki.jenkins-ci.org/display/JENKINS/Pipeline+Plugin'e geçmelidir . Pipeline, birden fazla SCM'yi kontrol etmenin daha iyi bir yolunu sunar ve Jenkins tarafından desteklenir çekirdek geliştirme ekibi. "


İlk yaklaşım neden sorunlu? İşleri bölmek iyi bir uygulama gibi görünüyor.
CurtainDog

1
Genel olarak iyi bir uygulamadır, ancak aynı fiziksel lokasyonda birden fazla kontrol işlemine ihtiyaç duyduğunuzda bakım büyük bir sorun haline gelir. Örneğin, bir şube yapısı oluşturmak istiyorsanız, 4 işi klonlamanız ve ardından her birinin yollarını ayrı ayrı değiştirmeniz gerekir. Elbette buna yardımcı olacak eklentiler var, ancak tek bir işten göreceli bir yola geçiş yapmak daha kolay. Ardından ayarları değiştirmeden istediğiniz kadar klonlayabilirsiniz.
CIGuy

1
Artık alakalı olmadığı için onu doğru cevaptan değiştirmeniz gerekiyor.
Dvir669

2
Ardışık düzenler, yeni bir DSL öğrenmenizi gerektirir, ki bu çok basit bir iş için (birden fazla depodaki kodu kontrol edin) yapmasını istediğimiz iş için biraz fazladır. Jenkins pipeline DSL çevresinde düzgün bir GUI görünene kadar Çoklu SCM eklentisine bağlı kalın. Jenkins 2.17 ile gayet iyi çalıştığını bildirebilirim
Burak Arslan

2
Birden fazla depoda aynı sorunlarla karşılaştım. Yeni DSL konusunda @BurakArslan kadar şüpheci olsam da şimdi Pipeline eklentisini kullanıyorum. Aslında düşündüğüm kadar kötü değil ve oldukça iyi bir pasaj oluşturucu ile birlikte geliyor. Sadece 2 saat kullandıktan sonra, şimdi aslında bu yaklaşımı tercih ediyorum çünkü sonunda ardışık düzen oluşturma betiklerini kodun geri kalanıyla birlikte git'e işleyebiliyorum.
Ben

81

Çoklu SCM Eklentisi ile:

  • Kontrol etmeniz gereken her depo için farklı bir depo girişi oluşturun (ana proje veya bağımlılık projesi.

  • her proje için, "gelişmiş" menüsünde (ikinci "gelişmiş" menü, her depo için "gelişmiş" etiketli iki düğme vardır), "Depo için yerel alt dizin (isteğe bağlı)" metin alanını bulun. Orada, projeyi kopyalamak istediğiniz "çalışma alanı" dizininde alt dizini belirtebilirsiniz. Geliştirme bilgisayarımın dosya sistemini eşleyebilirsiniz.

"İkinci gelişmiş menü" artık mevcut değil, bunun yerine yapılması gereken "Ekle" düğmesini ("Ek Davranışlar" bölümünde) kullanmak ve "Bir alt dizine göz at" ı seçmek.

  • ant kullanıyorsanız, çalışma alanının kök dizininde değil, bir alt dizinde yapı hedefleri olan build.xml dosyası şu anda olduğu gibi, bunu "Ant'ı Çağır" yapılandırmasına yansıtmanız gerekir. Bunu yapmak için, "Ant'ı Çağır" içinde, "Gelişmiş" e basın ve build.xml dosyasının bulunduğu alt dizinin adı dahil olmak üzere "Derleme dosyası" giriş metnini doldurun.

Umarım yardımcı olur.


3
Bu modası geçmiş olmalı. Çoklu SCM eklentisi yazılırken GIT pasajı, isteğe bağlı alt yolu içermiyor.
Alexei

12
Her arşivde "Ekle" adlı bir açılır liste vardır. İçinde, aynı işlemi yapan "Alt dizine çıkış yap" seçeneğini bulabilirsiniz.
Gary Ye

1
Rehberinizi birden fazla SCM eklentisi ve git ile takip ettim ama başka bir komik problemim var. Farklı depolar için aynı dalı düzgün şekilde kullanıma almak (geliştirmek) istemiyor gibi görünüyor. Hash (sadece ilk depoda geçerli olan) bir commit'i teslim almaya çalışır. Bunu nasıl ele alacağınıza dair bir fikriniz var mı?
Lefteris

Birden fazla SCM eklentisiyle ilgili en büyük sorun şudur: "Sonradan işleme türü tetikleyiciler şu anda çalışmıyor (en azından alt sürüm için), bu nedenle 'cron' türü yoklamayı yapılandırmak gerekiyor."
grayaii

1
Ardışık düzenler, yeni bir DSL öğrenmenizi gerektirir, ki bu çok basit bir iş için (birden fazla depodaki kodu kontrol edin) yapmasını istediğimiz iş için biraz fazladır. Jenkins pipeline DSL çevresinde düzgün bir GUI görünene kadar Çoklu SCM eklentisine bağlı kalın. Jenkins 2.17 ile gayet iyi çalıştığını söyleyebilirim
Burak Arslan

41

Yana Birden SCMS Eklentisi kaldırılmıştır.

İle Jenkins Boru Hattı olası çok git repo Kasaya git ve gradle kullanarak oluşturduktan sonra

node {   
def gradleHome

stage('Prepare/Checkout') { // for display purposes
    git branch: 'develop', url: 'https://github.com/WtfJoke/Any.git'

    dir('a-child-repo') {
       git branch: 'develop', url: 'https://github.com/WtfJoke/AnyChild.git'
    }

    env.JAVA_HOME="${tool 'JDK8'}"
    env.PATH="${env.JAVA_HOME}/bin:${env.PATH}" // set java home in jdk environment
    gradleHome = tool '3.4.1' 
}

stage('Build') {
  // Run the gradle build
  if (isUnix()) {
     sh "'${gradleHome}/bin/gradle' clean build"
  } else {
     bat(/"${gradleHome}\bin\gradle" clean build/)
  }
}
}

Bunun gibi özel bir ardışık düzen yerine git alt modülleri kullanmayı düşünebilirsiniz .


Teşekkür ederim!!! dirBlok anahtarıdır, ben sadece benim işin çalışma alanında en güncel-klonlanmış repo neden gördüğümü çözemedim.
bonh

Birden fazla TZY altında "değişiklik" kavramı nasıl değerlendirilir? İşleri oluşturan tüm depolardan görülen değişikliklerin toplamı mı? Bunları mümkünse her birinden ayırmak 23 changes from repo XXX, 3 changes from repo YYYveya bu satırlar boyunca daha kompakt bir şey yapmak iyi olur .
jxramos

20

Kullandığım Çoklu SCMS Plugin Jenkins ile başarıyla Git Eklentisi ile birlikte.


3
teşekkürler, bu harika, depo bölümüne 2 bitbucket yolu koyabiliyorum ve şimdi repo 1 checkout "geliştir" dalı ve repo 2 ödeme "düzeltmeleri" dalı için nasıl söyleyebilirim? jenkins'te bölüm oluşturmak için dalları görüyorum, şube tanımlayıcısında depo adını ve Refsec'i nasıl ayarlayabilirim ('herhangi biri' için boş), böylece her biri istediğim ilgili dalı kontrol edebilir? veya bunu önceden yapıyorum ve "Çoklu SCM" yazan boole'ye tıklamam gerekir?
pelos

@pelos Çözümü bulabildiniz mi?
Govind

şu anda yml dosyasını kullanmıyoruz ve iki farklı iş akışını normal görevlerle gerçekleştirdik
pelos

5

Depoların ilişkilerine bağlı olarak, diğer bir yaklaşım, diğer depoları (depoları) depolardan birine git alt modülleri olarak eklemektir . Git alt modülü, diğer depolara bir başvuru oluşturur. Bu alt modül depoları --recursive, "süper projeyi" (resmi terim) klonlarken bayrağı belirtmediğiniz sürece klonlanmaz .

Mevcut projeye bir alt modül eklemek için komut şu şekildedir:

git submodule add <repository URI path to clone>

Jenkins v1.645 kullanıyoruz ve git SCM, süper projeler için kutudan çıktığı gibi özyinelemeli bir klon yapacak. Voila, süper proje dosyalarını ve tüm bağımlı (alt modül) repo dosyalarını aynı Jenkins iş çalışma alanında kendi dizinlerinde alırsınız.

Bunun doğru yaklaşım olduğuna kefil olmamak, daha çok bir yaklaşımdır.


5

Jenkins: Çoklu SCM - kullanımdan kaldırıldı. GIT Eklentisi - çoklu depolarda çalışmaz.

Kod olarak komut dosyası / ardışık düzen - gidilecek yoldur.


2

Benim de bu problemim vardı. Diğer projelerde Trigger / call builds kullanarak çözdüm. Her depo için aşağı akış projesini parametreleri kullanarak çağırırım.

Ana proje:

This project is parameterized
String Parameters: PREFIX, MARKETNAME, BRANCH, TAG
Use Custom workspace: ${PREFIX}/${MARKETNAME}
Source code management: None

Sonra her depo için aşağıdaki gibi bir aşağı akış projesi çağırırım:

Trigger/call builds on other projects: 
Projects to build: Linux-Tag-Checkout
Current Build Parameters
Predefined Parameters: REPOSITORY=<name>

Aşağı akış projesi: Linux-Tag-Checkout:

This project is parameterized
String Parameters: PREFIX, MARKETNAME, REPOSITORY, BRANCH, TAG
Use Custom workspace:${PREFIX}/${MARKETNAME}/${REPOSITORY}-${BRANCH}
Source code management: Git
git@<host>:${REPOSITORY}
refspec: +refs/tags/${TAG}:refs/remotes/origin/tags/${TAG}
Branch Specifier: */tags/${TAG} 

1

Jenkins + Git Plugin ile tek bir çalışma alanında aynı anda birden fazla depoyu kontrol etmek mümkündür (belki sadece daha yeni sürümlerde?).

"Kaynak-Kod Yönetimi" bölümünde, "Git" değil, "Çoklu SCM" yi seçin ve birkaç git deposu ekleyin.

Biri dışında tümünde "Ek davranış" olarak "Alt dizine teslim et" eylemini eklediğinizden ve ayrı bir alt dizin belirttiğinizden emin olun.


Bu şekilde, vanilya Git Eklentisi yerine (kullanımdan kaldırılmış) Çoklu SCM eklentisini kullandığınıza inanıyorum.
Robert

0

Çoklu GIT depolarımızı yönetmek için git-repo kullanıyoruz . Git-repo tarafından yönetilen depoların tamamının veya bir kısmının aynı Jenkins iş çalışma alanına alınmasına izin veren bir Jenkins Repo eklentisi de vardır .


Bu soruda sorulan problemi tam olarak nasıl çözüyorsunuz? Bahsettiğiniz eklentiyi yükledim ve repo ve eklentiyi okudum, ancak Jenkins'i bir projede yürütmek üzere iki depoyu klonlamak için nasıl ayarlayacağımı göremiyorum ...
GreenAsJade

Repo'yu kullanmak için, yalnızca manifest dosya (lar) ını içerecek özel havuzun oluşturulması gerekir. Bu dosyada diğer depolarla ilgili tüm bilgileri belirtirsiniz. Bildiri dosyalarının tam biçimi, git-repo projesinin ( gerrit.googlesource.com/git-repo/+/master/docs/… ) docs / manifest-format.txt dosyasında açıklanmıştır . İşin Jenkins Repo bölümünü yapılandırırken - 'bildirim' havuzunun konumunu ve isteğe bağlı olarak 'bildirim' dosyalarının adını belirtirsiniz (birkaç tanesine sahip olabilirsiniz). Manifest'te belirtilen tüm depolar klonlanacak.
vladisld
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.