2013-08-14 21 views
6

Hostuję prywatny klejnot na Gemfury i chciałbym zastąpić zadanie rake release, aby przesłać do mojego prywatnego adresu URL Gemfury zamiast Rubygems.Zastąp zadanie zwolnienia rake, aby użyć Gemfury

Chciałbym jednak zachować tworzenie tagów Git.

Wszelkie pomysły, od których powinienem zacząć?

Oto co mój Rakefile wygląda następująco:

require 'bundler/gem_tasks' 
require 'rspec/core/rake_task' 

RSpec::Core::RakeTask.new(:spec) 

task default: :spec 
task test: :spec 

Odpowiedz

5

Właściwie znalazłem odpowiedź:

Rakefile

require 'bundler/gem_tasks' 
require 'rubygems/builder' 
require 'gemfury' 
require 'gemfury/command' 

# Override rubygem_push to push to gemfury instead when doing `rake release` 
module Bundler 
    class GemHelper 
    def rubygem_push(path) 
     ::Gemfury::Command::App.start(['push', path]) 
    end 
    end 
end 

Teraz, gdy robi:

rake release 

Tworzy znaczniki git i przesyła do mojego prywatnego repozytorium Gemfury.

będziemy chcieli utworzyć plik w ~/.gem/gemfury z tajnego klucza:

--- 
:gemfury_api_key: 1H... 
+0

Czy jest jakiś sposób, aby określić gemfury_api_key w wierszu polecenia? Chciałbym, żeby Jenkins zrobił kompilację i pchnięcie mojego klejnotu i nie miałby ochoty ukrywać tajemnicy w kodzie źródłowym. –

+0

To jest [jak to jest zaimplementowane] (https://github.com/bundler/bundler/blob/master/lib/bundler/gem_helper.rb#L82). Nie sądzę, że to, co chcesz osiągnąć, jest możliwe. –

+1

Dzięki - dopiero później uświadomiłem sobie, że katalog '.gem' nie trafia do zapakowanego perełka, co było moim głównym zmartwieniem. –