variabel lewat antara file asyik


9

Saya mengelola banyak pekerjaan di Jenkins dengan plugin DSL. Plugin itu menggunakan definisi .groovy jadi saya pikir bahkan jika seseorang tidak menggunakan Jenkins tetapi menggunakan groovy mungkin dapat membantu.

Secara umum, saya ingin membuat file tambahan, yang mungkin berupa file asyik, JSON atau YAML, apa pun. Yang penting adalah kemungkinan untuk menghubungkan file itu dengan file .groovy saya.

Dalam file itu, saya mendefinisikan variabel (bukan hanya string) misalnya alamat IP atau hal-hal lain misalnya.

ip_gitlab: 1.2.3.4
default_user: admin

Dalam file asyik saya, saya ingin dapat menggunakan variabel-variabel ini.

Pendekatan itu mungkin di groovy?


tentu saja itu mungkin. Misalnya ada groovy-lang.org/json.html .
smelm

Jika mungkin untuk menentukan classpath tambahan dalam plugin DSL. kemudian dimasukkan ke dalam folder yang akan Anda tambahkan ke file classpath groovy seperti class GLOBAL{ def a=111; def b=222; }. maka dalam kode Anda harus dapat mengaksesnyaGLOBAL.a
daggett

@daggett Saya mencoba saat Anda menulis dan selalu ada kesalahan: 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' Kesalahan ini terjadi saat memproses kelas Anda GLOBAL
rafal1337

saya lupa . untuk setiap variabel yang ditentukan harus ada staticawalan. class GLOBAL{ static def a=111; static def b=222; }. tetapi kesalahan yang Anda miliki aneh. Anda bisa menunjukkan variabel yang telah Anda nyatakan dan bagaimana Anda menggunakannya dalam dsl.
daggett

1. Konfigurasi saya dari dsl postimg.cc/TLHK5k6h 2. kesalahan selama pemrosesan dsl postimg.cc/21F37jDs
rafal1337

Jawaban:


3

Saya sarankan menggunakan file properti sebagai @JBaruch menulis

ip_gitlab=1.2.3.4
default_user=admin

Dan muat

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

Maka Anda bisa menggunakannya, dapatkan ip misalnya:

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

2
Ini adalah salinan yang dikaitkan dengan minimal dari pos lain; Anda setidaknya ingin mengikuti pedoman referensi dan memberi nama penulis.
Martijn Pieters

Unfornetly yang tidak berfungsi di Jenkins DSL, tidak dapat menemukan file dengan properti, tetapi file ini adalah folder yang sama ...FATAL: test.properties (No such file or directory) java.io.FileNotFoundException: test.properties (No such file or directory)
rafal1337

@ rafal1337 Apakah Anda mencoba menggunakan sebagian / path file lengkap?
user7294900

@ user7294900 Ya, saya mencoba beberapa jalur tetapi tanpa efek positif.
rafal1337


2

Buat file asyik dan tentukan beberapa informasi umum dan gunakan load.

Misalnya, hello.conf (ditulis oleh groovy)

build_name = 'hello'

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

Dan gunakan itu oleh load

load 'hello.conf'

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

terlihat bagus tetapi dalam plugin DSL di Jenkins tidak berfungsi: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

jika Anda menginginkan jawaban spesifik Jenkins: Ada Plugin Penyedia File Config ke jenkins.

Anda dapat menyimpan file konfigurasi / properti melalui file yang Dikelola. Pergi ke Kelola Jenkins> File yang dikelola dan dan buat file baru. Ini mendukung .groovy, .json, .xml dan banyak lainnya.

Setelah Anda memilikinya, Anda dapat memuat file tersebut di dalam pekerjaan menggunakan kotak centang Berikan Konfigurasi file yang akan memuat file ke dalam variabel env secara otomatis.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.