groovy dosyaları arasında geçiş değişkenleri


9

Jenkins'te DSL eklentisi ile birçok işi yönetiyorum. Bu eklenti .groovy tanımlarını kullanıyor, bu yüzden birisi Jenkins kullanmasa da groovy kullanmak bile yardımcı olabilir.

Genellikle ek bir dosya oluşturmak istiyorum, bu harika bir dosya olabilir, JSON veya YAML, neyse. Bu dosyayı .groovy dosyama bağlama olasılığı önemlidir.

Bu dosyada, örneğin adres IP veya diğer şeyler için değişkenleri tanımlamak yerine (sadece dizeleri).

ip_gitlab: 1.2.3.4
default_user: admin

Harika dosyalarımda bu değişkenleri kullanabilmek istiyorum.

Bu yaklaşım harika bir şekilde mümkün mü?


tabii ki bu mümkün. Örneğin groovy-lang.org/json.html var .
14'te koklamak

DSL eklentisinde ek sınıf yolu tanımlamak mümkünse. sonra sınıf yolu groovy dosya (lar) gibi ekleyeceğiniz klasöre koyun class GLOBAL{ def a=111; def b=222; }. o zaman kodla erişebilmelisinGLOBAL.a
daggett

@daggett Ben yazarken deniyordum ve her zaman hata var: org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object 'org.codehaus.groovy.runtime.InvokerHelper$1@641eff69' with class 'org.codehaus.groovy.runtime.InvokerHelper$1' to class 'javaposse.jobdsl.dsl.JobParent' Bu hata sınıf GLOBAL
rafal1337

Unuttum . tanımlanan her değişken için staticönek olmalıdır . class GLOBAL{ static def a=111; static def b=222; }. ama hatan garip. bildirdiğiniz değişkeni ve dsl'de nasıl kullandığınızı gösterebilir misiniz?
daggett

1. Benim dsl postimg.cc/TLHK5k6h yapılandırmam 2. dsl işleme postimg.cc/21F37jDs
rafal1337

Yanıtlar:


3

@JBaruch yazdığı gibi bir özellik dosyası kullanmanızı öneririz

ip_gitlab=1.2.3.4
default_user=admin

Ve yükle

Properties properties = new Properties()
File propertiesFile = new File('test.properties')
propertiesFile.withInputStream {
    properties.load(it)
}

Sonra kullanabilirsiniz, örneğin ip olsun:

def ipPropertyName= 'ip_gitlab'
properties."$ipPropertyName"

2
Bu, diğer gönderinin asgari düzeyde ilişkilendirilmiş bir kopyasıdır; en azından referans yönergelerini takip etmek ve yazarı adlandırmak istersiniz .
Martijn Pieters

Unutmazly Jenkins DSL çalışmıyor, özellikleri ile dosyayı bulamıyorum, ancak bu dosya aynı klasör ...FATAL: test.properties (No such file or directory) java.io.FileNotFoundException: test.properties (No such file or directory)
rafal1337

@ rafal1337 Kısmi / tam dosya yolunu kullanmayı denediniz mi?
user7294900

@ user7294900 Evet, birden çok yol deniyordum, ancak olumlu bir etkisi yoktu.
rafal1337


2

Harika bir dosya oluşturun ve bazı genel bilgileri tanımlayın ve kullanın load.

Örneğin, merhaba.conf (groovy tarafından yazılmıştır)

build_name = 'hello'

build_config = [
    'git': 'your git repository',
    'build_job': ['bulid_a', 'build_b']
]

Ve bunu kullanarak load

load 'hello.conf'

println(build_name)
for (job in build_config['build_job']) {
    build job: job
}

iyi görünüyor ama Jenkins DSL eklentisi çalışmıyor:ERROR: (pipeline.groovy, line 1) No signature of method: pipeline.load() is applicable for argument types: (java.lang.String) values: [a_test.groovy]Possible solutions: job(java.lang.String), find(), folder(java.lang.String), job(java.lang.String, groovy.lang.Closure), find(groovy.lang.Closure), wait()
rafal1337

2

Jenkins'e özel bir cevap istiyorsanız: Jenkins için bir Config File Provider eklentisi var .

Yapılandırma / özellikler dosyalarını Yönetilen dosyalar aracılığıyla depolayabilirsiniz. Jenkins'i Yönet> Yönetilen dosyalar'a gidin ve yeni bir dosya oluşturun. .Groovy, .json, .xml ve diğerlerini destekler.

Bunu yaptıktan sonra, dosyayı otomatik olarak bir env değişkenine yükleyecek olan Yapılandırma dosyası sağla onay kutusunu kullanarak söz konusu dosyayı işin içine yükleyebilirsiniz.

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.