---
# System prepended metadata

title: CI/CD and Rancher Pipelines

---

#  CI/CD and Rancher Pipelines 
**Rancher** :)
* giúp quản lý Docker container bằng giao diện, mõi thao tác đều thực hiện trên website.

![](https://i.imgur.com/wyCPtmF.png)

* Rancher dần trở thành công cụ hỗ trợ rất nhiều container orchesration ( là công cụ , dịch vụ điều phối và quản lý nhiều container sao cho chúng làm việc hiệu quả nhất :100:  ) 


* Rancher chia làm  thành phần chính:
    * INFRASTRUCTURE ORCHESTRATION:
        * Rancher lấy tài nguyên từ bất kì đâu hoặc private cloude chỉ cần có nhân Linux(Linux kenel).Mỗi máy chủ của Linux có thể là ảo hoặc là máy chủ vật lý,Rancher chỉ quan tâm đến CPU và memory,ổ cứng và kết nối mạng.Từ đó nó sẽ tọa ra 1 instence dựa trên phần cứng được chia sẻ
    * CONTAINER ORCHESTRATION AND SCHEDULING:
        * nhiều người dùng chọn cachs chạy container sử dụng 1 container orchestration và scheduling frame work. Rancher có tất cả các container orchestration phổ biến: Docker swarm, kubernetes và Mesos. Có thể tạo nhiều Swarm cluster hay là Kubernetes và cũng có thể sử dụng navive swarm và Kubernetes tools để quản lý
    * APPLICATION CATALOG: 
        * User có thể triển khai toàn bộ 1 cluster ứng dụng chưa multi-container từ catalog 
    * ENTERPRISE-GRADE CONTROL:
        * Rancher hỗ trợ các plugin xác thực cùng với AD , LDAP và Github .Nó cũng cho phép người dùng share hoặc deny access đến môi trường phát triển và production

![](https://i.imgur.com/GKsMzXj.png)


**CI/CD**
* CI (Continuous Integration) tích hợp liên tục 
* CD (Continuous Delivery or Deployment) triển khai liên tục
*  Quy trình của CI/CD như sau:
    *  Developer commit code (đẩy code lên server)
    *  Quy trình CI/CD sẽ tự động chạy Build, chạy test và deploy sản phẩm
    *  tiếp tục chuyển giao sản phẩm đến người dùng
* Cách thức hoạt động của CI/CD
    * khi Developer tạo bất kì thay đổi gì ở trên repo (push,pull request,..) thì Git repo sẽ phát đi thông báo đến CI/CD tool là có thay đổi như thế.Phản hồi với thông báo,phía CI/CD sẽ tạo tự động thực huện các thao tác đã được cài đặt trước đó cho hành động pull request
    * sau khi thực hiện các lệnh đã được cài đặt thì CI/CD sẽ cập nhập kết quả ngược lại cho Git repo có vượt qua (pass) hết các quy trình (bao gồm testing) phía CI/CD hay không


**Pipeline**

* Là hệ thống các quy trình và công cụ tự động cho phép các nhà phát triển (Dev) cộng tác và xây dựng , triển khai code cho môi trường production
* Các thành phần của Rancher pipline
    * ![](https://i.imgur.com/Az4AEww.png)
    * Mô hình trên thể hiện các bước cấu hình cho pipline
        * clone: Bước đầu tiên, các Dev sẽ thay đổi code trong source code repo, pipline tương ứng với việc thay đổi sẽ được thực hiện
        * Build stage: Code sẽ được Build và có thể triển khai qua Dockerfile. Nếu như xảy ra lỗi thì,sẽ phải sửa lỗi này ngay trước khi thực hiện các bước sau
        * Test stage : sau khi nhận được phần code và có thể chạy chương trình , việc với chương trình đó được thực hiện để đảm bảo chương trình chạy đúng với thiết kế ban đầu
        * Deploy stage: Nếu như chương trình đã qua được phần test, phần code đó đã có thể triển khai cho việc chạy thử hoạc cho ngườu dùng cuối có thể sử dụng.

* Ta có thể config file yaml rancher pipeline bằng 2 cách:
    * cấu hình thông qua UI của Rancher : resources -> pipline -> edit config ![](https://i.imgur.com/xdoJVfV.png)

    * Sau đó ta vào cấu hình file Yaml của pipline ![](https://i.imgur.com/GExkekI.png)
    * Mỗi một bước triển khai sẽ là 1 stage và trong mỗi stage sẽ thực hiện các steps khác nhau 

    * ví dụ như: ![](https://i.imgur.com/593P2e1.png) 
        * với Steps Build and push image này trong steps này có các phần để khai báo config như là Dockerdile path , Image name phần Registry và phần Triger Rule (có thể có hoặc không), Sau khi cấu hình xong push lên repo.
    *  Còn với các cấu hình bằng edit file Yaml ![](https://i.imgur.com/GjZ3IMr.png)
* pipeline được triggered bởi một sự kiên push đến repository, nhưng chúng ta cần phải định nghĩa sự kiện trigger đó trong pipeline
* Các sự kiện:

    * push: Bất cứ khi nào commit đã được push đến branch trong repo, pipeline sẽ được triggered.

    * pull request: Bất cứ khi nào pull một request được tạo đến repo, pipeline sẽ được triggered

    * Tag: Bất cứ khi nào tag được tạo trong repo, pipeline sẽ được triggered
* Ở đây sự kiện Build and push Image sẽ được triggered theo branch là dev_ts với các commit được push trên branch dev_ts 

    ![](https://i.imgur.com/pP7TnpW.png)

* Các chuỗi sự kiện ở đây Build and push Image và test đều đã pass 
* ![](https://i.imgur.com/RcMovPk.png)

* Ở chuỗi sự kiện này thì Stage deploy có gặp lỗi về phần chưa tương thích về mặt config trong file deployment.yml của pipeline, vậy nên là cập nhập lại file deployment.yml rồi push lên repo để cho pipeline thực hiện lại phần deploy
    
    