通过travis ci承诺失败

时间:2013-08-02 22:36:57

标签: github travis-ci github-pages

我正在尝试使用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.

当我更新repo选项时,我收到以下错误 -

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 "tusharmath@gmail.com"
  - 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"}

2 个答案:

答案 0 :(得分:38)

你当然可以!第一个问题,就像您发现的那样,是由于使用了git:// URL来推送,但git协议只能用于克隆存储库。

至于“匿名访问被拒绝”错误,那是因为您需要让Travis登录到您的GitHub帐户才能推送到存储库。现在,你可能不想给Travis你的GitHub密码,你当然不需要。相反,我们将使用OAuth令牌。如果您不知道这意味着什么,请不要担心,我会解释。在大多数情况下,OAuth令牌的工作方式类似于密码,但撤消对单个内容的访问权限会更容易。

要生成OAuth令牌,请转到GitHub Applications settings page,然后点击“个人API访问令牌”下的“创建新令牌”。你可能想要添加一个注释,这样就可以更容易地跟踪并在将来需要时更容易撤销。请注意,此令牌本质上是一个密码,因为它可以访问密码所用的相同内容。

然后,您需要将令牌添加到.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_script更改为after_success

答案 1 :(得分:6)

henrikhodne的答案很棒,但解决方案并不适用于grunt-gh-pages,因为它会在.grunt/grunt-gh-pages/子目录中的某处创建另一个Git存储库。因此,git configafter_script部分中的after_success不会被grunt-gh页面使用。

可以将GH_TOKEN添加到Gruntfile.js中grunt-gh-pages使用的存储库网址,如下所示:

'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_scriptafter_success部分可以修改为:

after_success: grunt gh-pages:travis