Skip to content

Gitlab-ci cho Rasa

Mình sẽ nói chủ yếu về Gitlab-CI/CD.Trước tiên bạn cần phải biết cách sử dụng tạo Docker Image cho Rasa, bạn có thể đọc tại Deploy-with-docker

Gitlab Runner

GitLab Runner là một ứng dụng hoạt động với GitLab CI/CD để chạy các jobs trong một pipeline. Bạn có thể đọc tại document của Gitlab.

Trong ví dụ bên dưới mình sẽ dùng Runner executor là Docker để chạy Docker-in-Docker(dind)

Configuration

Quá trình cài đặt file .gitlab-ci.yml rất đơn giản. Nhưng ta có thể thêm những cài đặt cho quá trình thực hiện như ý muốn

workflow:
  rules:
    - if: $CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "master"

default:
  tags:
    - rasa

variables:
  PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"

cache:
  paths:
    - .cache/pip
  • workflow dùng để định nghĩa khi nào ta sẽ chạy CI/CD, trong ví dụ trên ta chỉ bảo Runner chạy khi nó là pushgit branch là master

  • tags để định nghĩa Runner nào sẽ chạy file này

  • Và 2 dòng cuối cùng giúp tăng tốc độ chạy pipeline vào những lần sau bằng cách lưu thông tin đã chạy vào cache

Stages

Về cơ bản mình sẽ có 2 bước để deploy Rasa lên server.

stages: # List of stages for jobs, and their order of execution
  - build-docker
  - deploy

bước build-docker ta sẽ tạo image cho docker và bước deploy dùng để sẽ chạy container lên server.

Build docker

Bước đầu để build docker rất đơn giản, phần lớn khó khăn đã nằm trong chính file docker đó.

build_rasa-server:
  stage: build-docker
  image: docker:20.10.17
  before_script:
    - cd ./'RASA test bot'
    - docker info
  script:
    - docker build -f rasa-server.Dockerfile -t rasa-ailab .

build_action-server:
  stage: build-docker
  image: docker:20.10.17
  before_script:
    - cd ./'RASA test bot'
    - docker info
  script:
    - docker build -f action-server.Dockerfile -t rasa_action-server .
  • Ta cần lưu ý nơi ta để file .Dockerfile so với nơi để file gitlab-ci.yml.

  • Sử dụng image: docker:20.10.17 ta mới có thể sử dụng lệnh docker build

❗Lưu ý: Ta nên đặt tag cho image thông qua flag -t để dễ dạng định dạng cho bước xóa image cũ khi ta tạo image mới

Deployment

Ngoài deploy rasa serveraction server ta cũng phải deploy thêm duckling nếu cần thiết

deploy_rasa-server:
  stage: deploy
  needs: ["build_rasa-server"]
  image: docker:20.10.17
  before_script:
    - docker ps -aq -f "name= rasa-server"| xargs docker stop | xargs docker rm || true
  script:
    - docker run -d --name rasa-server -p 8050:5005 rasa-ailab run --enable-api --port 5005 --cors "*"

deploy_action-server:
  stage: deploy
  needs: ["build_action-server"]
  image: docker:20.10.17
  before_script:
    - docker ps -aq -f "name = rasa_action-server"| xargs docker stop | xargs docker rm || true
  script:
    - docker run -d --name rasa_action-server -p 8055:5055 rasa_action-server

deploy_rasa_duckling:
  stage: deploy
  image: docker:20.10.17
  before_script:
    - docker ps -aq -f "name = duckling"| xargs docker stop | xargs docker rm || true
  script:
    - docker run -d --name duckling -p 8020:8000 rasa/duckling

Ở đây ta cần lưu ý các flag trong before_scriptscript

  • Điều đang xảy ra trong before_script là ta sẽ lấy những container nào có name= rasa-server, trùng với tên khi đặt trong docker run, ngưng container đó lại và xóa nó đi, lệnh || true để lệnh đó luôn chạy dù có lỗi.

  • Sau đó ta sẽ chạy container mới có cùng tên với những flag cần thiết.


❓ Muốn biết thêm chi tiết hay có câu hỏi nào?

Hãy lên website của RASA hoặc RASA Community Forum