Tôi có một bản dựng Jenkins chạy một triển khai Capistrano như một hành động hậu xây dựng.Triển khai qua Capistrano qua Jenkins - Xác thực SSH không thành công
Chạy tác vụ Capistrano khi người dùng Jenkins từ bảng điều khiển hoạt động hoàn toàn tốt và không có lời nhắc mật khẩu (trước đây tôi đã thiết lập các khóa SSH trên cả máy chủ dựng và dàn dựng). Tuy nhiên, khi chạy cùng một kịch bản thông qua Jenkins, tôi đột nhiên nhận được một lời nhắc mật khẩu và xây dựng sau đó không thành công (không có TTY hiện tại).
[workspace] $ /bin/sh -xe /tmp/hudson7321493219694918714.sh
Performing Post build task...
Match found for : : True
Logical operation result is TRUE
Running script : cap _2.13.4_ deploy
[workspace] $ /bin/sh -xe /tmp/hudson1545664641721322948.sh
+ cap _2.13.4_ deploy
* executing `deploy'
* executing `deploy:update'
** transaction: start
* executing `deploy:update_code'
triggering before callbacks for `deploy:update_code'
[32m--> Updating code base with checkout strategy[0m
executing locally: "git ls-remote [email protected]:my_project.git master"
command finished in 1200ms
* executing "git clone -q [email protected]:my_project.git /var/www/staging/my_project/releases/20121029223619 && cd /var/www/staging/my_project/releases/20121029223619 && git checkout -q -b deploy 1fb11d669a6cb5a714d077162305dfcfaba82f01 && (echo 1fb11d669a6cb5a714d077162305dfcfaba82f01 > /var/www/staging/my_project/releases/20121029223619/REVISION)"
servers: ["my.staging-server.com"]
Password: stty: standard input: Inappropriate ioctl for device
stty: standard input: Inappropriate ioctl for device
stty: standard input: Inappropriate ioctl for device
*** [deploy:update_code] rolling back
* executing "rm -rf /var/www/staging/my_project/releases/20121029223619; true"
servers: ["my.staging-server.com"]
** [deploy:update_code] exception while rolling back: Capistrano::ConnectionError, connection failed for: my.staging-server.com (Net::SSH::AuthenticationFailed: not-specified)
connection failed for: my.staging-server.com (Net::SSH::AuthenticationFailed: not-specified)
POST BUILD TASK : FAILURE
Có vẻ như Ruby không nhận chìa khóa SSH của tôi lên khi chạy qua Jenkins lẽ (Net::SSH::AuthenticationFailed: not-specified
)?
Có ai có ý tưởng gì có thể xảy ra ở đây không?
Chạy tập lệnh shell giống chính xác mà Jenkins tạo trong /tmp/hudson*.sh trong vùng làm việc của dự án khi người dùng jenkins hoạt động hoàn toàn tốt. Điều gì cũng kỳ lạ là SSH'ing đến máy chủ hoạt động tốt, nhưng sau đó nhân bản từ git (git máy chủ trên cùng một máy từ xa như xây dựng mục tiêu) không thành công (chỉ khi chạy trong Jenkins xây dựng mặc dù). Tôi bối rối. – Burgi
Tôi nghĩ rằng Jenkins chạy dưới dạng "root", vì vậy hãy đặt "env | sort" vào tập lệnh trước lệnh "cap" để in ra thông tin môi trường, vì vậy bạn có thể xem người dùng là ai. Tôi đang làm việc trên cùng một vấn đề ngay bây giờ. Tôi sẽ cho bạn biết nếu tôi nghĩ ra điều gì đó. – Harmon
Người dùng nào là kịch bản Capistrano của bạn kết nối như? Nó có thể đang chạy "git clone" với tư cách người dùng khác nếu bạn không chỉ định người mà bạn kết nối. Nó sẽ mặc định cho người dùng chạy kịch bản lệnh Cap từ máy chủ triển khai. Ví dụ, đây là thiết lập của chúng tôi: 'server '# {deploy_user} @ # {hostname}",: ứng dụng,: db,: primary => true' và 'set: deploy_user, ENV [' USER ']'. – Harmon