2012-04-18 30 views
17

Tôi mới sử dụng Jenkins CI. Tôi đang cài đặt RVM trong Jenkins từ xa của mình và khi tôi thực thi trình bao dưới đây.Thiết lập RVM và Jenkins

#!/bin/bash -x 
source ~/.bashrc 
rvm use [email protected] 

Tôi gặp lỗi sau.

+ source /var/lib/jenkins/.bashrc 
++ PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/var/lib/jenkins/.rvm/bin:/var/lib/jenkins/.rvm/bin 
+ rvm use [email protected] 

RVM is not a function, selecting rubies with 'rvm use ...' will not work. 
You need to change your terminal settings to allow shell login. 
Please visit https://rvm.io/workflow/screen/ for example. 

Điều đó có nghĩa là gì? Tôi không có ý kiến ​​gì cả. Làm ơn giúp tôi.

CẬP NHẬT: Tôi đang cố gắng bên dưới kịch bản nhưng tôi vẫn nhận được lỗi:

#!/bin/bash -x 
source /home/zeck/.bashrc 
[[ -s ".rvmrc" ]] && source .rvmrc 
export RAILS_ENV=test 
bundle install 

Lỗi:

/tmp/hudson457106939700368111.sh: line 5: bundle: command not found 
Build step 'Execute shell' marked build as failure 
Finished: FAILURE 

Jenkins xây dựng vỏ không thể phát hiện RVM, gemsets và đá quý. Tôi nên làm gì?

CẬP NHẬT 2: Do đó jenkins không thể phát hiện ruby.

+ ruby -v 
/tmp/hudson2505951775163045158.sh: line 5: ruby: command not found 
Build step 'Execute shell' marked build as failure 
Finished: FAILUR 

Tôi không sử dụng bất kỳ plugin jenkins nào và tôi chỉ chạy tập lệnh từ Build-> Execute shell section.

+0

Zeck, tôi cũng đang giải quyết vấn đề này, bạn đã khắc phục sự cố như thế nào ??? – Farooq

Trả lời

11

thử:

. $(/home/RVM_USER/.rvm/bin/rvm env [email protected] --path) 

chắc chắn rằng bạn chạy ổn định RVM:

rvm get stable 

LƯU Ý: phiên bản cuối Jenkins không phải lúc nào chấp nhận "nguồn", nhưng "". RVM_USER là người dùng đã cài đặt RVM. Hoặc bạn cũng có thể xuất lệnh RVM trong PATH chính.

+0

Rất cảm ơn bạn đã cố gắng giúp đỡ. Nhưng tôi nhận được 'rvm: lệnh không tìm thấy'. Vui lòng xem các cập nhật của tôi – Zeck

+0

vì bạn sử dụng những người dùng khác nhau để cài đặt rvm, đảm bảo rằng người dùng thứ hai 'zeck' sử dụng cùng RVM - trong'/home/zeck/.bashrc' add: 'export PATH = $ PATH:/var/lib/jenkins/.rvm/bin' – mpapis

27

Khi thông báo lỗi cho thấy, RVM mong đợi một trình bao đăng nhập. Thay đổi dòng hashbang thành #!/bin/bash -xl sẽ giải quyết vấn đề này.

+5

Bằng cách này, tìm nguồn cung ứng .rvmrc có thể in rất nhiều thiết bị đầu cuối. Thay vào đó, bạn có thể sử dụng '#!/Bin/bash -l', sau đó thực hiện' set -x' sau khi tìm nguồn cung ứng .rvmrc. – disrupt

+0

Bất kỳ giải thích về những gì là -l và -x sử dụng cho? –

+0

Tùy chọn -l cung cấp cho bạn vỏ đăng nhập và -x bắt đầu bash trong chế độ gỡ lỗi. Tôi đã có thể sử dụng chỉ -l để sản lượng Jenkins không phải là tiết. – bruz

9

Có, dường như bạn bỏ lỡ số $HOME/.rvm/bin trong số PATH của mình. Tôi đang sử dụng rvm thành công từ Hudson trên Mac OS X. Điều đầu tiên cần lưu ý là, trừ khi bạn xác định BASH_ENV biến môi trường (ENV cho sh), .bashrc được gọi tự động chỉ với tương tác không đăng nhập shell. một vỏ đó được bắt đầu khi bạn làm - ví dụ - sau từ dòng lệnh:

$ /bin/bash 

Khi bạn sử dụng #!/bin/bash trong kịch bản của bạn, .bashrc sẽ không được gọi.

Để làm cho công việc RVM với Hudson, tôi đã điều sau đây trong .bash_profile tôi:

PATH=$PATH:$HOME/.rvm/bin # Add RVM to PATH for scripting 
export PATH 

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" 

Nhờ [[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" Tôi có RVM kích hoạt mỗi khi tôi bắt đầu cửa sổ terminal mới (tương tác, vỏ đăng nhập).

Tôi không đặt bất kỳ thứ gì trong số .bashrc, đặc biệt là tôi không tìm nguồn cung ứng tập lệnh rvm ở đó. Không có gì sai với điều đó, nhưng nếu bất kỳ kịch bản khác làm cho một cái gì đó ngu ngốc như thiết lập `xuất khẩu BASH_ENV = $ HOME /.bashrc 'và sau đó gọi vỏ không tương tác, bạn thấy điều gì có thể xảy ra - nó thực sự dễ quên.

Vì vậy, thay vì tải mọi thứ vào .bashrc của bạn, tốt hơn là giữ cho tập lệnh của bạn độc lập với bất kỳ tệp khởi động trình bao nào và đảm bảo rằng môi trường chính xác được thiết lập trong tập lệnh. Tôi vẫn giữ $HOME/.rvm/bin trong .bash_profile của tôi, nhưng sau đó tôi bao gồm ở phần đầu của kịch bản của tôi:

#!/bin/bash 

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" 

rvm use [email protected] 

set -ex 
cucumber # just an example 

Thông báo tùy chọn -e mà buộc kịch bản để thoát với mã lỗi nếu có lệnh sau set -ex thất bại. Đây là hành vi bạn có thể muốn khi sử dụng kịch bản với Hudson. Không đúng khi nói rằng RVM mong đợi một vỏ đăng nhập. Mặc dù sử dụng #!/bin/bash -l trong tập lệnh của bạn sẽ hoạt động nhưng dường như không phải là cách tiếp cận tốt nhất.

+0

Có, điều này đã giúp. Vị trí của RVM có thể khác nhau, trong trường hợp của tôi là '[[-s"/usr/local/rvm/scripts/rvm "]] && source"/usr/local/rvm/scripts/rvm "' hoạt động, cùng với 'rvm sử dụng ruby_name @ gemset_name' – 0x4a6f4672

1

thêm một công việc để các lệnh xây dựng trong Jenkins cố định này đối với tôi

#!/usr/bin/env bash 

    rvm use 2.0.0 
    bundle install 
    rake test 
    ... 
+0

Bạn thưa ngài, làm cho ngày của tôi :) – ncuesta

3

Chỉ cần thêm mã này trong shell script của bạn, tôi nghĩ rằng RVM đang tải từ nguồn của bạn để nó nên làm việc khác cần phải xuất khẩu PATH biến số

#!/bin/bash -l 
source ~/.bashrc 
rvm use [email protected] 

l là giá đăng nhập, nếu bạn bao gồm x thì nó cũng sẽ được gỡ lỗi.

0

Nút Jenkins không tải đường dẫn theo cùng một cách, do đó, nó không sử dụng đường dẫn thích hợp để tìm phiên bản ruby ​​của rvm. Bạn có thể thiết lập đường dẫn cho một tác nhân cụ thể.

  1. Tìm PATH hiện tại của bạn bằng cách làm echo $PATH
  2. Giả sử bạn đã thiết lập RVM đúng cách, tìm nơi phiên bản RVM của ruby ​​tọa lạc bằng cách chạy which ruby
  3. Có một thiết lập trong cấu hình của đại lý nơi bạn có thể đặt biến môi trường. Đặt PATH thành 1 và 2 nối.
Các vấn đề liên quan