Làm cách nào tôi có thể khiến Jenkins thực thi một tập lệnh mà nó lấy từ Git?


12

Tôi đang sử dụng Jenkins để kích hoạt và quản lý một loạt các công việc nhập khẩu. Tôi muốn đặt tập lệnh nhập của mình vào Github và khi Jenkins xây dựng công việc, nó sẽ (a) kéo tập lệnh được kiểm soát phiên bản đó ra khỏi Github và (b) chạy tập lệnh.

Vấn đề mà tôi gặp phải là tôi không biết cách tham chiếu tên của kịch bản để chạy trong công việc. Tôi giả sử rằng mã nguồn được kéo vào thư mục không gian làm việc. Giả định đó có đúng không? (Nếu chỉ có tài liệu!)

Đây là những gì tôi đã làm cho đến nay:

  1. Đã cài đặt Jenkins (rõ ràng) trên Windows Server của tôi (không, tôi không có lựa chọn nào về điều đó)
  2. Tạo một kho lưu trữ trên tài khoản github của tôi và đặt mã của tôi vào đó
    • Nó được công khai tại https://github.com/mcholl/SARS-Import/
    • Bạn sẽ thấy tôi có hai tập lệnh, roottest.py và omnatio-video \ test.py. Mã có bằng sáng chế của Apple, tôi chắc chắn :)
    • Ý tưởng là tôi muốn chạy roottest.py
  3. Đã cài đặt plugin Github
  4. Tạo một công việc như sau:
  5. Tự thực hiện công việc

Tuy nhiên, những gì tôi nhận được là một thông báo lỗi rằng tập tin không thể được định vị. Điều này thật lạ, vì tôi cho rằng quy trình làm việc sẽ là "kéo một bản sao nguồn cục bộ vào thư mục ... (Công việc) / không gian làm việc /, sau đó chạy lệnh batch trong ngữ cảnh của thư mục không gian làm việc.

Đây là đầu ra giao diện điều khiển đầy đủ:

Bắt đầu bởi người dùng ẩn danh Xây dựng trong không gian làm việc C: \ Program Files (x86) \ Jenkins \ jobs \ Kiểm tra Github Integration \ workspace [không gian làm việc] $ cmd / c gọi C: \ Windows \ TEMP \ hudson1966342425043540895.bat

C: \ Chương trình tệp (x86) \ Jenkins \ jobs \ Kiểm tra tích hợp Github \ không gian làm việc> python roottest.py python: không thể mở tệp 'roottest.py': [Errno 2] Không có tệp hoặc thư mục như vậy

C: \ Tệp chương trình (x86) \ Jenkins \ jobs \ Kiểm tra tích hợp Github \ không gian làm việc> thoát 2 Bước xây dựng 'Thực thi lệnh hàng loạt Windows' được đánh dấu xây dựng là thất bại Kết thúc: FAILURE

Rõ ràng là tôi đã mong đợi chỉ nhìn thấy kết quả của bản in của mình trong bảng điều khiển.

Tôi đã làm gì? Và tại sao kịch bản của tôi không có ở đó?


Hãy xem mã từ C: \ Windows \ TEMP \ hudson1966342425043540895.bat bạn có đang sử dụng git pull không?

Jenkins tự động tạo ra sau đó xóa nó. Tuy nhiên, bạn có thể thấy toàn bộ nội dung trong đầu ra của bàn điều khiển - đó là lệnh "python roottest.py" mà tôi đã tham chiếu ở trên
Affable Geek

roottest.py không nằm trong đường dẫn của bạn. Bạn có thấy tập tin trong thư mục không gian làm việc hay nó cũng tự động bị xóa? Khi bạn chạy git pull, bạn cần phải ở trong bản sao cục bộ của kho lưu trữ nhân bản mà tôi tin, sau đó nó sẽ kéo bất kỳ thay đổi mới nào vào repo cục bộ. Thật khó để giúp bạn khi tôi không thể thấy bất kỳ lệnh thực tế nào đang được chạy.

Bạn đã làm theo các hướng dẫn này cho plugin github wiki.jenkins-ci.org/display/JENKINS/Git+Plugin#GitPlugin- ? Bạn đã đặt biến môi trường GIT_HOME, v.v.?

Ôi! Thêm một lý do để ghét các cửa sổ. Cảm ơn bạn - Tôi nghĩ đó có thể là vấn đề
Geek Affable

Câu trả lời:


5

Đối với bản dựng của tôi (trên máy chủ Linux), tôi làm một cái gì đó như thế này (như một bước xây dựng trong Jenkins) để thực thi tập lệnh xây dựng ngoài không gian làm việc được kiểm tra mới:

Thực thi lệnh shell:

 sh -x $WORKSPACE/build/myproject.build

Tôi cho rằng nó sẽ hoạt động tương tự trên Windows, ngoại trừ tất nhiên bạn sẽ sử dụng \ chứ không phải / và bạn đang sử dụng python chứ không phải sh để thực thi tập lệnh của mình.


2

Bạn có thể viết hai dòng trong bản dựng của mình:

chmod 777 ./my_script.sh
./my_script.sh

1
Quyền viết thế giới có thể không phải là ý tưởng tốt nhất! Tại sao không phải là 755 (chủ sở hữu viết, mọi người khác đọc / thực thi.
kmarsh

777 thực sự không phải là ý tưởng tốt nhất, nhưng câu trả lời này thực sự đã giúp tôi.
Robin Dijkhof

0

Bạn có thể lưu trữ một số tập lệnh trong Git, ví dụ: test.sh:

#!/bin/bash
_test_func(){ 
 echo 'test'
}

Sau đó, trong đầu vào "Thực thi shell", đặt nhập tập lệnh đó và gọi "_test_func":

source test.sh
_test_func

Kết quả:

 + source test.sh
 + _test_func
 test
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.