web-dev-qa-db-ja.com

travisciを介したコミットの失敗

grunt-gh-pages 拡張機能を使用してgh-branchにコミットしようとしています。ローカルでは正常に動作しますが、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-pagesブランチのファイルをコミットさせたいだけです。それを行う方法はありますか?

更新最後の.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"}
27
tusharmath

あなたは確かにできます!あなたが発見したように、最初の問題はプッシュ先にgit:// URLを使用することによるものですが、gitプロトコルはリポジトリのクローンを作成するためにのみ使用できます。

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

OAuthトークンを生成するには、 GitHubアプリケーション設定ページ に移動し、[Personal API AccessToken]の下の[Createnewtoken]をクリックします。おそらく追加する必要があります。これが何であるかに注意してください。そうすれば、追跡しやすくなり、将来必要になった場合に取り消すことが容易になります。このトークンは、パスワードと同じものにアクセスできるという点で、本質的にパスワードであることに注意してください。

次に、トークンを.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が実際にこのトークンを使用するには、.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に.git/credentialsファイルで資格情報を探すように指示します。これは実際には任意のファイルにすることができますが、GitHubにプッシュするファイルではないことを確認してください。次に、トークンを.git/credentialsファイルに追加します。 Gitは、https://github.comへのプッシュの場合、トークンを使用して認証できることを認識しています。

準備が整いました!

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

38
sarahhodne

henrikhodne による答えは素晴らしいですが、.grunt/grunt-gh-pages/サブディレクトリのどこかに別のGitリポジトリが作成されるため、ソリューションは grunt-gh-pages では機能しません。 。したがって、git configまたはafter_scriptセクションで作成されたafter_successは、grunt-gh-pagesでは使用されません。

次のように、GH_TOKENのgrunt-gh-pagesが使用するリポジトリURLに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
6
dim2man