GitLab CI/CD và kiểm định chất lượng code với SonarCloud (P.1)
Hello! I'm Zu.Doan
Khi phát triển sản phẩm, quá trình development và integrate cần được thực hiện một cách liên tục, các bản release được phát hành liên tục sau mỗi một sprint, do vậy quá trình này cần được tự động hóa nhằm giảm thiểu lỗi và thời gian phát triển cho dự án.
Trong dự án của mình, mình sử dụng GitLab làm repository và cũng sử dụng nó làm docker image repository (registry container).
Trong phần 1 này, mình sẽ đi setup CI/CD cho 1 project của mình. Có 2 bước cần thực hiện:
Trước tiên chúng ta cần có Gitlab runners, do mình chưa tìm hiểu sâu về việc create/run các Gitlab runners nên mình sẽ sử dụng các Gitlab runners free do Gitlab hỗ trợ và cũng là để đơn giản hóa nội dung bài viết này. (do vậy tạm thời có thể bỏ qua bước này - do xài hàng free nên Gitlab đã build sẵn, chúng ta chỉ cần dùng không cần setup gì hết)
Việc còn lại khá đơn giản để thao tác, đó là tạo 1 file .gitlab-ci.yml (nằm ở root của repository của bạn) để thiết lập những nội dung cho CI/CD jobs.
Nội dung file .gitlab-ci.yml sẽ phụ thuộc vào quá trình CI/CD mà bạn đặt ra, đối với mình thì sẽ theo các phần sau:
- build: build docker images từ source code nằm trên repository của mình
- test: thực hiện run test của project
- review: sử dụng SonarCloud để kiểm tra chất lượng code (xem tiếp P2)
- release: push docker image mới tương ứng với code mới lên registry container. (xem tiếp P3)
- deploy: deploy code mới lên một k8s cluster - AWS EKS. (xem tiếp P3)
image: docker/compose:alpine-1.27.4
services:
- docker:dind
stages:
- build
- test
build:
stage: build
before_script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
script:
- docker pull $CI_REGISTRY_IMAGE:latest || true
- docker build --cache-from $CI_REGISTRY_IMAGE:latest --tag $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
- docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
test:
stage: test
before_script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker pull $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
- docker tag $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA $CI_REGISTRY_IMAGE:latest
script:
- docker run -d --name api-shops $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
- sleep 15
- docker exec api-shops sh -c "npm run test"
coverage: /All files[^|]*\|[^|]*\s+([\d\.]+)/I
Về phân tích chi tiết .gitlab-ci.yml các bạn có thể tham khảo chi tiết tại đây
Trong phần tiếp theo, mình sẽ viết về cách tích hợp SonarCloud vào quá trình CI/CD để kiểm định chất lượng code.
Hi vọng bài viết này hữu ích với các bạn.
Thank everyone! Bye2 :D
