2012-04-25 3 views
6

Tôi đang tìm một phần mềm mà tôi hy vọng ai đó đã xây dựng. Tôi sẽ mô tả phần mềm này ở đây hy vọng rằng ai đó đã nghe về một cái gì đó như thế này và có thể chỉ cho tôi đi đúng hướng.Proxy Git đẩy tới nhiều điều khiển từ xa

Tôi đang phát triển một ứng dụng web được triển khai trên Heroku. Vì những hạn chế của Heroku, tôi đang rơi vào tình huống không may khi có bốn (4) bản repo Git từ xa cho cùng một bản repos.

Tại sao lại là bốn?

Chúng tôi có nhiều "ứng dụng" trên Heroku. Một cho sản xuất và một vài dàn "ứng dụng". Đây là tất cả cho các ứng dụng thực tế tương tự, nhưng trên Heroku họ là "ứng dụng" riêng biệt, vì vậy chúng tôi có thể thử những điều trên dàn dựng trước khi đẩy chúng vào sản xuất.

Mỗi ứng dụng trên Heroku nhận riêng repo Git riêng của nó và tự động triển khai chi nhánh master mỗi khi một cam kết mới được đẩy đến chi nhánh master đó. Chính sách này của Heroku là mấu chốt của vấn đề của chúng tôi. Bởi vì điều này có nghĩa là chúng tôi có 3 repos khác nhau trên Heroku, cộng với repo GitHub của chúng tôi.

Tại sao sự cố có 4 điều khiển từ xa Git khác nhau? Bởi vì nó có nghĩa là khi bạn phát triển và tạo ra các cam kết mới, bạn phải (1) đẩy tới chỉ một điều khiển từ xa hoặc (2) đẩy tới tất cả các điều khiển từ xa.

Làm (1) có nghĩa là suy nghĩ bạn muốn push từ xa nào. Tôi ghét phải nghĩ về điều này. Khi tôi phát triển, tôi không quan tâm đến điều khiển từ xa, tôi cam kết và thúc đẩy và trở lại làm việc. Nếu tôi muốn triển khai một nhánh vào máy chủ dàn dựng 1, ví dụ, tôi sẽ hợp nhất nhánh đó vào chi nhánh staging_1 và đẩy nó. Tôi không thích chọn cái điều khiển từ xa nào để đẩy tới.

Một bất lợi của (1) là các điều khiển từ xa của bạn không đồng bộ.

Điều tôi muốn là (2). Tôi muốn mọi hành động đẩy để thúc đẩy tất cả bốn bản demo của chúng tôi.

Nhưng có 2 vấn đề với điều đó:

Vấn đề 1: Các dàn "ứng dụng" trên Heroku triển khai những gì trên master. Tôi không muốn họ làm điều đó. Tôi muốn ánh xạ chi nhánh staging_1 trong repo của tôi đến chi nhánh master trên máy chủ dàn dựng Git repo.

Sự cố 2: Có máy tính của tôi đẩy tới tất cả 4 repo sẽ mất thời gian dài. Ngay cả 1 hành động đẩy Heroku mất một thời gian dài. Có thể mất 40 giây đôi khi.


giải pháp đề xuất

Đây là những gì tôi muốn. Tôi muốn có một máy chủ Git chuyên dụng hoạt động như một proxy. Bất cứ khi nào tôi đẩy từ máy tính cục bộ của tôi vào máy chủ Git này, nó sẽ đẩy các nhánh tương tự đó vào 4 mã số của chúng tôi song song. Theo cách đó, từ quan điểm của máy tính địa phương của tôi, việc đẩy sẽ có vẻ tức thời, trong khi máy chủ proxy này sẽ tự động xử lý các bản repo của Heroku trong nền.

Nếu việc đẩy bất kỳ điều khiển từ xa nào không thành công vì bất kỳ lý do nào, tôi muốn proxy này báo cáo lại theo cách nào đó để tôi biết điều gì đó bị hỏng và có thể khắc phục.

Một điều khác mà proxy này sẽ phải thực hiện là ánh xạ master.Mỗi lần tôi sẽ đẩy chi nhánh staging_1 vào nó, nó sẽ đẩy nó như là staging_1 cho tất cả điều khiển từ xa, nhưng với điều khiển từ xa thuộc máy chủ dàn dựng, nó cũng sẽ đẩy nhánh đó thành master, do đó Heroku sẽ biết triển khai nó.

(Nó khá buồn rằng Heroku được thiết kế theo một cách mà làm cho tôi cần một proxy như thế này, nhưng đó là những gì tôi phải đối phó với.)

Vì vậy, đó là nó. Đó là giải pháp tôi muốn. Có ai biết chương trình như vậy không?

+0

Bài toán 1 được giải quyết bằng: 'git push staging staging_1: master' - nghĩa là đẩy nhánh staging_1 địa phương của bạn vào master của remote từ xa. –

+0

Và bạn có thể tìm thấy https://github.com/fastestforward/heroku_san sẽ giúp với một kịch bản triển khai có thể làm điều đó cho bạn nhưng vẫn sẽ được triển khai chậm đến 4 repos. –

Trả lời

0

Điều này có vẻ hơi điên rồ đối với tôi. Tôi có nhiều ứng dụng trên Heroku chạy các môi trường khác nhau. Tôi có một repo Github và sau đó Heroku điều khiển từ xa cho các môi trường khác nhau. Tôi cũng có xu hướng duy trì một nhánh Git phù hợp với một trong những điều khiển từ xa của Heroku.

Triển khai này sau đó được thực hiện (như John nói) với:

git push heroku_remote local_branch:master 

Tôi đã ghi chép tiếp cận cơ bản này ở đây:

http://neilmiddleton.com/deploying-topic-branches-to-heroku/

Tuy nhiên, bạn có nhu cầu tự động hóa hoàn toàn từ những gì tôi có thể nói. Bạn có thể sử dụng một dịch vụ như TDDium để thực hiện việc này cho bạn, xem chi nhánh Git và sau đó chuyển đến một nhánh từ xa (chẳng hạn như điều khiển từ xa Heroku) khi bộ thử nghiệm của bạn vượt qua.

http://neilmiddleton.com/continuous-deployment-with-heroku/

Tôi khá chắc chắn rằng cách tiếp cận TDDium sẽ cung cấp cho bạn những gì bạn cần, với các lớp bổ sung của CI.

1

Tạo một kho lưu trữ mới, mà bạn có thể đẩy đến khi bạn muốn đẩy để truyền và viết một móc hậu nhận để truyền các thay đổi khi bạn đẩy vào repo này.