truyền các biến beetwen các tệp Groovy


9

Tôi đang quản lý nhiều công việc trong Jenkins bằng plugin DSL. Plugin đó đang sử dụng các định nghĩa .groovy vì vậy tôi nghĩ ngay cả khi ai đó không sử dụng Jenkins nhưng sử dụng Groovy có thể giúp ích.

Nói chung, tôi muốn tạo một tệp bổ sung, đó có thể là tệp Groovy, JSON hoặc YAML, bất cứ điều gì. Điều quan trọng là khả năng kết nối tệp đó với tệp .groovy của tôi.

Trong tệp đó, tôi đang xác định các biến (chứ không chỉ là chuỗi) ví dụ địa chỉ IP hoặc các thứ khác, vd.

ip_gitlab: 1.2.3.4
default_user: admin

Trong các tệp Groovy của tôi, tôi muốn có thể sử dụng các biến này.

Cách tiếp cận đó là có thể trong Groovy?


tất nhiên là có thể Ví dụ: có Groovy-lang.org/json.html .
smelm

Nếu có thể định nghĩa đường dẫn bổ sung trong plugin DSL. sau đó đưa vào thư mục mà bạn sẽ thêm vào (các) tệp Groovy classpath như thế nào class GLOBAL{ def a=111; def b=222; }. sau đó trong mã bạn sẽ có thể truy cập nóGLOBAL.a
daggett

@daggett Tôi đã cố gắng như bạn đã viết và luôn gặp lỗi: 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' Lỗi này xảy ra trong quá trình xử lý lớp GLOBAL của bạn
rafal1337

Tôi quên mất . đối với mỗi biến được xác định nên có statictiền tố. class GLOBAL{ static def a=111; static def b=222; }. nhưng lỗi bạn có là lạ. bạn có thể hiển thị biến bạn đã khai báo và cách bạn sử dụng nó trong dsl.
daggett

1. Cấu hình của tôi về dsl postimg.cc/TLHK5k6h 2. lỗi trong quá trình xử lý dsl postimg.cc/21F37jDs
rafal1337

Câu trả lời:


3

Tôi đề nghị sử dụng tệp thuộc tính như @JBaruch đã viết

ip_gitlab=1.2.3.4
default_user=admin

Và tải nó

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

Sau đó, bạn có thể sử dụng nó, lấy ip chẳng hạn:

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

2
Đây là một bản sao được quy cho tối thiểu từ bài đăng khác; ít nhất bạn muốn làm theo các hướng dẫn tham khảo và đặt tên cho tác giả.
Martijn Pieters

Thật không may là không hoạt động trong DSL của Jenkins, không thể tìm thấy tệp có thuộc tính, nhưng tệp này là cùng một thư mục ...FATAL: test.properties (No such file or directory) java.io.FileNotFoundException: test.properties (No such file or directory)
rafal1337

@ rafal1337 Bạn đã thử sử dụng đường dẫn một phần / toàn bộ tệp chưa?
user7294900

@ user7294900 Có, tôi đã thử nhiều đường nhưng không có hiệu quả tích cực.
rafal1337


2

Tạo tệp Groovy và xác định một số thông tin chung và sử dụng load.

Ví dụ: hello.conf (được viết bởi Groovy)

build_name = 'hello'

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

Và sử dụng nó bởi load

load 'hello.conf'

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

có vẻ tốt nhưng trong plugin DSL trong Jenkins không hoạt động: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

nếu bạn muốn có câu trả lời cụ thể của Jenkins: Có Plugin Trình cung cấp tệp cấu hình cho jenkins.

Bạn có thể lưu trữ tệp cấu hình / thuộc tính thông qua các tệp được quản lý. Chuyển đến Manage Jenkins> Các tệp được quản lý và tạo một tệp mới. Nó hỗ trợ .groovy, .json, .xml và nhiều thứ khác.

Khi bạn đã có điều đó, bạn có thể tải tệp đã nói trong một công việc bằng cách sử dụng hộp kiểm Cung cấp tệp Cấu hình sẽ tự động tải tệp vào biến env.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.