Space logo

Space

The intelligent code collaboration platform

Space and SpaceCode will be discontinued on June 1, 2025. Learn more → →

Space Automation’da Çoklu Depo Derlemeleri için Destek

Read this post in other languages:

Space Automation'da çoklu depo derlemeleri için destek

Space Automation (CI/CD’den sorumlu JetBrains Space bölümü), yakın zamanda, Automation betiklerinizin çeşitli Git depolarıyla çalışmasına izin veren birkaç harika yeni özellik kazandı.

Değişiklikleri aşağıda kısaca sunuyoruz:

  1. Bir iş (job) artık bir projedeki her depoya göz atabilir (sadece çalışan Otomasyon betiğini içerene değil).

  2. Otomasyon artık belirli bir havuz, dal, dizin veya dosyadaki değişiklikler üzerinde çalıştırılan bir işi tetikleyebilir.

Bu nerede yararlı olabilir? Örneğin, mikro hizmetlere (her biri ayrı bir depoda) dayalı bir projeniz var ve bir bütün olarak proje karşısında çalışan entegrasyon testleri içeren ayrı bir deponuz var. Başka bir gerçek hayat örneği: Bir proje birden fazla depo içeriyor ve her deponun dokümantasyon içeren kendi doc/ klasörü var. Automation’ı kullanarak, tüm bu depoların doc/ klasörlerindeki değişiklikleri izleyen ve dahili bir dokümantasyon web sitesi oluşturup dağıtan bir iş ayarlayabilirsiniz.

Daha fazla ayrıntıyı okuyun!

Kaynak kodunu kontrol etme

Normalde, Space Automation’da "kaynak kodunu kontrol etme" adımını düşünmenize gerek yoktur. Bir iş her başlatıldığında, Automation geçerli dalı mevcut depodan (çalışan betiği içeren) klonlar.
Şimdi, bir iş bir proje içindeki başka bir deponun içeriğini gerektiriyorsa, ana depoya ek olarak bu depoyu da kontrol edebilirsiniz. Tek yapmanız gereken git bloğunda ikinci deponun adını belirtmektir:

job("check out second repo") {
    // check out second-repo to /mnt/space/work/repo-2
    git("second-repository") {
        // the default path is /mnt/space/work/$repoName
        // but you can change it with cloneDir
        cloneDir = "repo-2"
    }

    container("ubuntu") {
        shellScript {
            content = """
                echo Directory structure
                ls -R /mnt
                echo Working dir is
                pwd
            """
        }
    }
}
// the /mnt/space/work dir will contain the current and the second repo
// /mnt/space/work/main-repo ; /mnt/space/work/repo-2
// Working dir is /mnt/space/work/main-repo

Hepsi bu kadar da değil! Artık, depodan hangi verileri getirmek istediğinizi de seçebilirsiniz: etiketleri, belirli dalları veya revizyonları getirebilirsiniz. Automation belgelerinde daha fazlasını öğrenin

Bir dal, dizin veya dosyadaki değişikliklerle çalıştırılan bir işi tetikleme

Varsayılan olarak, bir deponun belirli bir dalına bir commit işlemi yapıldığında, Automation bu dalda bir betik yürütmesini tetikler. Elbette, bu işlem depodaki tüm dallarda çalışır. Betiği yalnızca belirli depolarda çalıştırmak için, gitPush bloğunun içindeki branchFilter parametresini kullanın.

Örneğin, sadece my-feature dalında işler tetiklemek için:

job("Run on git push") {
    startOn {
        gitPush {
            branchFilter {
                +"refs/heads/my-feature"
            }
        }
    }
}

branchFilter‘ın Regex, dahil etme ve dışında bırakma kuralları ve joker karakter (wildcard) desteklediğini unutmayın.

Dizinlerde ve dosyalarda değişikliklerle çalışan bir işi tetiklemek için,pathFilter bloğunu kullanın (branсhFilter, ile birlikte; karmaşık filtreler yaratmayı destekler):

job("Run on git push") {
    startOn {
        gitPush {
            pathFilter {
                // include all from 'targets' directory
                +"targets/**"
                // exclude 'targets/main' directory
                -"targets/main/**"
                // include all 'Main.kt' files in the project
                // As this rule is more specific,
                // 'Main.kt' will be included even if
                // it's located in 'targets/main'
                +"**/Main.kt"
            }
        }
    }
}

Başka bir depodaki değişikliklerle çalıştırılan bir işi tetikleme

Bazen, birkaç proje deposundan kaynak kodu kullanan bir derleme yapılandırmanız gerekebilir. Örneğin, diğer depolarda hiçbir .space.kts dosyası bulunmazken, tüm proje için derleme betiğini içeren ayrı bir depo oluşturabilirsiniz.

Mümkün olan en basit örneğe bir göz atalım. Diyelim ki iki depolu bir projeniz var: first-repository ve second-repository. Şu .space.kts dosyasını first-repository‘ye eklersiniz:

job("Run on change in second-repository") {
    startOn {
       gitPush {
            repository = "second-repository"
        }
    }

    // don't forget to check out 
    // the content of second-repo
    git("second-repository")

    container("alpine") {
        shellScript {
            content = "ls /mnt/space/work"
        }
    }
}

Arayüzde nasıl görünüyor? Eğer first-repository için İşler (Jobs) sayfasını açarsanız, yeni bir şey görmezsiniz, sadece normal bir iş çalışması:

Space Automation. gitPush tetikleyicide çoklu depo desteği

Ancak şimdi eğer sayfayı second-repository için iş listesine değiştirirseniz, şu anda seçili olan depoya referansları bulunan diğer depolardan işlerin olduğu çapraz referanslı işleri içerdiğini göreceksiniz. Bizim durumumuzda, tek iş, first-repository‘den gelen işimizdir:

Space Automation. gitPush tetikleyicide çoklu depo desteği

Elbette, daha derine inebilir ve depo tetikleyicisine bir seviye daha ekleyebilirsiniz: bir dala veya veri yoluna göre filtreleme. Automation belgelerinde. daha fazlasını bulabilirsiniz.

Böylece küçük duyurumuzun sonuna geldik. Yorumlarınızı aşağıya bırakmanızı ve bu yeni özellikleri denemenizi rica ederiz!

image description

Discover more