2016-07-07 13 views

cevap

-3

Sen ana işi içerisinde git url depolamak ve çocuk fazı

parametre geçirmek zorunda veya basitçe orada kök iş ve çalışma formdaki projeyi klonlayabilirsiniz.

Kullanım https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin onun Jenkins git eklentisi

+2

Bu, çok kanallı boru hattından daha serbest işler için daha fazladır. – BitwiseMan

+0

Bu, freestyle işlerini doğru tanımladığınız için jenkins – CodeWizard

+1

Agreed ile çalışıyorum. Fakat çok kutulu pipepline farklı çalışır. Soru çok kanallı boru hattı işlerine özel olduğundan, cevabınız geçerli değildir. – BitwiseMan

11

Haklısın, scm nesne ihtiyacınız olan bilgileri var.

Bir Boru Hattı projesinde (veya Çok Kutuplu Boru Hattı projesinde) kaynak denetimi olarak git kullanıldığında, scm genel değişkeni GitSCM örneğidir. Bu, scm.getUserRemoteConfigs() 'in UserRemoteConfig örneklerinin bir listesini döndüreceği anlamına gelir. Bu örneklerde git uzak adı, url ve refspec vardır. Eşleşen bir uzaktan kumandayı bulmak için bu listenin üzerinde yineleyebilir veya yalnızca tek bir URL’niz olduğundan emin olduğunuzda ilkini alabilirsiniz.

def scmUrl = scm.getUserRemoteConfigs()[0].getUrl() 

NOTLAR

  • RejectedAccessException - Eğer manuel olarak onayladığınızda altında, org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException atacağım hem getUserRemoteConfigs ve getUrl yöntemleri "Jenkins Yönet -> Süreç içi Senaryo Onayı". Bunu yapmamın tek yolu, komut dosyasını çalıştırmayı denemek, bir erişim istisnası atmak, istisnaya neden olan bir yöntemi onaylamak ve daha fazla erişim istisnası atılıncaya kadar her yöntem için tekrarlamaktır. Mutlaka ayar sunucu çapındadır, bu yüzden her bir boru hattı işi için değil, jenkins denetleyicisi başına bunu yapmanız yeterlidir.

  • GitHub - Bir GitHub -sourced çoklu şube boru hattı ile test ederken, getUserRemoteConfigs iki UserRemoteConfig örneklerini, çekme istekleri için düzenli branşlarda ve diğeri döndü. Bunlar aynı url'e sahipti, çok önemli değil, akılda tutulması gereken bir şey vardı. @BitwiseMan tarafından cevap üzerinde bir yorumda esinlenerek

    echo scm.getUserRemoteConfigs() 
    
    "[ 
        +refs/heads/*:refs/remotes/origin/* => https://github.com/bitwiseman/project.git (origin), 
        +refs/pull/*/head:refs/remotes/origin/pr/* => https://github.com/bitwiseman/project.git (origin) 
    ]" 
    
+0

Teşekkürler, bu tam olarak aradığım şey. –

+3

Cevabınız ayrıca, '' .git/config''' dosyasını ayrıştırarak URL’nin kullanılabileceğini anlamamı sağladı. Bu, RejectedAccessException sorunundan kaçınmanın yararınadır, ancak derleme komut dosyasına daha fazla karmaşıklık katar. –

+0

jenkins bu https URL’yi nereden alıyor? 'git remote -v', SSH URL'sini beklendiği gibi çıkarır. Submodule güncellemesi gibi önemsiz şeylerin devasa çözümlere nasıl ihtiyaç duyduğuna üzülüyorum. Multibranch boru hattı, prime-time için hiç hazır değil ... – andsens

8

, ben RejectedAccessException olmadan URL almak için bir (hacky) yol bulduk: Örneğin, bir projede bir HTTPS tabanlı bağlantıyı kullanarak

checkout scm 
def url = sh(returnStdout: true, script: 'git config remote.origin.url').trim() 

Lütfen checkout scm'dan sonra yapılması gerektiğini unutmayın. Temel olarak, teslim alınmış bir git deposunda olmanız gerekir (yani, içinde .git/config dosyası var)

+0

Bu çalışır. Benim durumumda, bir maven projesinin pom.xml'si içindeki url'yi yapılandırmaktan kaçınmak için bunu kullanıyorum. Bu şekilde url'yi otomatik olarak keşfetmenin maven projesinde url'yi sürdürmek zorunda kalmadan kesinlikle daha az hacky olduğunu söyleyebilirim (yanlışsa kafa karıştırıcı hatalar verebilir). – drrob

İlgili konular