2015-08-20 27 views
5

Hệ điều hành - Ubuntu 14.04Thực thi lệnh git qua php qua http

Tôi đang triển khai việc triển khai bằng cách sử dụng trang web GIT cho nó.

Tôi đã thêm khóa triển khai vào git repo và bây giờ tôi muốn kích hoạt lệnh git pull origin master khi đẩy xảy ra từ repo cục bộ của tôi.

Đây là test.php tập tin tôi gọi thông qua trình duyệt:

<?php  
    //echo "THis is a test file on a test repo for testing the deploy functionality using github webhooks!!!!"; 
    echo exec('whoami'); 
    echo exec('sh -x /var/www/proj/test/git.sh'); 
?> 

Đây là tập tin git.sh shell:

#!/bin/bash 
cd /var/www/proj-dir/test 
git pull origin master 

Khi tôi chạy trên thiết bị đầu cuối sử dụng php test.php tôi nhận được kết quả chính xác như mong đợi :

ubuntu From github.com:repo/test 
* branch   master  -> FETCH_HEAD 
Already up-to-date. 

ubuntu cho whoami theo sau là đầu ra git pull.

Bây giờ đây là vấn đề khi tôi gọi cùng http://example.com/test.php qua trình duyệt nó cho thấy người sử dụng hoặc whoami đầu ra như www-data, đó là sử dụng apache, nhưng tôi cố gắng cập nhật các điều khoản của file php để thực hiện và thay đổi người sử dụng để www-data nhưng không hoạt động.
kiểm tra các bản ghi apache và khi tôi thực hiện thông qua trình duyệt tôi nhận được một lỗi cho phép

Please make sure you have the correct access rights and the repository exists. + cd /var/www/proj/deploy-test + git pull origin master 

xác minh chính chủ thất bại. gây tử vong: Không thể đọc từ kho lưu trữ từ xa. Hãy đảm bảo rằng bạn có quyền truy cập chính xác và kho lưu trữ tồn tại.

Tôi cần bản cập nhật nào để tệp hoạt động qua yêu cầu của trình duyệt?

Nếu tôi cần cập nhật tệp sudoers thì nội dung cập nhật là gì?

Cập nhật
tôi đã thêm các phím .ssh đến var/www/ dir như là nơi cư trú cho người dùng apache. Nhưng tôi vẫn nhận được

git pull origin master 
error: cannot open .git/FETCH_HEAD: Permission denied 

Ngoài ra tôi đã thêm một dòng cho người dùng www-data để có thể thực thi tệp sh.

www-data ALL=(anthony) NOPASSWD: /var/www/mysite/vendor/tmd/auto-git-pull/scripts/git-pull.sh 

Reference here Vẫn không có may mắn
Cập nhật các điều khoản cho thư mục .git để sử dụng www-data

sudo chown www-data:www-data /var/www/proj/test/.git

+0

Bạn cần đảm bảo rằng người dùng chính xác yêu cầu kéo. Người dùng nào đã lấy quyền từ repo? Dường như bạn cần phải là ubuntu. – nicoX

+0

yes 'ubuntu', nhưng tôi tin rằng khi truy cập qua' http' người dùng apache là 'www-data' cần được phép thực thi tập lệnh. Sau khi xem qua nhiều bài viết tôi đã học tôi có thể cập nhật tệp sudoers cho www-data để có quyền chính xác. Xin vui lòng xác nhận nếu hướng của tôi là sai – KillABug

+0

Bạn không thể chmod kịch bản để nhóm/khác có quyền thực hiện. Và có vẻ như kịch bản của bạn đang được thực hiện. – nicoX

Trả lời

0

này dường như không phải là một vấn đề PHP nhưng một vấn đề git config. Git được định cấu hình chính xác cho người dùng ubuntu chứ không phải cho người dùng www-data.

Bạn có thể thử để làm cho PHP chạy một cái gì đó như ubuntu, nhưng điều đó không có vẻ dễ nhất cũng không chính xác. Tôi sẽ đề nghị cấu hình git chính xác cho người dùng www-data.

tôi nghi ngờ bạn có thể tạo lại vấn đề bằng cách chạy trên thiết bị đầu cuối:

# become www-data user 
sudo su www-data 
# actions from your git.sh file 
cd /var/www/proj-dir/test 
git pull origin master 

Sau khi kiểm tra bạn thực sự có một kịch bản tái tạo, bạn có thể cố gắng để sửa chữa các vấn đề cho người dùng www-data.

Cơ hội có sự khác biệt giữa đầu ra của git config --list khi chạy với tư cách người dùng. Để được trợ giúp thêm về điểm số đó, hãy xem https://git-scm.com/book/en/Getting-Started-First-Time-Git-Setup

Có thể có sự khác biệt về quyền sở hữu tệp/quyền sở hữu tệp đang gây ra sự cố. Để loại trừ, tôi khuyên bạn nên sử dụng git clone ... làm người dùng www-data để tạo bản sao mới và bản sao làm việc trong một số đường dẫn khác trong hệ thống tệp của bạn. Sau đó, xem lại nếu git pull hiện hoạt động như mong đợi.

Bạn có thể cân nhắc việc tặng www-data bản sao làm việc của riêng mình (bất kể vấn đề về quyền). Điều này cũng sẽ ngăn chặn phải đối phó với những thay đổi không được cam kết có thể có trong bản sao làm việc dẫn đến các vấn đề hợp nhất. Việc xử lý tự động/không cần giám sát này từ PHP/git.sh có thể rất cồng kềnh.

Luồng công việc được đề xuất sẽ là: phát triển thành ubuntu trong thư mục làm việc hiện tại của bạn và add/commit/push thay đổi của bạn. Sau đó, hãy tự động làm như vậy pull (như www-data).

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