2013-11-22 21 views
21

Tôi đang sử dụng Ansible và tôi đang gặp khó khăn trong việc tạo mô-đun git hoạt động. Tôi đã đọc một số bài viết của những người có cùng một vấn đề, tôi nhìn vào tài liệu ansible, tôi cũng đã cố gắng gần như tất cả mọi thứ. Tôi tìm thấy một hướng dẫn rõ ràng mà tôi theo sau cho đến khi họ sử dụng git nhưng một lần nữa tôi gặp vấn đề khi tôi sử dụng kho lưu trữ của mình ...:/ Lệnh git chỉ bị treo ... không có lỗi, nó chỉ bị kẹt!ansible: git module đang treo

Dưới đây là file host của tôi:

[web] 
dev1 ansible_ssh_host=10.0.0.101 ansible_ssh_user=root 

Đây là một lang thang VM chạy trên VirtualBox trên máy tính của tôi.

Tôi lấy playbook từ hướng dẫn này và đã làm tất cả các bước đến bước 08: https://github.com/leucos/ansible-tuto/tree/master/step-08

Tôi chạy nó trên máy ảo của tôi, nó hoạt động tốt, sau đó tôi thêm một nhiệm vụ "Triển khai mã của tôi" để sử dụng kho lưu trữ của tôi ... nhưng nhiệm vụ này không hoạt động. Nó là một kho lưu trữ riêng trên bitbucket. Liệu nó có làm cho một sự khác biệt?

- hosts: web 
    tasks: 

    - name: Deploy our awesome application 
     action: git repo=https://github.com/leucos/ansible-tuto-demosite.git dest=/var/www/awesome-app 
     tags: deploy 

    - name: Deploy my code 
     action: git repo=https://[email protected]/YAmikep/djangotutorial.git dest=/var/www/my-app 
     tags: deploy 

Có thể có điều gì đó với người dùng hoặc người dùng đang chạy, hoặc phím ... nhưng tôi đã cố gắng qua lại hàng giờ và thậm chí còn bối rối hơn ... Tôi không biết phải làm gì để gỡ lỗi mà bây giờ và tìm hiểu những gì là sai và những gì tôi đang thiếu.

Cảm ơn.

+1

Tôi không khuyên bạn nên sử dụng HTTPS để truy cập vào repo git, trừ khi bạn ở sau tường lửa rất nghiêm ngặt (không có 22 thư đi, yep). Điều này có thể tạo ra các vấn đề khi đẩy các commit lớn, điều này có thể phụ thuộc rất nhiều vào các thiết lập proxy HTTP, và dĩ nhiên nó lưu trữ mật khẩu của bạn trong cleantext ngay bên cạnh repo của bạn. Các khóa riêng ssh, được chuyển tiếp tới các máy chủ từ xa để có đủ thời gian thích hợp hơn. – spacediver

+4

Như một lưu ý chung. Cú pháp 'https: // github.com/account/repo-name.git' ** sẽ không hoạt động ** với khóa triển khai trong tác vụ Ansible. Tuy nhiên, cú pháp '[email protected]: account/repo-name.git' ** sẽ hoạt động ** trong tác vụ Ansible với khóa triển khai hợp lệ. Cú pháp là tinh tế nhưng quan trọng cần lưu ý. – avelis

+1

@avelis nhận xét của bạn đã giúp tôi ngày hôm nay. đã thay đổi url từ 'https' thành' git' – sankargorthi

Trả lời

7

Nếu người dùng yêu cầu mật khẩu, mô-đun git có thể treo nếu không được cung cấp trong khi tệp thực thi git nhắc lệnh trong nền. Đối với thông số repo của bạn, hãy thử sử dụng https://YAmikep:{yourpassword}@bitbucket.org/YAmikep/djangotutorial.git. Hoặc, hãy thử sử dụng các phím git/ssh thay vì vậy không cần mật khẩu.

+1

Tôi đang sử dụng khóa ssh và tác nhân ssh nhưng tôi đang cố gắng làm theo hướng dẫn sau: http://www.stavros.io/posts/example-provisioning-and-deployment- ansible/anb nó không hoạt động với người dùng được tạo cụ thể ... Tôi có thể tạo git nhưng không phải với người dùng được tạo cho dự án. – Michael

+0

@YAmikep - Bạn đã thử địa chỉ repo của '[email protected]: YAmikep/djangotutorial.git' chưa? Ví dụ bạn đưa ra ở trên là sử dụng giao thức HTTPS, điều này sẽ khiến Bitbucket nhắc nhập mật khẩu để xác thực thay vì sử dụng khóa. Github hoạt động tốt vì nó là repo công cộng, nhưng Bitbucket yêu cầu thông tin đăng nhập cho YAmikep. – mragh

+0

Nó cho tôi xác thực không thành công, mặc dù tên người dùng và mật khẩu là chính xác, bất kỳ ý tưởng tại sao? –

3

Tôi đã gặp phải điều này và trong trường hợp của tôi, git gác máy xác nhận khóa ssh mới cho máy chủ lưu trữ (bitbucket.org). Điều này có thể được giải quyết bởi mô-đun sshknownhosts, được chạy trước khi git điền .ssh/known_hosts tại máy chủ, để sau đó git không cần phải treo trên nó.

Nhưng hãy cẩn thận về các vấn đề bảo mật có thể xảy ra, đọc tài liệu mô-đun.

+1

Điều này giải quyết vấn đề git treo cho tôi. Các 'sshknownhosts' không làm việc cho tôi, nhưng điều này đã làm: https://github.com/brycebaril/ansible-known_hosts – mahemoff

+0

nice! cảm thấy tự do để chấp nhận câu trả lời;) UPD. tốt, bạn không phải là TS%) – spacediver

+1

Tôi sẽ làm nếu tôi có thể! – mahemoff

3

fwiw Tôi cũng đã có điều này rõ ràng là do nhiều tác nhân ssh đang chạy (máy khách osx). cố định bởi

killall ssh-agent & & eval 'ssh-agent` & & ssh-add -K

11

Có một vài lý do khiến các module git có thể treo, nhưng nhất có thể là lệnh git clone đang chờ xác nhận nếu khóa máy chủ được thêm vào máy chủ đã biết của máy chủ của bạn. Để xác minh nếu đây là vấn đề thực thi ansible với cờ: --verbose, để nó chạy trong chế độ tiết, điều này sẽ cung cấp cho bạn thêm thông tin về lỗi.

Nếu bạn xác nhận rằng đội chủ nhà được biết đến là vấn đề, sau đó bạn có hai lựa chọn:

Giải pháp 1:

Để tránh vấn đề này với các mô-đun git sử dụng tham số accept_hostkey.

- name: ensure jquery repo is available 
    git: [email protected]:jquery/jquery.git version=master accept_hostkey=True 

Giải pháp 2:

Sử dụng các module ansible-sshknownhosts của bên thứ ba trước khi sử dụng các mô-đun lõi git:

- name: ensure github is a known host 
    action: sshknownhosts host=github.com state=present 

- name: ensure jquery repo is available 
    git: [email protected]:jquery/jquery.git version=master accept_hostkey=True 

Kể từ khi knownhosts không phải là một lõi mô-đun ansible, bạn sẽ cần phải cài đặt nó trước, vui lòng tham khảo github repo docs để biết thêm thông tin về cách cài đặt nó.


giải pháp khác sẽ được vô hiệu hóa ssh tổ chức kiểm tra quan trọng, nhưng điều này có ý nghĩa quan an ninh, vì vậy trừ khi bạn thực sự biết những gì bạn đang làm việc đó là tốt nhất để tránh điều này.

+0

Có thể/nên 'action: sshknownhosts' được viết là' sshknowhosts: host = ... '? – chicks

+0

Cờ 'accept_hostkey' sẽ không hoạt động đối với tôi. Tôi đã thêm '-o StrictHostKeyChecking = no' vào' ssh_opts' và nó hoạt động. – chishaku

10

Tôi đã thử về cơ bản mọi thứ (chấp nhận khóa, thay đổi cấu hình ssh, tệp known_hosts, chuyển tiếp ssh-agent và quên những thứ khác) thành công.

Sau khi kéo tất cả tóc ra, tôi cuối cùng đã giải quyết vấn đề là thực tế rằng khóa riêng SSH có thể yêu cầu cụm mật khẩu!

Tôi đã không nhận thấy rằng trước đó bởi vì đại lý ssh địa phương đã chăm sóc nó bằng cách sử dụng khóa mật khẩu được lưu trữ để mọi thứ hoạt động cục bộ. Sử dụng Ansible trên một máy ảo âm đạo, cơ chế này không có sẵn và các mô-đun git đã bị mắc kẹt chờ đợi cho cụm từ mật khẩu được nhập vào. Sau khi nhận ra nguyên nhân có thể xảy ra, tôi đã tạo một cặp khóa đặc biệt không có cụm mật khẩu (các khía cạnh bảo mật được biết, phải không?) Và thêm khóa công khai vào bitbucket (/ github/anyever). Khi sử dụng khóa đặc biệt này - mọi thứ diễn ra suôn sẻ.

+0

Đây là một phao cứu sinh! – physicalattraction

+0

Chính xác^(điều này đã tiết kiệm cho tôi rất nhiều thời gian) – Benz

+0

Làm cách nào để bạn tạo khóa psswordless? tôi đã cố gắng sử dụng một mật khẩu trống, nhưng nó vẫn bị treo (có lẽ chỉ cần chờ ai đó nhấn Enter) –

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