2013-08-02 20 views
24

grunt-gh-pages拡張を使用してghブランチにコミットしようとしています。ローカルでうまく動作しますが、TRAVIS-CIを使用すると失敗します。私は次のエラーを取得するレポオプション更新時に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. 

そして - -

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. 

をだから、基本的に、私はちょうどトラヴィス-CIはGH-内のファイルをコミットしたいことは、次のエラーメッセージを表示します私のレポのページ支店。それを行う方法はありますか?あなたは確かにすることができ、問題

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

を解決

更新最終.travis.yml!最初の問題は、あなたが発見したように、git:// URLを使用しているためですが、gitプロトコルはリポジトリのクローン作成にのみ使用できます。

「匿名アクセスが拒否されました」というエラーは、リポジトリにプッシュするためにTravisにGitHubアカウントにログインさせる必要があるためです。さて、TravisにあなたのGitHubのパスワードを与えたくないかもしれないし、あなたは確かにそうする必要はありません。代わりに、OAuthトークンを使用します。それがどういう意味かわからなければ、心配しないで、私は説明します。ほとんどの場合、OAuthトークンはパスワードのように機能しますが、単一のものへのアクセスを取り消す方が簡単です。

OAuthトークンを生成するには、GitHub Applications settings pageに移動し、[Personal API Access Token]の下の[Create new token]をクリックします。おそらく、これが何であるかのメモを追加したいと思うでしょう。そうすれば、将来的に必要な場合に、取り消しが容易になり、失効しやすくなります。このトークンは、基本的にはパスワードと同じものにアクセスできるという点でパスワードです。

次に、.travis.ymlファイルにトークンを追加する必要があります。まず、トークンを暗号化して、Travisだけがそれを見ることができるようにします。このためには、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にいくつかのより多くのものを追加する必要があります。 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ファイルに資格情報を探すためのgitに指示します。これはあなたが望むどんなファイルでもかまいませんが、GitHubにプッシュしようとしているファイルではないことを確認してください。次に、トークンを.git/credentialsファイルに追加します。 Gitは、今度はhttps://github.comにプッシュするために、あなたのトークンを使って認証することができることを知っています。

すべて設定する必要があります。

PS:ビルドに合格する場合にのみGitHubにプッシュしたい場合はafter_scriptafter_successに変更できます。

+0

は、その後、あなたのafter_scriptafter_successセクションは次のように変更することができます。 – Tushar

+0

完全なビルドログを確認できます。https://travis-ci.org/tusharmath/tusharmath.github.io/builds/9803395 – Tushar

+0

エラーメッセージは、何が欠落しているかについてはっきりしています。あなたの '.travis.yml'でさらに' git config'コールに '--global'を追加しようとしましたか? – henrikhodne

6

henrikhodneの回答は素晴らしいですが、.grunt/grunt-gh-pages/サブディレクトリのどこかに別のGitリポジトリが作成されるため、解決策はgrunt-gh-pagesで動作しません。したがって、git configafter_scriptまたはafter_successで作成されたセクションはgrunt-gh-pagesで使用されません。

それはこのようにGruntfile.jsで作男-GH-ページで使用リポジトリURLにGH_TOKENを追加することが可能です:

'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オプション、それはトラヴィスのログにあなたのトークン値を公開防ぎます。私はかなりcredential.helperの使用を理解din'tので、私はその推測

after_success: grunt gh-pages:travis 
+1

'gulp-gh-pages'プラグインと同じです - https://github.com/kriasoft/static-site-starter/blob/d1465463e324b6628cb6165d88ae38fb9c2a0dd9/gulpfile.js#L190 –

関連する問題