2013-10-17 13 views
5

Tôi có một số Vấn đề liên quan đến Jenkins và chạy Tập lệnh Powershell bên trong. Long Story ngắn: Script mất thời gian thực thi 8x dài sau đó chạy nó bằng tay (chỉ mất vài phút) trên Server (Slave). Tôi tự hỏi tại sao?Thời gian chờ của Jenkins vì thực thi tập lệnh dài

Trong tập lệnh là các hàm gọi lệnh như & msbuild.exe hoặc & svn cam kết. Tôi phát hiện ra rằng kịch bản treo lên trong những dòng mà trước khi lệnh metioned được thực hiện. Kết quả là, Jenkins đã hết thời gian vì Script mất nhiều thời gian. Tôi có thể thay đổi ngưỡng thời gian chờ trong cấu hình công việc Jenkins nhưng tôi không nghĩ đây là giải pháp cho vấn đề Không có lỗi ouputs hoặc bất kỳ thông tin nào tại sao phải mất lâu và tôi không có thêm ý tưởng nào vì lý do. Có lẽ một trong các bạn có thể cho tôi biết, cách Jenkins gọi các lệnh đó ra bên trong.

Đây là những gì Jenkins làm (Windows batch plugin):

powershell -File %WORKSPACE%\ScriptHead\DeployOrRelease.ps1 
+0

"Tập lệnh có thời gian thực thi 8x dài sau đó chạy thủ công (chỉ mất vài phút) trên Máy chủ (Slave)" bạn đã chạy tập lệnh dưới cùng một người dùng mà Jenkins chạy dưới? –

+0

Xin lỗi vì trả lời muộn. Không, tôi chỉ thực hiện nó (quyền quản trị) trong tài khoản của tôi. Nhưng đây có thể là một gợi ý tốt! – Rosch

+0

Đó là vì quyền hạn gọi điện của bạn thông qua cmd và một trong các lệnh ghép ngắn không bao giờ trả về .. đăng mã của bạn hoặc chỉ kiểm tra bằng cách tạo tệp lô và chạy tệp cục bộ – Cole9350

Trả lời

0

Tôi đã tạo Powershell của riêng tôi CI Service trước khi tôi phát hiện ra rằng Jenkins hỗ trợ nó own such plugin. Nhưng trong thực hiện của tôi và trong công việc hiện tại của tôi cấu hình chúng tôi làm theo quy tắc nguyên tắc phân biệt mẫu: nhiều hơn là tốt hơn tốt hơn. Tôi thấy rằng dịch vụ CI của tôi hoạt động tốt hơn khi được phân tách theo các bước khác nhau (cũng như trong trường hợp có lỗi dễ dàng cho việc phân tích nguyên nhân gốc rễ). Nguyên tắc trách nhiệm duy nhất cũng hữu ích ở đây. Vì vậy, như trong Jenkins, chúng tôi có trước các bước sau, xây dựng và gửi email dưới dạng tập lệnh riêng biệt. Về

msbuild.exe

Theo như tôi nhớ trong trường hợp của tôi có vấn đề liên quan với các hoạt động trong các nẻo FileSystem. Vì vậy, khi kịch bản được chia/tách ra trong các chức năng khác nhau, chúng tôi có hiệu suất tốt hơn (kiểm tra bổ sung các thông số).

0

Sử dụng kỹ thuật "phân chia và chinh phục". Bạn có hai lựa chọn: sửa đổi kịch bản của bạn để nó sẽ hiển thị những gì đang làm và bao nhiêu cho mỗi bước. Lựa chọn thứ hai là làm cho kịch bản nhỏ hơn để thực hiện những hành động như:

  • có được mã nguồn,
  • biên dịch/xây dựng ứng dụng,
  • chạy thử nghiệm,
  • tạo một gói,
  • gửi gói,
  • lưu trữ nhật ký
  • gửi thông báo.

Vấn đề nhất thường là bước đầu tiên: Để lấy mã nguồn từ GIT hoặc SVN hoặc Mercurial hoặc bất kỳ thứ gì bạn có làm hệ thống kiểm soát phiên bản. Đảm bảo bước này không được nhúng vào tập lệnh của bạn.

Trong suốt quá trình chạy, Jenkins nắm bắt đầu ra và sử dụng AJAX để hiển thị kết quả trong trình duyệt của bạn. Trong tập lệnh, hãy đảm bảo bạn xả đầu ra tiêu chuẩn cho mỗi bước hoặc một vài bước. Một số ngôn ngữ bộ nhớ cache đầu ra tiêu chuẩn để bạn có thể xem kết quả chỉ ở cuối.

Ngoài ra, bạn có thể tạo tệp nhật ký có thể hữu ích để lưu trữ và xác minh trạng thái hoạt động cho các lần chạy cũ hơn.Từ kinh nghiệm của tôi sử dụng Jenkins với hơn 10 bước sau đó yêu cầu bạn tạo một ứng dụng chuyên biệt có thể chạy nhiều bước như "khung công tác robot".

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