Bạn đang ở đây, nhưng tôi sẽ mở rộng sơ đồ của bạn một chút:
Về cơ bản (nếu kiểm soát phiên bản của bạn sẽ cho phép nó, tức là nếu bạn đang sử dụng hg / git), bạn muốn mỗi cặp nhà phát triển / nhà phát triển có nhánh "cá nhân" của riêng họ, chứa một câu chuyện người dùng duy nhất họ đang làm việc. Khi họ hoàn thành tính năng, họ cần đẩy vào một nhánh trung tâm, nhánh "Phát hành". Tại thời điểm này, bạn muốn nhà phát triển có được một chi nhánh mới, cho việc tiếp theo họ cần làm việc. Nhánh tính năng ban đầu phải được giữ nguyên trạng, vì vậy mọi thay đổi cần được thực hiện đối với nó có thể được thực hiện riêng rẽ (điều này không phải lúc nào cũng có thể áp dụng, nhưng đó là điểm khởi đầu tốt). Trước khi một nhà phát triển trở lại làm việc trên một nhánh tính năng cũ, bạn nên kéo vào nhánh phát hành mới nhất, để tránh các vấn đề hợp nhất kỳ lạ.
Tại thời điểm này, chúng tôi đã có một ứng cử viên phát hành có thể dưới dạng chi nhánh "Phát hành" và chúng tôi đã sẵn sàng để chạy quy trình CI của chúng tôi (trên chi nhánh đó, rõ ràng bạn có thể làm điều này trên mỗi chi nhánh nhà phát triển, nhưng đây là khá hiếm trong các nhóm phát triển lớn hơn tại đó làm tắc nghẽn máy chủ CI). Đây có thể là một quá trình liên tục (đây là trường hợp lý tưởng, CI nên chạy bất cứ khi nào chi nhánh "Phát hành" được thay đổi) hoặc có thể là hàng đêm.
Tại thời điểm này, bạn sẽ muốn chạy một bản dựng và lấy một vật phẩm xây dựng khả thi từ máy chủ CI (nghĩa là thứ gì đó bạn có thể triển khai một cách khả thi). Bạn có thể bỏ qua bước này nếu bạn đang sử dụng ngôn ngữ động! Khi bạn đã được xây dựng, bạn sẽ muốn chạy Bài kiểm tra đơn vị của mình, vì chúng là nền tảng của tất cả các bài kiểm tra tự động trong hệ thống; họ có thể sẽ nhanh chóng (điều này tốt, vì toàn bộ quan điểm của CI là rút ngắn vòng phản hồi giữa phát triển và thử nghiệm) và họ không cần phải triển khai. Nếu chúng vượt qua, bạn sẽ muốn tự động triển khai ứng dụng của mình đến máy chủ thử nghiệm (nếu có thể) và chạy bất kỳ thử nghiệm tích hợp nào bạn có sẵn. Các thử nghiệm tích hợp có thể là các thử nghiệm UI tự động, thử nghiệm BDD hoặc thử nghiệm tích hợp tiêu chuẩn bằng cách sử dụng khung Kiểm tra đơn vị (nghĩa là "đơn vị"
Đến thời điểm này, bạn nên có một chỉ dẫn khá toàn diện về việc liệu bản dựng có khả thi hay không. Bước cuối cùng tôi thường thiết lập với nhánh "Phát hành" là để nó tự động triển khai ứng viên phát hành đến máy chủ thử nghiệm, vì vậy bộ phận QA của bạn có thể thực hiện các thử nghiệm khói thủ công (điều này thường được thực hiện hàng đêm thay vì mỗi lần kiểm tra để tránh làm hỏng một chu kỳ kiểm tra). Điều này chỉ đưa ra một dấu hiệu nhanh chóng của con người về việc bản dựng có thực sự phù hợp để phát hành trực tiếp hay không, vì nó khá dễ bỏ sót nếu gói thử nghiệm của bạn không toàn diện và thậm chí với độ bao phủ thử nghiệm 100%, bạn có thể dễ dàng bỏ lỡ thứ gì đó mà bạn có thể 't (không nên) tự động kiểm tra (chẳng hạn như hình ảnh được căn chỉnh sai hoặc lỗi chính tả).
Đây thực sự là sự kết hợp giữa Tích hợp liên tục và Triển khai liên tục, nhưng cho rằng trọng tâm của Agile là mã hóa tinh gọn và thử nghiệm tự động như một quy trình hạng nhất, bạn muốn hướng tới một cách tiếp cận toàn diện nhất có thể.
Quá trình tôi đã vạch ra là một kịch bản trường hợp lý tưởng, có nhiều lý do khiến bạn có thể từ bỏ các phần của nó (ví dụ: các nhánh nhà phát triển đơn giản là không khả thi trong SVN), nhưng bạn muốn nhắm đến nó càng nhiều càng tốt .
Về cách chu trình chạy nước rút Scrum phù hợp với điều này, lý tưởng nhất là bạn muốn các bản phát hành của mình diễn ra thường xuyên nhất có thể và không để chúng cho đến khi kết thúc nước rút, như nhận được phản hồi nhanh về việc liệu một tính năng (và xây dựng toàn bộ ) khả thi cho việc chuyển sang sản xuất là một kỹ thuật chính để rút ngắn vòng phản hồi của bạn cho Chủ sở hữu sản phẩm của bạn.