Chúng tôi hiện đang kích hoạt công việc Jenkins từ tập lệnh Python với sự trợ giúp của PycURL. Tuy nhiên, chúng tôi muốn loại bỏ sự phụ thuộc vào PycURL, nhưng đã có rất ít thành công cho đến nay. Điều làm cho kịch bản của chúng ta phức tạp hơn là chúng ta cần phải đăng một tập tin như một tham số. Lôgic PycURL hiện tại của chúng tôi để đăng yêu cầu có dạng như sau:Cách kích hoạt công việc Jenkins đã xác thực với thông số tệp bằng thư viện Python chuẩn
url = "https://myjenkins/job/myjob/build"
with contextlib.closing(pycurl.Curl()) as curl:
curl.setopt(pycurl.URL, url)
curl.setopt(pycurl.USERPWD, "myuser:mypassword")
curl.setopt(pycurl.SSL_VERIFYPEER, False)
curl.setopt(pycurl.SSL_VERIFYHOST, False)
curl.setopt(pycurl.FAILONERROR, True)
data = [
("name", "integration.xml"),
("file0", (pycurl.FORM_FILE, "integration.xml")),
("json", "{'parameter': [{'name': 'integration.xml', 'file': 'file0'}]}"),
("Submit", "Build"),
]
curl.setopt(pycurl.HTTPPOST, data)
try:
curl.perform()
except pycurl.error, err:
raise JenkinsTriggerError(curl.errstr())
Làm cách nào chúng ta có thể thay thế thiết bị này bằng thư viện Python chuẩn?
Chúng tôi đã thử trước đây, nhưng phải từ bỏ vì chúng tôi không thể xem cách tải lên tệp thành công như bạn có thể thấy từ my question on that issue.
Bạn dường như được sử dụng 'https'. Hãy coi chừng rằng 'httplib' và' urllib2' không xác minh chứng chỉ máy chủ khi kết nối với một trang web HTTPS (xem tài liệu chính thức), vì vậy nó sẽ không thể thiết lập kết nối một cách an toàn. (Bạn có thể giải quyết vấn đề này bằng cách gói kết nối 'httplib' bằng mô-đun' ssl'.) – Bruno
Nếu bạn nhìn vào mã của tôi, bạn sẽ thấy rằng tôi đang nói với cURL để bỏ qua chứng chỉ HTTPS :) Đó là một trang mạng nội bộ, vì vậy nó không quan trọng. – aknuds1
Tại sao bạn muốn sử dụng urllib2/httplib trên pycURL? – codersofthedark