我正在尝试使用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"}
答案 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 config
或after_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_script
或after_success
部分可以修改为:
after_success: grunt gh-pages:travis