Hướng dẫn setup ReportPortal.io với docker-compose

Setup này chỉ sử dụng để vọc và sử dụng thử Report Portal với docker-compose, nếu bạn muốn sử dụng trên một server lâu dài và chạy mượt hơn thì có thể tham khảo tài liệu ở “đây” hoặc chờ bài viết sắp tới nhé!

Kiến trúc của Report Portal

Tổng quan về Report Portal

Một bộ Report Portal sẽ được chia làm 2 nhóm:

  • Client-side: Bao gồm những thành phần mà các automation testers / test automation developers sử dụng với test framework của mình để gửi kết quả test hay chi tiết test log lên RP server.
  • Server-side: Bao gồm các dịch vụ (services) xử lý dữ liệu nhỏ lẻ và một giao diện Web (Web UI) để chúng ta tương tác.

Chúng ta sẽ có mô hình sau khi client-side gọi tới server:

Đầu tiên, chúng ta có Service registry (ở đây là Consul) – đóng vai trò như một nguồn cơ sở dữ liệu chứa tên gọi, địa chỉ của tất cả các Services (dịch vụ) . Các thành phần dịch vụ sẽ tự động đăng ký (register) với Service registry khi được khởi động lên. Từ đây, ta sẽ có một danh sách các dịch vụ nhỏ lẻ, rời rạc được tổng hợp lại. Gateway (ở đây có thể là Fabio hoặc Traefik) sẽ dựa trên danh sách này và điều hướng tới các dịch vụ theo địa chỉ có sẵn.

Về cơ sở dữ liệu, chúng ta có thể hình dung đơn gỉan:

  • Executions database: Lưu lại toàn bộ kết quả, log và thông tin chi tiết của nhữg lần chạy kiểm (test executions). 
  • Auth database: Lưu những thông tin liên quan tới phân cấp quyền và định danh. 

Okay, chúng ta đã đi sơ qua hết những thành phần nằm trong kiến trúc của RP. Cùng bắt tay vào thực hành nào!!

Sử dụng docker-compose để setup nhanh Report Portal server

Vài thứ cần phải có và lưu ý trước khi bắt đầu:

  • Cài đặt Docker và … chạy được. Bài viết giới thiệu chi tiết hơn ở đây
  • Phần cài đặt bên dưới không nhằm mục đích sử dụng lâu dài!
  • Khuyến khích chạy trên Linux hay MacOS. Windows có thể gặp một số lỗi mà mình không đề cập chi tiết trong bài viết này. 

Ngắn gọn:

  • Download file docker-compose.yml tại đây (Click vào Download default file) hoặc tại đây.
  • Mở Terminal / Command prompt và chuyển vào ổ đĩa chứa file docker-compose.yml, chạy lệnh “docker-compose -p reportportal up -d –force-recreate”
  • Chờ tầm 5-10 phút (đi lấy một cốc cà phê hay gì đó)
  • Mở thành quả của mình tại “http://localhost:8080/ui/”

Ngắn gọn hơn xíu với Terminal / Command prompt:

git clone https://github.com/reportportal/reportportal.git

cd reportportal

docker-compose -p reportportal up -d –force-recreate

Ta-daaaaaaa! 

Bạn có thể đăng nhập với hai tài khoản mặc định:

  • User:  default / 1q2w3e
  • Admin: superadmin/erebus

Thế là xong!

Có thể bạn sẽ gặp phải một số vấn đề nào đó và cần cách giải quyết. Lúc này chúng ta cần hiểu thêm về docker-compose.

Vừa rồi, chúng ta đã sử dụng docker-compose để bootstrap lại các services cần để chạy được Report Portal server, nhưng thông tin về việc bootstrap này được lưu trong file docker-compose.yml với định dạng YAML. Cùng tìm hiểu tập tin này nhé!

Đầu tiên ta có version xác định format version của docker-compose,xem thông tin chi hơn tại đây

Tiếp theo là key services, đi kèm là một danh sách nhưng services như mongodb, registry, gateway, api, etc.

Đây chính là tất cả những services mà mình đã đề cập ở phần đầu bài. Với mỗi service, thông tin về Docker image và cách setup, bind volume cũng sẽ được define cụ thể hơn ở bên trong đó.

Gateway detail

Cùng nhìn vào gateway service, ta sẽ thấy có những keys sau:

  • image: Xác định tên image và tag. Đơn giản và dễ hiểu
  • ports: danh xác các ports sẽ được bind với máy chủ. Cũng là chỗ dễ bị conflict nhất! Đa phần sẽ là do port 8080 đã có một service nào đó hiện đang sử dụng, bạn có thể check lại hoặc chuyển “8080:8080” sang 1 port khác như “6969:8080” chẳng hạn, lúc này địa chỉ sẽ là localhost:6969/ui/
  • command: Dùng để override entrypoint khi start container, chúng ta không cần quan tâm nhiều tới phần này lắm.
  • restart: chỉ định nếu gateway có nên restart trong trường hợp container bị crash. 

Lỗi đầu tiên chúng ta sẽ dễ gặp nhất là khi bị conflict network port. Có thể do một process nào đó đang sử dụng port 8080 hoặc port này đang bị đóng. 

Lỗi kế tiếp mà cũng có thể gặp phải liên quan tới binding volume:

Với Mongodb, chúng ta luôn cần bind volume của container với ổ đĩa máy chủ nhằm mục đích lưu trữ lại trên máy phòng trừ trường hợp container bị chết.

Một trong những lý do để việc setup thất bại có thể là do folder trên máy chủ được bind tới không cho Docker engine permission để tạo file / đọc file. Đa phần bạn sẽ gặp phải lỗi này khi sử dụng Windows.

Một vấn đề khác có thể gặp phải sẽ liên quan tới depends

Ví dụ, với index service, chúng ta sẽ thấy service này phụ thuộc (depends_on) vào 2 services khác là registry và gateway. Sẽ xảy ra trường hợp 1 trong 2 service này để báo là đã chạy thành công nhưng vô tình bị crash do thiếu hụt resource máy, dẫn đến việc launch index service gặp vấn đề.

Nếu bạn đã thử chạy một vài lần dù đã sửa những vấn đề trên, có thể Docker vẫn chưa dọn dẹp đầy đủ. Bạn có thể sử dụng lệnh “docker-compose down” để clean up hết những thành phần trong docker-compose.yml và thực hiện lại từ đầu.

Mình sẽ dừng tạm ở đây và sắp tới sẽ có những bài viết chi tiết hơn về docker-compose cũng như setup Report Portal phù hợp cho môi trường production hơn.

Advertisements

One comment

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s