/ Align = "left" / Spacewatch

Próbuję użyć grunt-gh-pages rozszerzenia do commit do mojej gałęzi gh. Działa dobrze lokalnie, ale kiedy używam TRAVIS-CI to nie działa. Wyświetla następujący komunikat o błędzie -

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 po aktualizacji opcji repo dostaję 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 chcę, żeby Travis-ci zatwierdził pliki w gałęzi gh-pages mojego repo. Jest na to sposób?

Update The final .travis.yml that solved the 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"}
Author: basarat, 2013-08-03

2 answers

Z pewnością możesz! Pierwszy problem, jak odkryłeś, jest spowodowany użyciem adresu URL git://, ale protokół git może być używany tylko do klonowania repozytoriów.

Jeśli chodzi o błąd" anonymous access denied", to dlatego, że musisz pozwolić Travisowi zalogować się na swoje konto GitHub, aby przejść do repozytorium. Prawdopodobnie nie chcesz podawać Travisowi swojego hasła do Githuba i na pewno nie musisz. Zamiast tego użyjemy tokenów OAuth. Jeśli nie masz pojęcia co to to znaczy, nie martw się, wyjaśnię. Token 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 strony ustawień aplikacji GitHub i kliknij "Utwórz nowy token" w obszarze "osobisty Token dostępu API". Prawdopodobnie chcesz dodać notatkę o tym, co to jest, w ten sposób łatwiej jest śledzić i łatwiej odwołać, jeśli zajdzie taka potrzeba w przyszłości. Należy pamiętać, że ten token jest zasadniczo hasłem, ponieważ daje dostęp do tych samych rzeczy, co hasło.

Następnie musisz dodać token do swojego .travis.plik yml. Najpierw zaszyfrujemy token, żeby tylko Travis mógł go zobaczyć. Do tego potrzebny jest travis Rubygem zainstalowany: gem install travis.

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

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

…
env:
  global:
    - secure: "lots-of-seemingly-random-characters"
…
Aby Travis mógł użyć tego żetonu, musisz dodać kilka rzeczy do swojego .travis.yml 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 gitowi, aby szukał dane uwierzytelniające w pliku .git/credentials. To może być każdy plik, który chcesz, naprawdę, ale upewnij się, że nie jest to plik, który zamierzasz wysłać na GitHub. Następnie dodajemy token do pliku .git/credentials. Git wie teraz, że dla wypychania do https://github.com, może użyć Twojego tokena do uwierzytelnienia.

Powinieneś być gotowy!

PS: Jeśli chcesz wcisnąć GitHub tylko wtedy, gdy budowa przejdzie, możesz zmienić after_script na after_success.

 36
Author: henrikhodne,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-03 04:33:55

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

Możliwe jest dodanie GH_TOKEN do repozytorium URL używanego przez grunt-gh-pages w Gruntfile.js w następujący sposób:

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

Zwróć uwagę na opcję silent: true, która uniemożliwia publikowanie wartości tokenu w logach Travis.

Then your after_script lub after_success sekcję można modyfikować następująco:

after_success: grunt gh-pages:travis
 6
Author: dim2man,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:18:18