2016-09-12 31 views
11

Jenkins yapılandırmalarını git depoları içine entegre edebilmek için birkaç eski Jenkins işini pipeline feature kullanarak yenilerine taşıdım. İyi çalışıyor ama bina sırasında meydana gelen ödeme sayısını azaltmanın bir yolu olup olmadığını kendime soruyorum.Jenkins Pipeline: Birden fazla ödemeden kaçınmak mümkün mü?

Kur

  • benim git depo

    #!groovy 
    node { 
    
        stage 'Checkout' 
        checkout scm 
    
        // build project 
        stage 'Build' 
        ... 
    } 
    

Sorun bir Jenkinsfile var

  • benim git depo ilgili bir Jenkins çoklu şube iş var

    0 Benim uzaktan dalı BRANCH_1 için bastığınız zaman

    , çoklu şube Jenkins iş tetiklenir ve benim anlayış aşağıdaki adımlar meydana şudur:

    • çoklu şube iş dalı indeksleme için bir git fetch yapar ve işi tetikler benim uzaktan dalına tekabül: BRANCH_1_job
    • BRANCH_1_job tetiklenen şube Jenkinsfile almak için bir git checkout yapar
    • Jenkinsfile yürütülür ve bir checkout scm kendisini yapar. Bunu yapmazsam, hiçbir kaynak olmadığından projemi oluşturamıyorum.

    Şubemi oluşturmak için, bir git fetch ve iki git checkout ile sona ererim.

    Sorular

    • Ben doğru süreci anlamak mı? Yoksa bir şey mi özledim?
    • git checkout sayısını azaltmanın bir yolu var mı? official examples'u kontrol ettiğimde, hepsi ilk adım olarak bir kontrol scm'si yaparlar. Şahsen bunu yapmak zorunda olmadığımı düşünürdüm çünkü jenkins işi Jenkinsfile'ı almak için bir ödeme yapmak zorundaydı (bu yüzden benim kaynaklarım bir şekilde burada olmalı).
    • Git yinelemede çok sayıda referans olması durumunda, bu çoklu kontrollerin kötü performansa neden olabileceğini düşünmüyor musunuz?

    sayesinde size Jenkins iki checkouts yapmak zorunda düz Git ile tüm

  • +1

    Çok dallı boru hattını kullanarak ayarlanmadıysanız, Jenkins'de bir Jenkins (tek bir dal) boru hattı işi oluşturabilir, bu da Jenkins'de tek bir ödeme gerçekleştirir ve sonra gerçek derleme komut dosyanızı işaretli olarak yükler. 'load' ci/build-script-in-your-repo.gy 'üzerinden deposu dışarı. Maalesef, bu durumda her şube için ayrı işleri kaybedersiniz. – Carsten

    +1

    Ne demek istediğimi biliyorum ama şunu istiyorum: - ci konfigürasyonumu benim jenkins iş yapılandırmamda değil, jenkins iş yapılandırmamda saklamıyor - güzel çok bölmeli özellikleri kullanın (dal başına bir iş gibi, böylece hangisi kolayca görülebilir şube başarısız oluyor) – Bastien

    cevap

    5

    : Bir Jenkinsfile iş yürütmek ne tanımak ve bina amaçlı fiili depo içeriğinin daha sonra başka çıkış için. Teknik olarak Jenkins'in sadece bir adet Jenkinsfile'ı repodan yüklemesi gerekiyor, ancak git tek bir dosyanın kontrolüne izin vermiyor. Bu nedenle, çift giriş, çok bölmeli eklentiyi kullanarak düz gitmeyle önlenemez.

    Bitbucket veya GitHub'ta gitmeye devam ederseniz, çoklu kutucuk eklentisi yerine belirli Jenkins eklentilerini kullanarak çifte ödeme yapmaktan kaçınırsınız.Buer Bitbucket ve GitHub eklentileri için Jenkins eklenti sitesini buna göre bakın.

    Bu eklentiler, tek Jenkins dosyasını yüklemek için ilgili Git sağlayıcısının REST API'sini kullanır. Yani teknik olarak hala bir çifte kontrole sahipsiniz, ancak ilk olarak tüm depoda tam bir yerel gezinme yapmak yerine, tek bir dosyayı indirmek için basit bir REST çağrısı.

    +0

    Açıklama için teşekkürler. Jenkins Bitbucket eklentisini kontrol edeceğim – Bastien

    +0

    Tüm kuruluş taramadan github eklentisini kullanmanın bir yolu var mı? Daha az sayıda ödemeden yararlanmak isterim, ancak organizasyonda her repo olamayabilirim ... –

    +0

    Tek bir dosyanın kontrolüne izin vermez. Ancak tek bir dosyada "ödeme" yapmak için git arşivini kullanabilir. Jenkins boru hattımdaki tek bir dosyayı kontrol etmek için böyle bir şey kullanıyorum: sh "git arşivi - remote = ssh: // $ {gitUser} @ $ {gitServer}/$ {view}/$ {someProject} .git $ {env.BRANCH} - $ {specFile} | tar xf - " – DJViking