2013-08-02 17 views
24

Próbuję użyć rozszerzenia grunt-gh-pages, aby zatwierdzić mój oddział gh. Działa dobrze lokalnie, ale gdy korzystam z TRAVIS-CI, nie działa. Daje się następujący komunikat o błędzie -Zatwierdzanie przez Travis ci Failing

Warning: fatal: remote error: 
    You can't push to git://github.com/tusharmath/tusharm.com.git 
    Use https://github.com/tusharmath/tusharm.com.git 
Use --force to continue. 

I kiedy zaktualizować repo opcji pojawia się następujący błąd -

Warning: remote: Anonymous access to tusharmath/tusharm.com.git denied. 
fatal: Authentication failed for 'https://github.com/tusharmath/tusharm.com.git/' 
Use --force to continue. 
Aborted due to warnings. 

Więc w zasadzie po prostu chcę Travis-ci popełnienia pliki w gh- strony oddziału mojego repo. Czy jest jakiś sposób na zrobienie tego?

Aktualizacja Ostateczna .travis.yml że rozwiązał problem

language: node_js 
node_js: 
    - '0.11' 
before_script: 
    - git config --global user.email "[email protected]" 
    - git config --global user.name "Travis-CI" 
after_script: 
    - git config credential.helper "store --file=.git/credentials" 
    - echo "https://${GH_TOKEN}:@github.com" > .git/credentials 
    - node ./node_modules/grunt-cli/bin/grunt release 
env: 
    global: 
    secure: {"lots-of-seemingly-random-characters"} 

Odpowiedz

36

pewno można! Pierwszym problemem, jaki odkryłeś, jest użycie adresu URL git://, ale protokół git może być używany tylko do klonowania repozytoriów.

Jeśli chodzi o błąd "odmowy dostępu anonimowego", to dlatego, że musisz zezwolić Travisowi na zalogowanie się na konto GitHub w celu przekazania do repozytorium. Teraz prawdopodobnie nie chcesz podawać Travisowi swojego hasła do GitHub, a na pewno nie musisz tego robić. Zamiast tego użyjemy tokenów OAuth. Jeśli nie masz pojęcia, co to znaczy, nie martw się, wytłumaczę. Znacznik OAuth w większości przypadków działa jak hasło, ale łatwiej jest odwołać dostęp do pojedynczych rzeczy.

Aby wygenerować token OAuth, przejdź do GitHub Applications settings page i kliknij "Utwórz nowy token" w obszarze "Token osobistego dostępu API". Prawdopodobnie chcesz dodać notatkę do tego, co to jest, w ten sposób łatwiej jest śledzić i łatwiej odwołać, jeśli będziesz potrzebować w przyszłości. Należy zauważyć, że token jest zasadniczo hasłem, ponieważ zapewnia dostęp do tych samych rzeczy, które ma hasło.

Następnie należy dodać token do pliku .travis.yml. Najpierw zaszyfrujemy token, aby tylko Travis mógł go zobaczyć. W tym celu potrzebujesz zainstalowanegoRubygem: gem install travis.

travis encrypt GH_TOKEN="the-token-from-github" --add 

Twój .travis.yml powinna wyglądać mniej więcej tak:

… 
env: 
    global: 
    - secure: "lots-of-seemingly-random-characters" 
… 

Teraz, w celu Travis właściwie wykorzystać ten żeton, trzeba dodać jeszcze kilka rzeczy do .travis. też.

after_script: 
    - git config credential.helper "store --file=.git/credentials" 
    - echo "https://${GH_TOKEN}:@github.com" > .git/credentials 
    - node ./node_modules/grunt-cli/bin/grunt release 

Ten pierwszy mówi git szukać poświadczeń w pliku .git/credentials. Może to być dowolny plik, który chcesz, ale upewnij się, że nie jest to plik, który chcesz przesłać do GitHub. Następnie dodajemy token do pliku .git/credentials. Git wie teraz, że aby przesłać do https://github.com, może użyć tokena do uwierzytelnienia.

Powinieneś być gotowy!

PS: Jeśli chcesz przesłać tylko do GitHub, jeśli kompilacja przejdzie, możesz zmienić after_script na after_success.

+0

Chyba jego ponieważ ja din't dość zrozumieć wykorzystanie credential.helper. – Tushar

+0

Można sprawdzić pełne dzienniki kompilacji tutaj https://travis-ci.org/tusharmath/tusharmath.github.io/builds/9803395 – Tushar

+0

Komunikat o błędzie jest dość jasne, co brakuje. Czy próbowałeś dodać '--global' do' git config', wywołując więcej w twoim '.travis.yml'? – henrikhodne

6

Odpowiedź henrikhodne jest świetna, ale rozwiązanie nie działa z grunt-gh-pages, ponieważ tworzy kolejne repozytorium Git gdzieś w podkatalogu .grunt/grunt-gh-pages/.Dlatego sekcja git config wykonana w sekcji after_script lub after_success nie jest używana przez strony grub-gh.

To możliwe dodanie GH_TOKEN do repozytorium URL używany przez Grunt-GH-stron w Gruntfile.js tak:

'gh-pages': { 
    // your common gh-pages config 
    travis: { 
     options: { 
      repo: 'https://' + process.env.GH_TOKEN + '@github.com/dim2man/csbrowser.git', 
      silent: true 
     }, 
     src: ['**'] 
    } 
} 

Uwaga opcja silent: true zapobiega publikując swoją wartość symboliczną w dziennikach Travis.

Wtedy twój odcinek after_scriptafter_success lub mogą być modyfikowane jak:

after_success: grunt gh-pages:travis 
+1

To samo z wtyczką 'gulp-gh-pages' - https://github.com/kriasoft/static-site-starter/blob/d1465463e324b6628cb6165d88ae38fb9c2a0dd9/gulpfile.js#L190 –