2017-12-21 139 views
6

Trong tệp đường dẫn jenkins của tôi, tôi sử dụng JsonSlurperClassic để đọc cấu hình xây dựng từ tệp .json. Tuy nhiên, điều này giới thiệu mã cần được phê duyệt trên trang Phê duyệt Tập lệnh trong quá trình. Điều này làm việc tốt khi tôi làm điều đó trên GUI.Làm cách nào để phê duyệt đoạn mã từ tệp jenkinsfile thông qua bảng điều khiển tập lệnh groovy?

Tuy nhiên, tôi cũng có một tập lệnh tự động thiết lập máy jenkins của mình, nên tạo một máy sẵn sàng hoạt động không yêu cầu các hoạt động GUI khác. Tập lệnh này đã sử dụng giao diện điều khiển kịch bản lệnh jenkins để phê duyệt các lệnh khởi động nô lệ. Mã groovy được thực hiện trong bảng điều khiển kịch bản để làm điều này trông như thế này.

def language = 'system-command'; 
def scriptSnippet = 'ssh [email protected] java -jar ~/bin/slave.jar'; 

def scriptApproval = Jenkins.instance.getExtensionList(
    'org.jenkinsci.plugins.scriptsecurity.scripts.ScriptApproval')[0]; 
def scriptHash = scriptApproval.hash(scriptSnippet, language); 
scriptApproval.approveScript(scriptHash); 

này hoạt động tốt, nhưng bây giờ tôi muốn sử dụng cùng mã phê duyệt kịch bản đoạn đến từ đường ống của tôi. Tôi đã trao đổi hai dòng đầu tiên với

def language = 'groovy' 
def scriptSnippet = 'new groovy.json.JsonSlurperClassic'; 

nơi scriptSnippet được lấy từ các tập tin scriptApproval.xml. Thực hiện việc này sẽ thêm mục nhập <approvedScriptHashes> mới vào tệp scriptApproval.xml nhưng không xóa mục nhập <pendingSignature> có chứa đoạn mã. Điều này có nghĩa là nó không hoạt động.

Tôi đoán là ngôn ngữ là sai, nhưng các giá trị khác mà tôi đã thử như groovy-sh hoặc system-commands cũng không hoạt động. Bạn có bất kỳ ý tưởng tại sao nó không hoạt động?

Cảm ơn bạn đã dành thời gian.

+0

Có thể phương thức 'approvalClasspathEntry'? Bạn đang cố gắng làm gì ở đây? – mkobit

+0

@mkobit Tôi có một kịch bản thiết lập cá thể jenkins của tôi từ đầu. Tôi muốn rằng jenkins của tôi đã sẵn sàng để đi sau khi kịch bản đó được thực thi. Điều này có nghĩa rằng kịch bản lệnh cần phê duyệt tất cả các đoạn mã từ công việc đường ống của tôi hoặc công việc đường ống sẽ thất bại trong lần chạy đầu tiên với yêu cầu phê duyệt các tập lệnh theo cách thủ công trên GUI. – Knitschi

Trả lời

2

Bạn có thể sử dụng phương pháp ScriptApproval#approveSignature. Dưới đây là ví dụ hoạt động trên Jenkins của tôi 2.85

def signature = 'new groovy.json.JsonSlurperClassic' 
org.jenkinsci.plugins.scriptsecurity.scripts.ScriptApproval.get().approveSignature(signature) 
+0

@Knitschi có phù hợp với bạn không? –

+0

Xin lỗi vì trả lời muộn. Nó hoạt động, tuyệt vời! – Knitschi

Các vấn đề liên quan