Automate Jekyll build với Travis

Travis

Nếu như bạn nào chưa biết đến Continuous Integration thì bạn nên tìm hiểu.

Việc này hỗ trợ rất nhiều cho công việc của mình. Đại loại là mình sẽ cài đặt, sử dụng một dịch vụ CI, mà từ đó có thể thực hiện tuần tự: build, test, nếu ok thì release, etc. chỉ với một lệnh push.

Siêu tiện lợi và nhanh chóng.

Một trong những dịch vụ hàng đầu hiện nay là Travis. Nên tìm hiểu.

With Jekyll

Jekyll công cụ mình thực hiện để tạo blog này, rất tiện cho viết blog. Nhưng vẫn phải build, maintain, etc…

Trước đây mình thực hiện 2 bước ở trên máy local là:

  1. Duy trì 2 thư mục, mỗi thư mục một nhánh: dev (code gốc) & master (HTML được gen)
  2. Code trên dev, build ra thư mục master
  3. Push dev & master

Khá lằng nhằng và mất thời gian.

Travis & Jekyll

Như đã nói ở trên thì Travis giúp mình thực hiện:

  1. Build
  2. Test build nếu ok
  3. thì push master

… chỉ với 1 commit push ở dev.

Vậy bắt đầu nào:

Travis

Các bạn nên đọc tài liệu hướng dẫn của Travis trước. Để hiểu cơ bản.

Rồi thực hiện thôi :x

  1. Thêm file .travis.yml vào root của project

     language: ruby
     rvm:
     - 2.2
     branches:
       only:
         - dev
     script:
     - bundle exec jekyll build
     after_success:
     - git clone https://$GITHUB_REPO
     - cd $(basename ${GITHUB_REPO%.git})
     - git config user.name "Travis CI"
     - git config user.email ${EMAIL}
     - rsync -az --delete --exclude '.git*' ../_site/ .
     - touch .nojekyll
     - git add -A .
     - git commit -m "Generated Jekyll site by Travis CI - ${TRAVIS_BUILD_NUMBER}"
     - git push --force "https://${DEPLOY_KEY}@${GITHUB_REPO}" HEAD:${REPO_TARGET_BRANCH}
     env:
       global:
       - NOKOGIRI_USE_SYSTEM_LIBRARIES=true
       - GITHUB_REPO: github.com/YOUR_USERNAME/YOUR_REPO_NAME.git
       - REPO_TARGET_BRANCH: gh-pages
    

Cập nhật GITHUB_REPOREPO_TARGET_BRANCH theo proj và nhánh của bạn. Mình thì dùng master do dùng user/organization site nếu là project thì sẽ là gh-pages.

  1. Tạo access Token, tên là gì đó kiểu “TRAVIS TOKEN” cho dễ nhớ

  2. Cài Travis tool: gem instal travis

  3. Chạy lệnh:

     # your Github verified email address
     $ travis encrypt EMAIL=me@domain.com --add
    
     # your personal access token
     $ travis encrypt DEPLOY_KEY=token --add
    
     Các lệnh này sẽ thêm vào file .travis.yml các thông tin thêm
    

Commit và thêm xem thôi :x

Nếu đúng thì sẽ thấy thế này thông tin giống thế này :D

Build Status

P/S: Có một chú ý nhỏ:

Vì Jekyll khi build sẽ ignore một số file trong đó có .travis.yml, vì vậy khi Travis nhận thấy nhánh master của mình có thay đổi, nó sẽ chạy script kiểm tra. Và vì không có file .travis.yml nên sẽ báo lỗi. Mặc dù đã có phần này:

	branches:
	  only:
	    - dev

Nhưng có file này ở nhánh master đâu :)) nên nên lỗi là cái chắc.

Vì thế hãy thêm dòng này vào file _config.yml:

	include: ['.travis.yml']

xong :D


Tham khảo: Jekyll + Github pages + Travis CI, sitting in a tree