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ề resources, tasks và jobs. Việc sử dụng Concourse là một cách tiếp cận về CI/CD tuyệt vời.
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
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 -j
flag 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