Đây là một câu hỏi rất hay vì nó là một mô hình chống phổ biến để kết hợp ci/cd
các công cụ với môi trường.
Jenkins là một nhà máy xây dựng. Như vậy, nó hoàn toàn không thể tin được về khái niệm môi trường, hoặc thậm chí là giao hàng.
Ưu tiên tốt nhất là có một số quy trình dàn dựng và / hoặc giao diện (nếu bạn có đủ khả năng: một phần mềm phân phối chuyên dụng).
Quá trình dàn dựng
Bạn nên cố gắng tạo một số loại công việc dàn cho từng môi trường, trong đó bạn sẽ xác định cấu hình của môi trường và gói gói cuối cùng với nó.
Tiếp theo bạn sẽ có công việc giao hàng cho từng môi trường.
Công cụ giao hàng
Để làm được tạo việc làm giai đoạn và giao hàng, bạn có thể sử dụng công cụ scripting rất cơ bản, như shell
, nhưng có các công cụ scripting thích nghi hơn, như Ansible
, puppet
, chef
...
Nếu bạn có thể đủ khả năng chi trả, bạn có thể xem xét đầu tư vào một phần mềm triển khai (tôi sẽ đề cập đến một số phần mà tôi đã làm việc trong phần bình luận).
Lưu ý rằng những phần mềm đó quản lý một số loại quy trình dàn dựng môi trường.
Rõ ràng, nó rất có ý nghĩa để kết hợp triển khai phần mềm và kịch bản.
Ngoài các công cụ và môi trường riêng biệt
Vì bạn đã yêu cầu thực hành tốt nhất, nên có vẻ như tôi nên đề cập đến một cách chống mẫu thường thấy khác: ghép các công cụ SCM và quy trình phân phối.
Đó là một cách thực hành rất tốt để lưu trữ cấu hình môi trường (tất nhiên không phải mật khẩu hoặc thông tin bí mật) và chuyển các tập lệnh trực tiếp trong các công cụ SCM (như svn
hoặc git
...). Tuy nhiên, đó là một thực tế rất tệ để kiểm tra cấu hình môi trường và phát các tập lệnh trực tiếp DURING the go live. Nó có thể đơn giản là không có sẵn khi bạn cần nó.
Giai đoạn trả phòng này nên là một phần của quy trình dàn dựng mà tôi đã đề cập trước đó.
Tiềm năng
Một cách thực hành tốt nhất là các tập lệnh của bạn phải là idem-potent
: điều này có nghĩa là bạn sẽ có thể phát các tập lệnh của mình một lần để thực hiện việc dàn dựng và phân phối. Sau đó, bạn sẽ có thể chơi chúng nhiều lần và chúng sẽ không thay đổi trạng thái hệ thống của bạn trừ khi có gì đó bị cấu hình.
Thu nhỏ
Như một thực tiễn tốt nhất cuối cùng, tôi sẽ chia sẻ từ kinh nghiệm trực tiếp đang làm kinh ngạc Jenkins: các đội khác nhau có nhu cầu và cách sử dụng khác nhau của Jenkins. Khi quá nhiều nhóm chia sẻ một Jenkins chung, có thể có vấn đề với tài nguyên. Trường hợp xấu nhất là khi một đội yêu cầu khởi động lại chủ Jenkins trong khi một nhóm khác cần giao hàng.
Lý tưởng là có một Jenkins cho mỗi nhóm hoặc mỗi nhóm các nhóm có cùng mục tiêu và lập kế hoạch phân phối.