Giaosucan's blog - Chia sẻ kiến thức theo cách bá đạo

Ticker

20/recent/ticker-posts

Giải ngố circleCI - part 1

Continuous Integration and Delivery - CircleCI

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 about image

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

https://app.circleci.com/

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

Đăng nhận xét

0 Nhận xét