2015-05-06 11 views
17

Tôi muốn sử dụng git để triển khai đến một trang web đến một máy chủ thử nghiệm. Trang web của tôi được một chủ đề wordpress xây dựng với ngụm và kho trông giống nhưGit Móc hậu nhận với một phần của cây công việc

theme.git/ 
-- gulpfile.js 
-- src/ 
-- build/ 

Tôi đã làm theo các bước giải thích herehere mà laø- thiết lập một kho trống trên máy chủ, cấu hình vị trí của cây làm việc git và viết một móc hậu nhận để kiểm tra repo đến địa điểm đó.

Vấn đề là tôi chỉ đang tìm cách di chuyển hoặc sao chép thư mục build/ vào vị trí của nó trên máy chủ. Ý nghĩ duy nhất của tôi là viết một móc hậu nhận để kéo repo đến một vị trí cây làm việc (bởi vì tôi nghĩ rằng tôi đọc mà repos trần thường không có một cây làm việc ở tất cả), và sau đó cp của thư mục xây dựng vào wp-content/themes/

Có vẻ như phức tạp không cần thiết nên tôi tự hỏi liệu có cách nào hiệu quả hơn/phổ biến hơn để thực hiện nó hay không. Cảm ơn!

Trả lời

4

Phê duyệt của bạn khi sử dụng git để triển khai có vẻ hơi lạ, chủ yếu là vì git là hệ thống quản lý mã nguồn chính chứ không phải công cụ triển khai. Đúng là bạn có thể làm nhiều thứ kỳ lạ với móc git, nhưng vì một lý do nào đó, tôi cảm thấy những người đó có khuynh hướng trở lại ám ảnh bạn.

Thông thường tôi khuyên bạn nên sử dụng một số công cụ continuous integration cho công việc. Một luồng công việc có thể, mà tôi có thể sử dụng bản thân mình, sẽ là

  1. Lưu trữ các tệp chủ đề của bạn trong kho công cộng tại GitHub. Nó miễn phí, có lẽ không có bí mật tuyệt vời trong mã nguồn chủ đề của bạn, và như là một tiền thưởng bổ sung, bạn thậm chí có thể mở nguồn bạn chủ đề.
  2. Thiết lập công việc CI với Travis CI cho kho lưu trữ của bạn. Bạn cơ bản có được một cá thể máy xây dựng miễn phí trong đám mây và bạn có thể thực hiện tất cả các loại công cụ trước hoặc sau khi xây dựng. Bạn có thể ví dụ. chạy gulp build (hoặc bất kỳ tên công việc nào của bạn) ở đó, vì vậy bạn sẽ không phải lưu trữ thư mục build trong repo git.
  3. Trong móc Travis after_success, bạn có thể sao chép thư mục xây dựng vào máy chủ đích, ví dụ bằng cách sử dụng scp. Here is an example of doing the very same thing with FTP. Travis hỗ trợ encryption of sensitive data, vì vậy bạn không phải lo lắng (ít nhất là quá nhiều) về việc lưu trữ tên người dùng và mật khẩu trong repo git.

Luồng đó hữu ích khi bạn muốn triển khai xây dựng mọi lúc bạn cam kết điều gì đó với git repo.BTW, khi bạn sử dụng nó lần đầu tiên nó thực sự cảm thấy như ma thuật: "Tôi chỉ cần thực hiện điều này git push, và bây giờ thay đổi đã được sống trên máy chủ của tôi."

Tuy nhiên, bạn đã đề cập rằng bạn muốn triển khai mã đến máy chủ thử nghiệm . Đúng là các công cụ CI (chẳng hạn như Travis) có thể được sử dụng để duy trì luồng giữa các bước triển khai khác nhau, trong đó có nhiều máy chủ thử nghiệm. Một ví dụ dòng chảy cho các dự án lớn có thể là

development -> tests passing? -> release -> tests passing? -> integration -> tests passing? -> staging -> tests passing? -> production

... nơi dòng chảy có thể được một phần hoặc hoàn toàn tự động với một công cụ CI.

Tuy nhiên, bạn đã làm như vậy trong trường hợp triển khai xây dựng của bạn là một điều một lần mà đôi khi bạn chỉ muốn thực hiện theo cách thủ công. (Tôi xin lỗi nếu tôi hiểu sai bạn.) Đối với các loại tác vụ một lần này, việc sử dụng các tập lệnh shell hoặc công cụ quản lý tác vụ phù hợp hơn.

Bạn đã đề cập rằng bạn đã sử dụng gulp. Đó là một công cụ rất tiện dụng cho công việc, đặc biệt là vì bạn có thể dễ dàng kết hợp các "luồng công việc" khác nhau. Bạn có thể có một nhiệm vụ để xây dựng chủ đề (gulp build) và một nhiệm vụ khác để triển khai máy chủ thử nghiệm (gulp deploy-test), chỉ mở rộng nhiệm vụ build với bước bổ sung để sao chép tệp vào máy chủ thử nghiệm. gulp-scp trông giống như một plugin tốt cho công việc (tôi đã không sử dụng nó bản thân mình mặc dù, nó chỉ là kết quả tìm kiếm đầu tiên từ google). Nếu điều đó không hiệu quả, bạn luôn có thể gọi scp theo cách thủ công với gulp-shell hoặc tương tự.

Bạn có thể thậm chí parametrize the deployment tasks vì vậy bạn có thể làm điều gì đó như: gulp deploy --testgulp deploy --production

Có bạn đi, đây là bài học đầu tiên của bạn trong devops. Có cả một thế giới của những thứ để tìm hiểu nếu loại nhiệm vụ tự động hóa trong các dự án phần mềm nghe có vẻ thú vị với bạn.

+0

Trong khi có một số thông tin tốt ở đây, nó không trả lời câu hỏi về việc sử dụng móc Git. – rnevius

+0

Tôi upvoted câu trả lời này như tôi nghĩ rằng nó là một * hữu ích * phản ứng với truy vấn của OP liên quan đến "một cách hiệu quả hơn/phổ biến hơn" trong khi câu trả lời của jthill là hữu ích cho git hooks khía cạnh. –

+0

cho một repo riêng để sử dụng miễn phí git https://bitbucket.org/ –

3

Đây là công việc đơn giản git read-tree hoạt động. Giữ một chỉ số hay còn gọi là biểu hiện cho những gì trong thư mục triển khai và xử lý các thông tin cập nhật của bạn với một pre-nhận như vậy:

#!/bin/sh 
while read old new ref; do [[ $ref = refs/heads/master ]] && { 
    export GIT_INDEX_FILE=deployment-manifest 
    export GIT_WORK_TREE=/path/to/deployment 
    git read-tree -um `git write-tree` $new:build || exit 1 
}; done 

Note rằng nếu một số tập tin được triển khai theo cách này đã được thay đổi trong cây triển khai , git read-tree ở đây và thao tác đẩy sẽ không thành công vì git sẽ không ghi đè nội dung bạn chưa nói.

0

Tôi sẽ chia dự án của bạn thành hai bản repos.

  1. Nguồn. Bao gồm nguồn và bất cứ điều gì. Không bao gồm thư mục/build /. Sử dụng điều này chỉ để kiểm soát nguồn. Điều này không bao giờ đi đến trang web (nó có thể không an toàn để lưu trữ mã của bạn trên trang web, ngay cả trong các hình thức của một repo git).

  2. Triển khai. Chỉ/xây dựng/thư mục. Bạn có thể khởi tạo một repo git mới bên trong thư mục. Điều này có một repo từ xa trên máy chủ; bạn có thể sử dụng móc hậu nhận để triển khai, như trước đây.

0

Tôi sử dụng git để triển khai mọi lúc. Không có gì lạ về nó cả, và tôi không biết những gì @cido đã chống lại nó. Có rất nhiều giá trị trong việc có thể quay ngược thời gian tới bất kỳ điểm nào trên chi nhánh 'triển khai' của bạn và có thể thấy chính xác những gì đã tồn tại trên máy chủ của bạn tại thời điểm đó.

Đừng nhầm lẫn giữa repo git mà bạn đang sử dụng để lưu trữ so với bộ nhớ mà bạn đang sử dụng để triển khai. Bạn nên có một cây git hoàn toàn sạch sẽ kiểm tra vào khu vực sản xuất của bạn (bất cứ điều gì) và như tôi đề nghị bạn có thể muốn có một chi nhánh riêng biệt gọi là 'triển khai' hoặc 'sản xuất' hoặc 'dàn dựng' hoặc bất cứ điều gì.

Móc hậu nhận sau đó chỉ cần chạy tập lệnh đi vào khu vực sản xuất của bạn và kéo nhánh triển khai của bạn để cập nhật.

Nếu bạn cần điều này là mạnh mẽ đối với các tệp được đặt ở bên ngoài những gì git sẽ làm (ví dụ: tệp tạm thời được tạo khi chạy) thì bạn có thể gọi git clean -dfx trước khi kéo. Và có những thứ khác mà bạn có thể muốn làm nếu bạn mong máy chủ này được xây dựng lại từ đầu một cách thường xuyên (ví dụ như trong triển khai trên đám mây) nhưng có vẻ như việc thực hiện thiết lập ban đầu theo cách thủ công sẽ ổn cho trường hợp sử dụng của bạn .

cp nhập thư mục xây dựng vào vị trí tốt, chỉ tôi sử dụng rsync vì thường sẽ nhanh hơn nếu thay đổi chỉ tăng dần.

+0

Xin lỗi Ewan nếu tôi có vẻ như tôi có điều gì đó chống lại việc sử dụng git để triển khai; đó không phải là ý định của tôi chút nào. Tôi làm việc trong một cơ quan phần mềm, vì vậy tôi đã thấy khá nhiều dự án chảy qua tay chúng tôi. Nó chỉ là tôi đã thực sự không bao giờ nhìn thấy một dự án mà git được sử dụng để triển khai. Chắc chắn có các thẻ cho các bản phát hành (ví dụ: khi sử dụng luồng git), v.v. nhưng triển khai thực tế luôn được xử lý bằng các công cụ khác. Tôi tin bạn nếu bạn nói rằng bạn sử dụng nó mọi lúc. Nó chỉ là từ _my_ POV, và từ kinh nghiệm _my_, ý tưởng sử dụng git để triển khai chỉ cảm thấy kỳ lạ. – cido

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