2013-08-02 52 views
24

Tôi đang cố gắng sử dụng tiện ích mở rộng grunt-gh-pages để cam kết với chi nhánh của tôi. Nó hoạt động tốt tại địa phương nhưng khi tôi sử dụng TRAVIS-CI nó không thành công. Nó cung cấp cho các thông báo lỗi sau -Cam kết qua travis ci thất bại

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. 

Và khi tôi cập nhật tùy chọn repo tôi nhận được lỗi sau -

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. 

Vì vậy, về cơ bản tôi chỉ muốn Travis-ci để thực hiện các tập tin trong gh- trang chi nhánh của repo của tôi. Có cách nào làm được việc này không?

Cập nhật Các thức .travis.yml rằng giải quyết vấn đề

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"} 

Trả lời

36

Bạn chắc chắn có thể! Vấn đề đầu tiên, giống như bạn phát hiện, là do sử dụng URL git:// để đẩy tới, nhưng giao thức git chỉ có thể được sử dụng để sao chép kho lưu trữ.

Đối với lỗi "truy cập ẩn danh bị từ chối", đó là do bạn cần để Travis đăng nhập vào tài khoản GitHub của bạn để đẩy vào kho lưu trữ. Bây giờ, bạn có thể không muốn đưa cho Travis mật khẩu GitHub của bạn, và bạn chắc chắn không phải làm vậy. Thay vào đó, chúng tôi sẽ sử dụng mã thông báo OAuth. Nếu bạn không biết điều đó có nghĩa là gì, đừng lo lắng, tôi sẽ giải thích. Mã thông báo OAuth trong hầu hết các trường hợp hoạt động giống như mật khẩu nhưng dễ dàng thu hồi quyền truy cập vào những thứ đơn lẻ hơn.

Để tạo mã thông báo OAuth, hãy truy cập GitHub Applications settings page và nhấp vào "Tạo mã thông báo mới" trong "Mã thông báo truy cập API cá nhân". Bạn có thể muốn thêm ghi chú cho điều này, theo cách đó, việc theo dõi và thu hồi dễ dàng hơn nếu bạn cần trong tương lai trở nên dễ dàng hơn. Lưu ý rằng mã thông báo này về bản chất là một mật khẩu ở chỗ nó cung cấp quyền truy cập vào những thứ giống như mật khẩu.

Sau đó, bạn cần thêm mã thông báo vào tệp .travis.yml của mình. Đầu tiên, chúng tôi sẽ mã hóa mã thông báo để Travis chỉ có thể xem nó. Đối với điều này, bạn cần travis Rubygem cài đặt: gem install travis.

travis encrypt GH_TOKEN="the-token-from-github" --add 

.travis.yml bạn bây giờ sẽ giống như thế này:

… 
env: 
    global: 
    - secure: "lots-of-seemingly-random-characters" 
… 

Bây giờ, để cho Travis thực sự sử dụng thẻ này, bạn cần phải thêm một vài thứ để .travis của bạn. yml quá.

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 

Điều này trước tiên yêu cầu git tìm thông tin xác thực trong tệp .git/credentials. Đây có thể là bất kỳ tập tin nào bạn muốn, thực sự, nhưng chắc chắn rằng nó không phải là một trong những bạn sẽ đẩy đến GitHub. Sau đó, chúng tôi thêm mã thông báo vào tệp .git/credentials. Git bây giờ biết rằng để đẩy đến https://github.com, nó có thể sử dụng mã thông báo của bạn để xác thực.

Bạn sẽ hoàn tất!

PS: Nếu bạn chỉ muốn chuyển sang GitHub nếu phiên bản vượt qua, bạn có thể thay đổi after_script thành after_success.

+0

Tôi đoán nó vì tôi din't khá hiểu việc sử dụng credential.helper. – Tushar

+0

Bạn có thể kiểm tra nhật ký xây dựng đầy đủ tại đây https://travis-ci.org/tusharmath/tusharmath.github.io/builds/9803395 – Tushar

+0

Thông báo lỗi khá rõ ràng về những gì bị thiếu. Bạn đã thử thêm '--global' vào' git config' để gọi thêm trong '.travis.yml' chưa? – henrikhodne

6

Câu trả lời của henrikhodne rất tuyệt, nhưng giải pháp không hoạt động với grunt-gh-pages vì nó tạo một kho lưu trữ Git khác ở đâu đó trong thư mục con .grunt/grunt-gh-pages/.Do đó git config được thực hiện trong các phần after_script hoặc after_success không được các trang grunt-gh sử dụng.

Có thể thêm GH_TOKEN đến URL kho được sử dụng bởi grunt-gh-trang trong Gruntfile.js như thế này:

'gh-pages': { 
    // your common gh-pages config 
    travis: { 
     options: { 
      repo: 'https://' + process.env.GH_TOKEN + '@github.com/dim2man/csbrowser.git', 
      silent: true 
     }, 
     src: ['**'] 
    } 
} 

Lưu ý tùy chọn silent: true, nó ngăn chặn công bố giá trị thẻ của bạn trong nhật ký Travis.

Sau đó bạn phần after_script hoặc after_success thể được sửa đổi như sau:

after_success: grunt gh-pages:travis 
+1

Tương tự với plugin 'gulp-gh-pages' - https://github.com/kriasoft/static-site-starter/blob/d1465463e324b6628cb6165d88ae38fb9c2a0dd9/gulpfile.js#L190 –