Trước đây, dự án mình sử dụng Jenkins cho phần CI, để tận dụng những ưu điểm của Jenkins như có nhiều plugin, khả năng viết pipeline bằng groovy linh hoạt… Tuy nhiên, team tốn kha nhiều effort để deploy và quản lý infra của Jenkins. Ví dụ jenkins phải được deploy K8S autoscaling, dedicated server. Nhiều issue thường xảy ra nhưng jenkins master bị lỗi, không launch được agent, vấn đề connection với AWS… Tóm lại là khá tốn chi phí.
Cuối cùng team quyết định thử nghiệm với CircleCI, một cloud-based CI/CD. Do đó không cần tốn chi phí maintain server. Việc cài cắm config trên CircleCI cũng khá đơn giản. Sẽ nói chi tiết ở phần sau
CircleCI như thế nào thì trên GG giới thiệu nhiều, bài nào chú trọng vào phần thực hành. Hiểu nhanh thì đây là cloud-based CI tools, developer có thể tạo các job bằng yaml file, đơn giản hơn code groovy Jenkins. Các job có thể chạy tuần tự hoặc song song tùy thuộc vào config, và được chạy trong các container riêng biệt hoặc VM
CircleCI có thể tích hợp với các CD tools khác như HarnessIO, Spinnaker… work với các artifactory khác như Jfrog, ECR…
Bài này hướng dẫn bạn viết 1 job circle CI đơn giản có thể build 1 source code go thành docker image rồi push lên artifactory Jfrog
Step 1) Setup CircleCI
Nếu có tài khoản Github thì chỉ cần login circleCI dùng github là được
Tạo 1 repos trên github account, CircleCI sẽ tự động detect project của bạn
Cài đặt cirlceci local
sudo snap install docker circleci
Step 2) Viết circleCI pipeline
Pipeline của circleci lưu ở .circleci/config.yml. Khi được push lên repos, circleCI sẽ tự động run file này để thực hiện các task
Run circleci validate ở local để check file
circleci config validate
# Config file at .circleci/config.yml is valid
# Config file at .circleci/config.yml is valid
Circle cũng có một thư viện gọi là orb để lưu một số hàm config thông dụng để developer có thể xài
Một số khái niệm cơ bản
Workflow là tập hợp nhiều job. Một file config của CircleCI bao gồm các job và parameters, các job mặc định sẽ chạy song song
workflows:
workflow-ci:jobs:- build- publish:requires:- build
Ví dụ trên thì job publish muốn run thì phải đợi sau khi job buld hoàn thành xong bằng keyword requires, nếu không thì mặc định 2 job này chạy song song
Một job khi run, circle sẽ launch 1 docker container hoặc VM để run nó bằng tứ khóa
docker:
- image: circleci/golang:1.14
Hoặc machine
machine:
image: ubuntu-1604:201903-01
Steps
Định nghĩa các step cần run như checkout, test, build code….
steps:
- run: nvidia-smi- checkout
Để push artifactory lên jfrog cần tạo 1 credentials, thường là token, tạo bằng admin account của Jfrog
Jfrog cung cấp Jfrog CLI command line để tương tác với artifactory, circleCI sẽ sử dụng các command này để thực hiện việc push artifact lên jfrog. Tuy nhiên thư viện orb đã wrap Jfrog command thành thư viện, developer có thể sử dụng ngay
- artifactory/install
- artifactory/upload:
Step 3) Run job
Commit circleCI lên github, job sẽ tự động chạy build và push artifact lên Jfrog
Bài tiếp sẽ đi sâu hơn về circleCI với các tính năng thú vị khác
0 Nhận xét