2013-08-02 2 views
24

Я пытаюсь использовать расширение grunt-gh-pages, чтобы зафиксировать свою ветвь gh. Он работает нормально локально, но когда я использую TRAVIS-CI, он терпит неудачу. Это дает следующее сообщение об ошибке -Передача через travis ci сбой

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. 

И когда я обновляю вариант репо, я получаю следующее сообщение об ошибке -

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. 

Так что в основном я просто хочу Travis-CI совершить файлы в gh- страницы моего репо. Есть ли способ сделать это?

Update Окончательное .travis.yml, что решить проблему

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"} 

ответ

36

Вы, конечно, можете! Первая проблема, как вы выяснили, связана с использованием URL-адреса git://, но git-протокол может использоваться только для клонирования репозиториев.

Что касается ошибки «анонимного доступа», это связано с тем, что вы должны разрешить Travis регистрироваться в своей учетной записи GitHub, чтобы нажать на репозиторий. Теперь вы, вероятно, не хотите предоставлять Travis свой пароль GitHub, и вам, безусловно, этого не нужно. Вместо этого мы будем использовать токены OAuth. Если вы не знаете, что это значит, не волнуйтесь, я объясню. Ток OAuth в большинстве случаев работает как пароль, но легче отменить доступ к отдельным вещам.

Чтобы создать токен OAuth, перейдите к GitHub Applications settings page и нажмите «Создать новый токен» в разделе «Личный токен доступа к API». Вероятно, вы хотите добавить примечание к тому, что это такое, таким образом легче отслеживать и легче отменить, если вам нужно в будущем. Обратите внимание, что этот токен по сути является паролем, поскольку он дает доступ к тем же самым действиям, которые делает пароль.

Затем вам нужно добавить токен в файл .travis.yml. Во-первых, мы зашифруем токен, чтобы увидеть его только Трэвис. Для этого вам необходимо установить travis Rubygem: gem install travis.

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

Ваш .travis.yml должен выглядеть примерно так:

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

Теперь, для того, чтобы Travis на самом деле использовать этот маркер, вам нужно добавить еще некоторые вещи, чтобы ваши .travis. yml тоже.

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 

Это первый говорит мерзавца искать учетные данные в файле .git/credentials. Это может быть любой файл, который вы хотите, действительно, но убедитесь, что это не тот, который вы собираетесь нажать на GitHub. Затем добавим токен в файл .git/credentials. Git теперь знает, что для нажатий на https://github.com он может использовать ваш токен для аутентификации.

Вы должны быть установлены!

PS: Если вы хотите только нажать на GitHub, если сборка проходит, вы можете изменить after_script на after_success.

+0

Я думаю, его, потому что я din't совсем понимаю, использование credential.helper. – Tushar

+0

Вы можете проверить журналы полной сборки здесь https://travis-ci.org/tusharmath/tusharmath.github.io/builds/9803395 – Tushar

+0

Сообщение об ошибке довольно ясно о том, чего не хватает. Вы пробовали добавить '-global' в' 'git config''ы еще раз в' .travis.yml'? – henrikhodne

6

Ответ на вопрос henrikhodne замечательный, но решение не работает с grunt-gh-pages, потому что оно создает другой репозиторий Git где-то в подкаталоге .grunt/grunt-gh-pages/.Поэтому , сделанный в разделе after_script или after_success, не используется страницами grunt-gh.

Можно добавить GH_TOKEN в URL хранилища используется рубака-Gh-страницы в Gruntfile.js так:

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

Обратите внимание на silent: true вариант, это препятствует публикации ваших маркеров значения в журналах Travis.

Тогда ваш after_script или after_success раздел может быть изменен как:

after_success: grunt gh-pages:travis 
+1

То же самое с плагином 'gulp-gh-pages' - https://github.com/kriasoft/static-site-starter/blob/d1465463e324b6628cb6165d88ae38fb9c2a0dd9/gulpfile.js#L190 –