7

Có ai đó đã thử cách thêm hoặc cập nhật biến MÔI TRƯỜNG trong cấu hình của Jenkins slave bằng cách sử dụng Jenkins Rest/API hoặc bất kỳ cách nào khác.Jenkins Slave - Cách thêm hoặc cập nhật các biến MÔI TRƯỜNG

Sử dụng plugin Jenkins Swarm, tôi đã tạo một nô lệ (nó sử dụng JLNP để kết nối với chủ Jenkins) nhưng các biến MÔI TRƯỜNG (hộp kiểm không được đánh dấu) và không có biến MÔI TRƯỜNG được tạo bởi jar khách Swarm (theo mặc định). Một người dùng có thể tự thêm nếu reqd nhưng tôi đang tìm kiếm nếu có một cách để thêm/cập nhật các biến ENV trong một nô lệ.

enter image description here

Tôi muốn tạo ra nhiều nô lệ bầy đàn (trong đó mỗi nô lệ có các công cụ khác nhau với giá trị khác nhau tức là slave01 JAVA_HOME =/path/jdk1.7.0.67 và khác slave02 JAVA_HOME =/path/jdk1.8.0_45 Vân vân).

Tôi cố gắng nhìn vào http://javadoc.jenkins-ci.org/hudson/model/Node.html hoặc http://javadoc.jenkins-ci.org/hudson/model/Slave.html hoặc http://javadoc.jenkins-ci.org/hudson/slaves/DumbSlave.htmlnhưng nó không cung cấp bất kỳ phương pháp/cách để thiết lập các thuộc tính/biến ENV Node của. Không có setNodeProperties hoặc một cái gì đó tương tự (nếu đó là phương pháp đúng để thiết lập các biến/thuộc tính ENV).

Điều tôi đang tìm là cách thêm các biến sau vào slave.

enter image description here

bài này (bằng cách Villiam) phản ánh rằng ai đó đã cố gắng mảnh groovy cũng làm như vậy nhưng tôi không thấy làm thế nào ông có thể thiết lập các biến ENV sử dụng cùng một API to Create/Manage Nodes

Jenkins- CLI có tùy chọn để chạy các kịch bản hấp dẫn:

java -jar path/to/jenkins-cli.jar -s http://localhost:8080 groovy path/to/script

kịch bản:

import jenkins.model.* 
import hudson.model.* 
import hudson.slaves.* 
Jenkins.instance.addNode(new DumbSlave("test-script","test slave description","C:\\Jenkins","1",Node.Mode.NORMAL,"test-slave-label",new JNLPLauncher(),new RetentionStrategy.Always(),new LinkedList())) 

(xem tài liệu cho các tùy chọn khác: http://javadoc.jenkins-ci.org/)

Bạn cũng có thể chạy một vỏ groovy tương tác với

java -jar jenkins-cli.jar -s http://localhost:8080 groovysh

Trả lời

1

Một phương pháp mà sẽ làm việc nếu "Environment Variables" hộp kiểm chưa được đánh dấu là sử dụng nodeProperties.add(new EnvironmentVariablesNodeProperty)

Các toàn bộ tập lệnh tôi đang sử dụng để đặt Biến môi trường trên Jenkins khi triển khai bên dưới (dự định được gọi là jenkins-cli.jar):

import jenkins.model.* 
import hudson.model.* 
import hudson.slaves.* 

String node_name = args[0] 
String env_key = args[1] 
String env_value = args[2] 

instance = Jenkins.getInstance() 
if (node_name == "master") { 
    node = instance 
} else { 
    instance.getNode(node_name) 
} 
props = node.nodeProperties.getAll(hudson.slaves.EnvironmentVariablesNodeProperty.class) 

if(props.empty) { 
    def entry = new EnvironmentVariablesNodeProperty.Entry(env_key, env_value) 
    def evnp = new EnvironmentVariablesNodeProperty(entry) 
    node.nodeProperties.add(evnp) 
} else { 
    for (prop in props) { 
    prop.envVars.put(env_key, env_value) 
    } 
} 

instance.save() 
3

Khi tạo nút , bạn có thể chuyển các biến như tham số cuối cùng:

import jenkins.model.* 
import hudson.model.* 
import hudson.slaves.* 

entry = new EnvironmentVariablesNodeProperty(new EnvironmentVariablesNodeProperty.Entry("MY_NAME", "my_value")) 

list = new LinkedList() 
list.add(entry) 

Jenkins.instance.addNode(new DumbSlave("test-slave", "test slave description", "C:\\Jenkins", "1", Node.Mode.NORMAL, "test-slave-label", new JNLPLauncher(), new RetentionStrategy.Always(), list)) 

Từ DumbSlave here và EnvironmentVariablesNodeProperty here.

Để thêm biến để một nô lệ hiện có, chúng tôi có thể sử dụng như sau:

import jenkins.model.* 
import hudson.model.* 
import hudson.slaves.* 

jenkins = Jenkins.instance 
node = jenkins.getNode('test-slave') 

props = node.nodeProperties.getAll(hudson.slaves.EnvironmentVariablesNodeProperty.class) 
for (prop in props) { 
    prop.envVars.put("MY_OTHER_NAME", "my_other_value") 
} 
jenkins.save() 
+0

Tuyệt vời! Bạn có thể chỉ ra điều gì sẽ xảy ra nếu nút đã được tạo (trong một số thời trang) và tôi muốn sử dụng đoạn mã trên (nhưng thay vì sử dụng các hàm addNode và DumbSlave mới, tôi có thể sử dụng một cái gì đó như updateNode và chỉ cần thay đổi/thêm/cập nhật một ENV Tôi cập nhật câu trả lời của bạn với những gì tôi có ý nghĩa (chúng ta có thể thêm if-then-else sau này và làm cho tham số script groovy này được định hướng). Ví dụ tổng thể) –

+1

Giải pháp của bạn chỉ hoạt động nếu hộp kiểm cho "Biến môi trường" được kiểm tra/đánh dấu thủ công trước. Khi sử dụng chốt plugin Swarm để tạo phụ đề, hộp kiểm "Biến môi trường" KHÔNG được đánh dấu chọn. biến thành nô lệ hiện có (giải pháp) chỉ hoạt động nếu tôi đánh dấu thủ công hộp này trước tiên. Lưu nô lệ và sau đó chạy tập lệnh trên. Tôi đã thực sự đạt được cùng tuần trước nhưng hiện bị ngăn cản bởi "Cách tự động đặt hộp kiểm cho Env biến số sắt "trong cấu hình nô lệ trước khi chạy phần quý giá trên. –

+0

Xin chào @ArunSangal, bạn đã bao giờ giải quyết vấn đề kích hoạt hộp kiểm biến môi trường một cách tự động chưa? Tôi đang đối mặt với chính xác cùng một vấn đề, và dường như không thể giải quyết nó. – laffoyb

1

My a nswer là một chút mash-mash của câu trả lời khác, nhưng nó sẽ biến 'biến môi trường' nếu nó tắt.

public class KeyValuePair { 
    String key 
    String value 
} 

... 

KeyValuePair[] environmentVariables = [...] 

... 

import hudson.slaves.EnvironmentVariablesNodeProperty 

Jenkins jenkins = Jenkins.instance 

List<EnvironmentVariablesNodeProperty> nodeProperties = jenkins.globalNodeProperties.getAll(EnvironmentVariablesNodeProperty.class) 

if (nodeProperties.empty) { // Enable 'Environment variables' under 'Global properties' 
    jenkins.globalNodeProperties.add(new EnvironmentVariablesNodeProperty()) 
    nodeProperties = jenkins.globalNodeProperties.getAll(EnvironmentVariablesNodeProperty.class) 
} 

for (int nodePropertyIndex = 0; nodePropertyIndex < nodeProperties.size(); nodePropertyIndex++) { 
    EnvironmentVariablesNodeProperty nodeProperty = nodeProperties[nodePropertyIndex] 
    for (int environmentVariableIndex = 0; environmentVariableIndex < environmentVariables.size(); environmentVariableIndex++) { 
     KeyValuePair environmentVariable = environmentVariables[environmentVariableIndex] 
     nodeProperty.envVars.put(environmentVariable.key, environmentVariable.value) 
    } 
} 

jenkins.save() 
Các vấn đề liên quan