2013-09-03 22 views
5

tôi cần có được công việc tên trong ví dụ này, tôi có một mã cho được giá trị trước đó của tham số xây dựng với mã màLàm thế nào để có được tên công việc trên một tham số động groovy tại Jenkins

jenkins.model.Jenkins.instance.getItem("nameOfJob").lastBuild.getBuildVariables().get("NameOfParameter"); 

Các Tên của công việc bây giờ là khó mã hóa, tôi cần phải có tên này sẽ là tên của công việc hiện tại, Làm thế nào tôi không thể làm gì?

Cảm ơn bạn

Trả lời

8

Tham số động Groovy không có quyền truy cập vào các biến môi trường thông thường mà phần còn lại của công việc jenkins là thuộc về riêng.

Dưới đây là một hack làm việc để có được tên công việc:

def build = Thread.currentThread().toString() 
def regexp= ".+?/job/([^/]+)/.*" 
def match = build =~ regexp 
def jobName = match[0][1] 
4

Nếu bạn đang chạy một bước trong một dự án sau đó có một biến môi trường JOB_NAME

mà trong groovy bạn có thể truy cập vào

String jobName = System.getenv('JOB_NAME') 

Nếu bạn muốn nó gửi build sau đó kiểm tra câu trả lời này How to get specific information about the current build project in Jenkins with Groovy?

Theo câu hỏi bổ sung, để có quyền truy cập vào tên công việc Jenkins ở giai đoạn thiết lập bạn cần sử dụng EnvInject plugin mà hỗ trợ groovy - nó cần phải trả lại một bản đồ

println "currentJob -->${currentJob}" 
println "currentBuild --> ${currentBuild}" 

[currentJob: currentJob, currentBuild: currentBuild] 

Đây là đầu ra khi tôi sử dụng một công việc vỏ để echo môi trường mới

Started by user anonymous 
[EnvInject] - Loading node environment variables. 
[EnvInject] - Preparing an environment for the build. 
[EnvInject] - Keeping Jenkins system variables. 
[EnvInject] - Keeping Jenkins build variables. 
[EnvInject] - Evaluation the following Groovy script content: 

println "currentJob -->${currentJob}" 
println "currentBuild --> ${currentBuild}" 

[currentJob: currentJob, currentBuild: currentBuild] 

currentJob -->[email protected][_xxx] 
currentBuild --> _xxx #6 
[EnvInject] - Injecting contributions. 
Building on master in workspace /var/lib/jenkins/workspace/_xxx 
[_xxx] $ /bin/sh -xe /tmp/hudson3812821436584477615.sh 
+ echo _xxx #6 
_xxx #6 
+ echo [email protected][_xxx] 
[email protected][_xxx] 
Finished: SUCCESS 

Bạn cần phải làm một số thao tác chuỗi để tách biệt công việc và xây dựng

+0

Cảm ơn bạn rất nhiều –

+0

Man, trong tham số động này không hoạt động –

+1

Bạn nói đúng. nếu bạn làm điều này trong thuộc tính động 'System.getenv(). mỗi {println it}' thì nó không liệt kê môi trường JENKINS. – KeepCalmAndCarryOn

2

Tiếp theo công trình đối với tôi từ kịch bản tham số Plugin uno lựa chọn Groovy (có nghĩa là trước khi xây dựng được ràng buộc):

def job = this.binding.jenkinsProject 

Nếu bạn quan tâm đến tên công việc, sau đó:

def jobName = this.binding.jenkinsProject.name 
+0

chỉ cần gọi 'jenkinsProject'? – akostadinov

0
(Thread.currentThread().toString() =~ /job\/(.*?)\//)[0][1] 
Các vấn đề liên quan