通过travis ci承诺失败

tus*_*ath 27 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.
Run Code Online (Sandbox Code Playgroud)

当我更新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.
Run Code Online (Sandbox Code Playgroud)

所以基本上我只想让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"}
Run Code Online (Sandbox Code Playgroud)

sar*_*dne 38

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

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

要生成OAuth令牌,请转到GitHub应用程序设置页面,然后单击"个人API访问令牌"下的"创建新令牌".你可能想要添加一个注释,这样就可以更容易地跟踪并在将来需要时更容易撤销.请注意,此令牌本质上是一个密码,因为它可以访问密码所执行的相同操作.

然后,您需要将令牌添加到.travis.yml文件中.首先,我们将加密令牌,因此只有Travis可以看到它.为此,您需要travis安装Rubygem : gem install travis.

travis encrypt GH_TOKEN="the-token-from-github" --add
Run Code Online (Sandbox Code Playgroud)

你的.travis.yml现在应该是这样的:

…
env:
  global:
    - secure: "lots-of-seemingly-random-characters"
…
Run Code Online (Sandbox Code Playgroud)

现在,为了让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
Run Code Online (Sandbox Code Playgroud)

这首先告诉git在.git/credentials文件中查找凭据.这可以是你想要的任何文件,但确保它不是你要推送给GitHub的文件.然后,我们将令牌添加到.git/credentials文件中.Git现在知道,对于推送https://github.com,它可以使用您的令牌进行身份验证.

你应该全力以赴!

PS:如果你只想在构建过程中推送到GitHub,你可以after_script改为after_success.


小智 6

henrikhodne的答案很棒,但该解决方案不适用于grunt-gh-pages,因为它在.grunt/grunt-gh-pages/子目录中的某处创建了另一个Git存储库.因此grunt-gh-pages不使用git configin after_scriptafter_successsection.

可以像这样添加GH_TOKENgrunt-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: ['**']
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意该silent: true选项,它会阻止在Travis日志中发布您的令牌值.

然后您的after_scriptafter_success部分可以修改如下:

after_success: grunt gh-pages:travis
Run Code Online (Sandbox Code Playgroud)