Cách thiết lập triển khai liên tục trong dự án gia đình của bạn một cách dễ dàng

Triển khai liên tục là một điều tuyệt vời. Cam kết dự án của bạn và nhìn thấy nó được xây dựng và triển khai mà không cần phải làm bất cứ điều gì là mê.

Và trong bài viết này, tôi muốn chỉ cho bạn cách thực hiện nó trong dự án nhà của bạn một cách dễ dàng.

Để làm rõ hơn, đây là một sơ đồ cho thấy sự khác biệt giữa Phân phối liên tục và Triển khai liên tục.

Vì hầu hết thời gian không có ai ngoài bạn phụ thuộc vào dự án gia đình của bạn, chúng tôi sẽ thực hiện quy trình làm việc với Triển khai liên tục vì bạn muốn thấy các thay đổi của mình được triển khai ngay lập tức. Nếu không phải như vậy, bạn có thể thay đổi quy trình làm việc sau.

Bạn sẽ tìm hiểu về những điều sau:

  • Cách tạo Dockerfile
  • Cách đẩy dự án của bạn lên GitHub
  • Tự động tạo hình ảnh docker trên Docker Hub
  • Tự động tải xuống và chạy hình ảnh bằng Tháp Canh

Điều kiện tiên quyết:

  • Một số kiến ​​thức về Docker và Dockerfile, mặc dù tôi sẽ giải thích một số trong đó
  • Đã cài đặt git
  • Một tài khoản Docker Hub
  • Một máy chủ (Linux) (vật lý hoặc ảo) chạy Docker

Để tham khảo, đây là kho lưu trữ GitHub mẫu và đây là kho lưu trữ trung tâm docker ví dụ mà tôi sẽ sử dụng.

Vì vậy, hướng dẫn này sẽ chỉ hữu ích nếu bạn định chạy phần mềm của mình với Docker (mà tôi khuyên bạn nên sử dụng Docker là tuyệt vời).

Tại sao sử dụng Docker?

Docker cho phép bạn có cùng một môi trường để phát triển và sản xuất, giúp loại bỏ Heisenbugs và vấn đề "nó hoạt động trên máy của tôi". Ngoài ra, các thùng chứa được cách ly mang lại lợi ích bảo mật cho chúng tôi.

Còn nhiều thứ nữa, nhưng hai lợi ích này khiến tôi luôn phân phối phần mềm của mình trong các vùng chứa Docker.

Thiết lập Dockerfile của bạn

Đầu tiên, chúng ta sẽ tạo một Dockerfile cho dự án. Tệp đặc biệt này luôn được gọi là “Dockerfile” không có phần mở rộng và nằm ở thư mục trên cùng của dự án của bạn.

Dockerfile bắt đầu bằng FROMcâu lệnh cho Docker biết bạn muốn bắt đầu với hình ảnh cơ sở nào. Bạn có thể tưởng tượng điều này giống như việc sử dụng một canvas với nền đã được vẽ sẵn và chỉ thiếu phần trung tâm (chương trình của bạn).

Hầu hết thời gian hình ảnh bạn muốn kéo là hình ảnh cơ sở của ngôn ngữ lập trình của bạn, bạn có thể tìm thấy hình ảnh này tại Docker Hub đã đề cập trước đó.

Tiếp theo, chúng tôi sao chép các tệp dự án của mình vào vùng chứa docker bằng COPY..lệnh. Điều này làm gì?

Nó lấy các tệp từ thư mục đầu tiên (dấu chấm đề cập đến thư mục hiện tại của tệp, bao gồm tất cả các tệp dự án của bạn) và đặt nó vào thư mục hiện tại của vùng chứa Docker của bạn (hãy nhớ vùng chứa docker của bạn là hệ điều hành riêng của nó). Các tệp của bạn bây giờ nằm ​​ở thư mục cơ sở ở đó, bạn có thể muốn thay đổi.

Tiếp theo, chúng ta cần cài đặt các gói phụ thuộc, mà tôi sẽ sử dụng python pip, nhưng bất kỳ hệ thống quản lý gói tương đương nào tùy thuộc vào ngôn ngữ bạn chọn sẽ thực hiện được. Điều quan trọng cần học ở đây là cách thực thi các lệnh trong vùng chứa bằng RUN.

From python:3.7COPY . .RUN pip install -r requirements.txt

Dễ dàng, phải không? Bây giờ chúng ta phải bắt đầu chương trình của mình trong vùng chứa.

CMD ["python", "./my_script.py"]

Câu lệnh CMD là duy nhất. Mỗi Dockerfile phải có nó là dòng cuối cùng của nó vì nó bắt đầu quá trình chính trong vùng chứa.

Bạn đã hoàn thành Dockerfile của mình! Bây giờ bạn có thể xây dựng hình ảnh và vùng chứa của mình theo cách thủ công, nhưng chúng tôi sẽ bỏ qua điều đó ngay bây giờ.

Bây giờ, chúng tôi sẽ tạo kho lưu trữ của mình trên GitHub, nhưng hãy nhớ không chọn “Khởi tạo kho lưu trữ này bằng README”.

Sau đó, bạn cần sao chép URL từ xa.

Mở cmd / shell trong thư mục gốc của dự án của bạn.

Bạn cần khởi tạo kho lưu trữ git của mình, thêm tệp, định cấu hình điều khiển từ xa, cam kết tệp và đẩy dự án của bạn lên GitHub.

git initgit add *git remote add origin //github.com//.gitgit commit -a -m "Make Dockerfile ready for CD"git push -u origin master

Bây giờ, Kho lưu trữ GitHub của bạn sẽ giống như sau:

Xin chúc mừng, bạn sắp hoàn thành một nửa!

Bước tiếp theo là kết nối GitHub với Docker Hub. Đối với điều này, bạn đi đến cài đặt tài khoản.

Cuộn xuống và kết nối máy chủ git của bạn.

Tạo kho lưu trữ của bạn trên trung tâm docker ngay bây giờ.

Đặt tên cho repo và nhấp vào biểu tượng GitHub (hoặc Bitbucket, nếu đó là thứ của bạn). Bây giờ chọn tổ chức của bạn (thường là tên người dùng của bạn) và tên dự án của bạn. Nếu bạn muốn sử dụng hình ảnh chính của mình cho việc xây dựng và luôn cập nhật phiên bản mới nhất, bây giờ bạn có thể nhấp vào “Tạo & Xây dựng” và xem hình ảnh của bạn đang được tạo cho bạn. Nếu không, bạn phải chỉnh sửa cài đặt bản dựng.

Các bước cuối cùng! Bây giờ bạn cần Tháp canh trên máy mục tiêu của mình.

Tháp canh là một chương trình kéo hình ảnh docker đang chạy của bạn và kiểm tra các bản cập nhật. Nếu có bất kỳ cập nhật nào, nó sẽ tắt vùng chứa ban đầu một cách duyên dáng và tạo vùng chứa từ hình ảnh mới với cùng cài đặt.

Điều tuyệt vời nhất là chúng ta cũng có thể cài đặt Tháp Canh bằng Docker!

Nhập thông tin sau vào thiết bị đầu cuối của bạn:

docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock v2tec/watchtower

Sau đó, bạn cần chạy vùng chứa Docker cho dự án của mình!

docker run -d --name  /

Tùy chọn “-d” làm cho chương trình của bạn chạy ở chế độ nền, vì vậy chương trình sẽ không tắt nếu bạn đóng thiết bị đầu cuối.

Vì vậy, tóm lại, nếu bạn đẩy một cam kết vào kho lưu trữ GitHub của mình, trung tâm Docker sẽ tự động tạo một hình ảnh Docker cho bạn. Hình ảnh này sau đó được kéo bởi WatchTower và được chạy với tất cả các tùy chọn ban đầu.

Nếu bạn cần giúp đỡ bất cứ lúc nào, đừng ngại hỏi, tôi rất sẵn lòng trợ giúp.

Nếu đó là một vấn đề kỹ thuật, một vấn đề trong dự án GitHub sẽ rất tuyệt vời!

Nhưng còn các bài kiểm tra?

Câu hỏi hay!

Bạn có thể sử dụng Travis CI để chạy các thử nghiệm của mình cùng một lúc.

Bạn có thể đọc về điều này ở đây, nhưng ý chính của nó là bạn thêm một tệp khác vào kho lưu trữ của mình, tệp này có hướng dẫn cho máy chủ bên ngoài để thực hiện kiểm tra đơn vị hoặc bất kỳ hướng dẫn nào khác.

Nhưng nếu tôi chỉ muốn hình ảnh docker của mình được xây dựng nếu các bài kiểm tra vượt qua?

Điều này phá vỡ quy trình làm việc của chúng tôi một chút.

Giờ đây, chúng tôi không thể dựa vào trung tâm docker để xây dựng hình ảnh của mình nữa. Thay vào đó, nó cũng sẽ là Travis CI tạo ra hình ảnh và sau đó đẩy nó vào kho lưu trữ Docker Hub của bạn. Đọc về điều này ở đây.