Tích hợp CI vào Project

60 Lượt xem
Tích hợp CI vào Project
Nếu bạn thấy hay hãy like share cho bạn bè cùng biết nhé !
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

[wr-widget-reviews source=””]

Init Project

Ở đây mình sử dụng một project rails. Không cần quá nhiều đâu ạ. Tạo một project và 1 vài model để test thôi.

Việc tốt – Lương cao cùng CAREERBUILDER

Introduction CI

Chắc không còn xa lạ gì với mọi người nữa.
CI ở đây mình sử dụng là CI có sẵn free trên github Circle CI
Các bạn có thể vào mục marketplace trên navibar của github để add circle ci vào github của mình
Hoặc khi tạo pull request nếu repo của bạn chưa tích hợp những công cụ tương tự thì sẽ được github suggest.
Sau khi đã add circle ci vào project, chúng ta truy cập trang chủ của circle ci để setup trên GUI cho dễ ?
link : https://circleci.com/add-projects/
Chọn project mà bạn vừa tạo để thêm vào và tiến hành settings theo hướng dẫn của circle, khá đơn giản.

  1. Chúng ta tiến hành thêm thư mục .circleci vào root của project và bên trong tạo file config.yml
    Circle có cung cấp các mẫu sample cho tùy từng ngôn ngữ mà dự án đó sử dụng.
    Ở đây mình lấy ra sample config của project ruby on rails:

các bạn có thể chỉnh sửa config tùy theo nhu cầu của bản thân/dự án. Hiện tại mình cứ giữ nguyên như thế này đã.

  1. Các bạn commit lại và push lên repo sẽ thấy có job chạy build ngày trong mục jobs.

Tích hợp CI vào Project

Init Rubocop

Mình xóa phần chạy rspec đi vì trong project này mình chưa cần đến, mục đích là để chạy setup thử rubocop cho ci.

thêm đoạn config sau vào file config.yml

Trong đó:

  • name: đặt tên cho step này.
  • context: các biến mà bạn muốn truyền vào khi chạy lệnh, trong 3 biến này thì:
    • GITHUB_ACCESS_TOKEN là env mình setup trong settings của project trên circle CI nhằm mục đích bắn comment các lỗi rubocop về pull.
    • CIRCLE_BUILD_URL và CI_PULL_REQUEST là các biến có sẵn của circle ci, các bạn có thể tham khảo thêm về các biến có sẵn của circle trong này: env-vars, 2 biến này cung cấp link của job và link pull request.
  • command: lệnh chạy trong build, nếu multiline thì các bạn sử dụng cú pháp command: | rồi enter xuống dòng indent vào 1 tab và viết lệnh bình thường.

Cấu trúc file run_with_rubocop.sh. Thực ra các bạn có thể sử dụng lệnh chạy thẳng rubocop trong job nhưng nếu như vậy log các lỗi sẽ có các bất cập như:

  • Log lỗi sẽ in ra trong log của jobs.
  • Sẽ show tất cả các lỗi của rubocop trong project.

Giải pháp ở đây là sử dụng 1 file sh hoặc bất kì script dạng nào tùy khả năng của các bạn, từ đo viết đoạn xử lý kéo diff của pull hiện tại với master, cho chạy rubocop, rồi lấy ra các lỗi ứng với những dòng diff đó, không quan tâm những dòng khác

Giới thiệu đến các bạn một số gem phục vụ nhu cầu của bài toán là rubocop-select và checkstyle_filter-git

  • rubocop-select: sẽ giúp bạn check ra các lỗi rubocop chỉ ở file change.
  • checkstyle_filter-git: sẽ giúp trình bày lại format lỗi thành xml và chỉ lấy theo diff nhằm mục đích xử lý ở step tiếp theo.

Output của lệnh này là trả về 1 nội dung xml, kế tiếp ta phải xử lý nó để đưa nó về dạng json để bắn lên github theo api của git là {body: content}

Mình sử dụng ruby để xử lý, còn các bạn có thể xử lý tùy ý theo ngôn ngữ các bạn nắm rõ. chạy lệnh

Với ruby ta dùng nokogiri để parse đoạn xml và xử lý nội dung bên trong, lấy các lỗi ra và nối thành 1 chuỗi content để bắn lên github.

Sau khi chạy xong lệnh get ra content để bắn lên github thì ta viết đoạn curl để gửi nội dung lên thành comment trong pull chạy CI.

  • ${CI_PULL_REQUEST##*/} là đoạn xử lý string operation trong shell script mình search được trên google để lấy ra phần tử cuối cùng trong 1 array kết quả của việc split 1 string với / vì CI_PULL_REQUEST trong circle ci trả về là trọn vẹn link pull chứ không phải số pull. phần này chắc tùy ci phải có xử lý riêng.

Và kết quả ta có sau khi chạy build xong, sẽ có 1 comment bắn lên pull request nếu pull vẫn còn lỗi rubocop mà chưa được fix:

Tích hợp CI vào Project

Bí quyết SEO Youtube hiệu quả đạt top #10 chỉ trong 7 ngày

3 bước đơn giản để cải thiện seo

9 cách seo web cải thiện thứ hạng tìm kiếm trên google cho website của bạn

5 xu hướng SEO sẽ quan trọng nhất trong năm 2019

Hướng dẫn về SEO của chia sẻ kiến thức

Tăng tốc SEO website của bạn với AI

Hệ Thống PBN Là Gì trong SEO?. Đừng chết vì thiếu hiểu biết!.

Tại sao cần phải nghiên cứu từ khóa đầu tiên khi SEO

SEO Youtube A-Z: đưa video của bạn lên top #1 tìm kiếm Youtube

Làm thế nào để SEO từ khóa lên top Google?

Yoast SEO và All in One SEO Pack – Đâu là SEO Plugin tốt nhất?

Cách sử dụng plugin Yoast SEO bổ trợ SEO Onpage

7 kỹ thuật xây dựng liên kết nội bộ (internal link) tăng thứ hạng SEO

Thủ thuật viết & tối ưu thẻ tiêu đề, thẻ mô tả chuẩn SEO

SEO là gì? Làm SEO có khó & có thể kiếm tiền với nghề này không?

Google Ads là gì? Vì sao nên chọn hình thức quảng cáo này đầu tiên?

Bài viết liên quan

Leave a Reply

avatar
  Subscribe  
Notify of