2012-01-11 25 views
6

Có ai biết cách sửa đổi nhãn nút Jenkins/Hudson theo cách không theo cách thủ công không? Tôi có nghĩa là, triệt để một API như API CLI mà công cụ này cung cấp (mà không cần khởi động lại Jenkins/Hudson tất nhiên).API CLI Jenkins/Hudson để sửa đổi nhãn nút bằng cách sử dụng Groovy

Đoán của tôi là tùy chọn tốt nhất là sử dụng tập lệnh Groovy để nhập vào ruột Jenkins/Hudson. Thực hiện một cái gì đó như:

java -jar -s HUDSON_URL: 8080 groovy /path/to/groovy.groovy

Là nội dung của kịch bản rằng một cái gì đó như:

for (aSlave in hudson.model.Hudson.instance.slaves) { 
    labels = aSlave.getAssignedLabels() 
    println labels 
    **aSlave.setLabel("blabla")** // this method doesn't exist, is there any other way??? 
} 

Cảm ơn trước!

Victor

Trả lời

1

Tôi chưa thấy cách nào để thay đổi nhãn phụ.

Tôi đã thực hiện chỉnh sửa tệp config.xml chính và phát hành lại từ CLI.

này có đó là vấn đề của riêng mặc dù - việc làm bất cứ hiện đang chạy bị mất cho đến khi Jenkins tiếp theo khởi động lại - xem https://issues.jenkins-ci.org/browse/JENKINS-3265

4

Lưu ý: các câu trả lời khác là một chút cũ, vì vậy nó có thể được rằng API đã xuất hiện kể từ đó .

Nhãn nút được truy cập trong API dưới dạng một chuỗi, giống như trong màn hình Định cấu hình.

Để đọc và viết nhãn: Node.getLabelString()Node.setLabelString(String).

Lưu ý rằng bạn cũng có thể nhận được nhãn hiệu quả qua: Node.getAssignedLabels(), trả về Bộ sưu tập LabelAtom bao gồm các nhãn được tính động như 'tự ghi nhãn' (đại diện cho tên nút).

Cuối cùng, các phương thức này trên lớp Node cũng có thể truy cập trực tiếp từ các đối tượng slave, ví dụ: dưới dạng Hệ thống Groovy Script:

hudson = hudson.model.Hudson.instance 
hudson.slaves.findAll { it.nodeName.equals("slave4") }.each { slave -> 
    print "Slave $slave.nodeName : Labels: $slave.labelString" 
    slave.labelString = slave.labelString + " " + "offline" 
    println " --> New labels: $slave.labelString" 
} 
hudson.save() 
+0

Làm thế nào và ở đâu tôi sẽ chạy kịch bản này? Ngoài ra nó xuất hiện có thêm một} ở cuối. –

+0

https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+Script+Console –

+1

Dường như những thay đổi này vẫn tồn tại. –

0

Tôi đã tìm được cách để thực hiện điều này bằng cách sử dụng Plugin Groovy Postbuild.

Tôi có một công việc Jenkins mà phải mất một vài thông số (NodeToUpdate, LABELNAME, DesiredState) và thực hiện nội dung này trong Groovy Postbuild Plugin:

nodeName = manager.envVars['NodeToUpdate'] 
labelName = manager.envVars['LabelName'] 
set = manager.envVars['DesiredState'] 

for (node in jenkins.model.Jenkins.instance.nodes) { 
    if (node.getNodeName().equals(nodeName)) { 
     manager.listener.logger.println("Found node to update: " + nodeName) 
     oldLabelString = node.getLabelString() 
     if (set.equals('true')) { 
      if (!oldLabelString.contains(labelName)) { 
       manager.listener.logger.println("Adding label '" + labelName  + "' from node " + nodeName); 
       newLabelString = oldLabelString + " " + labelName 
       node.setLabelString(newLabelString) 
       node.save() 
      } else { 
       manager.listener.logger.println("Label '" + labelName + "' already exists on node " + nodeName) 
      } 
     } 
     else { 
      if (oldLabelString.contains(labelName)) { 
       manager.listener.logger.println("Removing label '" + labelName + "' from node " + nodeName) 
       newLabelString = oldLabelString.replaceAll(labelName, "") 
       node.setLabelString(newLabelString) 
       node.save() 
      } else { 
       manager.listener.logger.println("Label '" + labelName + "' doesn't exist on node " + nodeName) 
      } 
     } 
    } 
} 
Các vấn đề liên quan