Concourse là gì?

1284

Bài viết được sự cho phép của tác giả Lê Chí Dũng

Concourse là mã nguồn mở về CI/CD.

Vì đây là mã nguồn mở nên người phát triển có thể custom về bộ core CI/CD theo ý muốn. Và Concourse được xây dựng trên cơ chế đơn giản về resourcestasks và jobs. Việc sử dụng Concourse là một cách tiếp cận về  CI/CD tuyệt vời.

  Lập trình Concurrent cùng Semaphore
  Đồng thời (Concurrency) và song song (Parallelism) khác nhau như thế nào?

Configuration như Code

resources:
- name: booklit
  type: git
  source: {uri: "https://github.com/vito/booklit"}

jobs:
- name: unit
  plan:
  - get: booklit
    trigger: true
  - task: test
    file: booklit/ci/test.yml

Bạn có thể hiểu  pipeline như một Makefile phân tán, cấp cao hơn, chạy liên tục.

Mỗi mục trong resource là một phụ thuộc và mỗi mục trong các job mô tả một plan để chạy khi công việc được kích hoạt (bằng tay hoặc bằng một step có được).

Việc làm có thể phụ thuộc vào các nguồn lực đã passed các công việc trước đó. Chuỗi kết quả của công việc và tài nguyên là một biểu đồ phụ thuộc liên tục thúc đẩy dự án của bạn tiến lên, từ source code đến production.

HIển thị hoạt động

Concourse là gì?

Cấu hình pipeline của bạn sau đó được hiển thị trong giao diện người dùng web, chỉ cần một cú nhấp chuột để nhận được từ hộp màu đỏ (thất bại) để xem tại sao nó thất bại.

Hiển thị hoạt động cũng cung cấp một vòng phản hồi “gut check” – nếu nó có vẻ sai, có lẽ nó đã sai.

Kiểm soát mã nguồn CI

$ fly -t ci set-pipeline -p booklit -c pipeline.yml
$ vim pipeline.yml
$ fly -t ci set-pipeline -p booklit -c pipeline.yml
$ git add pipeline.yml
$ git commit -m "initial pipeline"

Tất cả quản trị được thực hiện bằng cách sử dụng Fly CLI. Lệnh fly set-pipeline đẩy cấu hình lên tới Concourse. Khi nó trông ổn, bạn có thể kiểm tra file để kiểm soát nguồn. Điều này giúp dễ dàng khôi phục nếu máy chủ Concourse của bạn bị down.

Reproducible, Debuggable Builds

$ fly -t ci intercept -j booklit/unit -s unit
root@2c15ff11:/tmp/build/0df9eea0# ps
    PID TTY          TIME CMD
    171 pts/1    00:00:00 bash
   1876 pts/1    00:00:00 ps
root@2c15ff11:/tmp/build/0df9eea0# ls
depspath  gopath
root@2c15ff11:/tmp/build/0df9eea0# █

Tất cả mọi thứ chạy trong container, đảm bảo một môi trường sạch sẽ trên mỗi lần chạy. Mỗi task chỉ định image riêng của nó, cho nó toàn quyền kiểm soát các dependencies, thay vì quản lý chúng trên các workers.

fly intercept sẽ đưa bạn vào một trong các build của các containers, có thể hữu ích cho việc debugging.

Lặp lại cục bộ nhanh chóng

~/booklit $ fly -t ci execute -c ci/test.yml
executing build 1 at http://localhost:8080/builds/1
initializing
booklit: 4.74 MiB/s 0s
running gopath/src/github.com/vito/booklit/ci/test
fetching dependencies...
installing ginkgo...
running tests...
█

The fly execute command executes a task as a one-off build, with your local changes. This will run your code in exactly the same way it would run in your pipeline, without you having to repeatedly push broken commits until it works. Achieve the fabled green build #1!

When a job fails, you can also use fly execute with -jflag to run with the same inputs as the failed job. You can then replace an input with your local changes with -i to test if your fix is valid.

Lệnh fly execute thực thi một task như một bản dựng một lần, với các thay đổi cục bộ của bạn. Điều này sẽ chạy code của bạn theo cách chính xác giống như cách nó sẽ chạy trong pipeline của bạn, mà bạn không phải liên tục đẩy các commit bị hỏng cho đến khi nó hoạt động. Đạt được huyền thoại build màu xanh #1!

Khi một job thất bại, bạn cũng có thể sử dụng fly execute với cờ-j để chạy với cùng các inputs như failed job. Bạn có thể thay thế một input bằng các thay đổi local của bạn bằng -i để kiểm tra xem bản sửa lỗi của bạn có hợp lệ không.

Mang lại tích hợp của riêng bạn

resource_types:
- name: slack
  type: docker-image
  source:
    repository: quay.io/ahelal/bender
    tag: latest

resources:
- name: slack-deploy
  type: slack
  source:
    slack_token: ((slack_token))
    channel: "admin"
    grammar: "dang! deploy it now!"

jobs:
- name: prod-deploy
  plan:
  - get: slack-deploy
    trigger: true
  - # ...

Concourse không có một hệ thống plugin phức tạp. Thay vào đó, nó có một sự trừu tượng mạnh mẽ duy nhất.

Phần resources của một pipeline liệt kê các Resources , là các vị trí bên ngoài trừu tượng nơi pipeline của bạn sẽ theo dõi các thay đổi, tìm nạp từng chút từ và đẩy từng chút đến.

Ví dụ, một resource với kiểu git tham chiếu đến git repository, resource này sẽ được clone trong một get step và push đến trong put step. Đằng sau hậu trường, Concourse sẽ liên tục run git fetch để tìm kiếm các commit mới mà các jobs có thể muốn trigger.

Về cốt lõi, Concourse không biết gì về Git. Nó đi kèm với một loại resource git ra khỏi hộp, nhưng bạn có thể dễ dàng đưa chính bạn vào pipeline của bạn. Các loại resource được triển khai dưới dạng image chứa các scripts – sử dụng docker-image, chúng có thể được tìm nạp từ Docker registry.

Bài viết gốc được đăng tải tại lcdung.top

Có thể bạn quan tâm:

Xem thêm Việc làm IT hấp dẫn trên TopDev