2015-11-26 16 views
13

Tôi có một tập tin circle.yml như vậy:circleCI cho phép từ chối chạy bash script

dependencies: 
    override: 
    - meteor || curl https://install.meteor.com | /bin/sh 

deployment: 
    production: 
    branch: "master" 
    commands: 
     - ./deploy.sh 

Khi tôi đẩy để Github, tôi nhận được lỗi:

/home/ubuntu/myproject/deploy.sh returned exit code 126 

bash: line 1: /home/ubuntu/myproject/deploy.sh: Permission denied Action failed: /home/ubuntu/myproject/deploy.sh 

Khi tôi chạy các lệnh mà sống bên trong deploy.sh bên ngoài tệp (dưới commands) mọi thứ đều ổn.

Mọi thứ trong tệp circle.yml dường như phù hợp với các ví dụ trong số CircleCI docs .. Tôi đang làm gì sai?

Trả lời

18

Một số vấn đề có thể:

  1. deploy.sh có thể không được đánh dấu là thực thi (chmod +x deploy.sh sẽ sửa lỗi này)
  2. Dòng đầu tiên của deploy.sh có thể không phải một vỏ Runnable ...

Nếu lần đầu tiên không hoạt động, chúng tôi có thể xem nội dung của deploy.sh không?

16

Tôi gặp sự cố tương tự. Tôi đã thêm sh vào phần trước của lệnh của tôi để làm cho nó hoạt động.

deployment: 
    production: 
    branch: "master" 
    commands: 
     - sh ./deploy.sh 

Hy vọng rằng sửa chữa sẽ tiết kiệm cho mọi người trong tương lai.

+0

Tôi thấy rằng giải pháp này hoạt động để thực thi tập lệnh, tuy nhiên việc sử dụng '' 'sh''' sẽ vô hiệu hóa một số tiện ích mở rộng. xem https://unix.stackexchange.com/questions/155838/shell-script-throws-a-not-found-error-when-run-from-a-sh-file-but-if-entered-ma – eczajk

+1

@ eczajk Vì vậy, hãy sử dụng '- bash./deploy.sh' để thay thế. – MikeSchinkel

+1

@MikeSchinkel cảm ơn, đã làm việc cho tôi – eczajk

0

Như @palfrey cho biết tập lệnh có thể không được đánh dấu là có thể thực thi và đôi khi có vẻ như bị đánh dấu sai khi triển khai ngay cả khi trước đó bạn đã chạy chmod +x trên tập lệnh của mình tại máy cục bộ. (Tại sao? Tôi không biết. Nếu ai đó làm vui lòng khai sáng cho tôi!)

Đây là lệnh chung để đảm bảo tập lệnh của bạn luôn được đánh dấu là có thể thực thi. Điều này giả định rằng tất cả chúng đều nằm trong thư mục /home/ubuntu/${CIRCLE_PROJECT_REPONAME}/scripts và tất cả đều có tiện ích mở rộng .sh. Nếu (các) thư mục của bạn (khác), hãy chỉnh sửa để sử dụng thư mục của bạn thay thế.

Vì tất cả các kịch bản của tôi source một kịch bản chia sẻ (shared.sh) ở phía trên cùng của mỗi kịch bản được gọi bằng circle.yml tôi thêm đoạn mã sau vào shared.sh đảm bảo tất cả các kịch bản được đánh dấu là thực thi:

SCRIPTS="/home/ubuntu/${CIRCLE_PROJECT_REPONAME}/scripts" 
find "${SCRIPTS}" | grep "\.sh$" | xargs chmod +x 

Làm việc như một sự quyến rũ. :-)

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