2016-08-19 16 views
15

Oluşturmak istediğim kodlu bir Git deposu var ama root'a bir Jenkinsfile eklemek için "izinli" değilim (bu bir Debian paketidir, bu yüzden dosyaları başlangıç ​​kaynağına ekle). Jenkinsfile'u bir depoda depolamanın ve başka bir depodan kod oluşturmanın bir yolu var mı? Kod depomuzun oluşturulacak çok sayıda şubesi olduğundan (her bir Debian sürümü için bir tane) bu çok kanallı bir boru hattı olmalıdır. Kodda veya Jenkinsfile veri havuzlarında bulunan komutlar bir derlemeyi tetiklemelidir.Farklı depodan Jenkinsfile ile Jenkins çok bölmeli boru hattı

Bonus karmaşıklığı: Bunun gibi birçok kod/paketleme deposu var ve hepsine aynı Jenkinsfile yeniden kullanmak istiyorum. Dolayısıyla, bir şekilde kullanmak için doğru Git URL'sini dinamik olarak almalıdır. Oluşturulacak olan dallar tüm depolarda aynı isimlere sahip.

cevap

6

Kısa yanıt şudur: siz bunu multibranch pipeline ile yapamazsınız. Çokbağlı boru hatları, projenin kökünde sabit bir Jenkinsfile ile Pipeline script from SCM stilinde belirli bir boru hattını yürütmek üzere (en azından şimdilik) tasarlanmıştır.

Ancak, çok öğeli freestyle projelerinde yapılan Multi-Branch Project eklentisini kullanabilirsiniz. İlk olarak, multibranch pipeline configuration ile olduğu gibi multibranch freestyle configuration tanımlamanız gerekiyor. Aşağıda gösterilen gibi bu yeni öğeyi seçin : o Yapılandırmanızın adı ve bir alt proje için içeren bir klasör oluşturur, yani

New Freestyle multi-branch project

bu konfigürasyonu, multibranch pipeline tip tamamen aynı davranacaktır her şube otomatik olarak algılandı.

uygulama daha sonra çocuk oyuncağı olmalı:

  1. Yapınızda bir parçası olarak çoklu şube konfigürasyonda
  2. Çağrısı başka yapı da SCM depo belirtin/post-build bir standart yapacağı gibi freestyle projesi, parametreli bir işi çağırmak (ve bunu build-job olarak adlandırmak) ve onu depo bilgileri (ör. Git URL'si ve geçerli şube) (bu amaç için $GIT_URL ve $GIT_BRANCH önceden tanımlanmış değişkenleri kullanabilirsiniz)
  3. Sizin build-job, sadece bir inline boru hattı veya SCM'den kontrol edilen bir pipeline betiğini tanımlayın ve bu betiğin içinde bir SCM checkout yapın ve inşa etmeniz gereken adımlarla devam edin. build-job boru hattı içeriği örneği:

. Tabii

node() { 
    stage 'Checkout' 
    checkout scm: [$class: 'GitSCM', branches: [[name: '*/${GIT_BRANCH}']], userRemoteConfigs: [[url: '${GIT_URL}']]] 

    stage 'Build' 
    // Build steps... 
} 

sizin farklı multibranches projeleri biraz farklı davranılması gerekiyorsa, ayrıca orta projeleri kullanabilirsiniz) sırayla jenerik build-job boru hattını aramak olacağını

(en build-project-A, build-project-B ... diyelim)

Bu çözümün en büyük dezavantajı, tüm yapılarınızdan yalnızca bir işten sorumlu olacak ve hata ayıklamayı zorlaştıracaktır. Çok-merkezli projelerinizin başarı/hata durumunda mavi/kırmızıya gitmesine rağmen, yapınızın gerçek problemini bulmak için build-job'a geri dönmeniz gerekecektir.

+5

Bu freestyle çoklu bağlantı seçeneği şimdi resmi olarak kullanım dışı görünüyor. Jenkins _does not_ şu anda, Jenkinsfile'ın bulunmadığı projeler için çoklu kutu yapıları yapma seçeneği sunuyor. Hangi gerçekten berbat – kert

İlgili konular