6

Tôi đang trong quá trình xây dựng một công ty từ đầu (Tomcat + Spring Rest + Java) nên chúng tôi có sự sang trọng để làm một số điều đúng (hoặc trong danh sách không lặp lại những sai lầm trong quá khứ của chúng tôi) mục tiêu chúng tôi muốn đạt được là khả năng tự động xây dựng, thử nghiệm (đơn vị, tích hợp) & triển khai.Làm thế nào để tiếp cận CI

Nền tảng của chúng tôi được xây dựng với một trang web giao diện HTML/JS tĩnh được phục vụ với NGiNX và một vài máy chủ API (các ứng dụng khác nhau), một số được tiếp xúc và một số trong số đó chỉ có thể truy cập từ bên trong trang trại. .

Tôi đã chọn TeamCity làm máy chủ CI vì tôi hơi quen thuộc với nó và tôi đã có trải nghiệm tuyệt vời cho đến nay với tất cả các sản phẩm của Jetbrain.

cho đến nay tôi đã xác định hai xây dựng cấu hình

  1. sanity Phát triển: Kiểm tra ra từ git, chạy DB kịch bản để chuẩn bị cơ sở dữ liệu, thực hiện các mục tiêu maven sạch cài đặt (do bộ testng của chúng tôi đang được thực hiện) , thực hiện mã vùng và phân tích mã tĩnh Cấu hình này đang thực thi và rất tuyệt.

  2. tích hợp: Kiểm tra ra từ git, chạy DB kịch bản để chuẩn bị cơ sở dữ liệu, thực hiện các mục tiêu maven sạch cài đặt (do bộ testng của chúng tôi đang được thực hiện)

Bây giờ tôi đã đạt đến một phần vấn đề, Cấu hình của chúng tôi cần được triển khai cho các máy khác nhau trước khi thử nghiệm Tích hợp của chúng tôi có thể bắt đầu, tôi cũng muốn xây dựng nó theo cách mà tôi có thể thêm cấu hình thứ ba sẽ triển khai để sản xuất trực tiếp sau khi tích hợp đã trôi qua vì vậy về cơ bản nó giống như cấu hình thứ hai nhưng thêm một số chức năng như lấy một ứng dụng ra và đặt nó trở lại trực tuyến sau khi triển khai một cách duyên dáng, tôi đã thấy phương pháp tiếp cận eral về làm thế nào để làm điều này từ maven hàng hóa, vỏ script, vải vv ...

là có một cách được đề nghị về cách tiếp cận bản vẽ này từ kinh nghiệm trong quá khứ của bạn? cũng không rõ cách tốt nhất để chạy thử nghiệm Tích hợp bao gồm một số ứng dụng được triển khai, tôi đã thấy nhiều ví dụ về cầu nối nhúng vv .. nhưng điều đó chỉ tốt cho một ứng dụng hoặc một cấu hình rất đơn giản khi bạn cần 3-4 ứng dụng được triển khai trước khi bạn có thể bắt đầu thử nghiệm, cách tốt nhất để làm điều này là gì? thêm một dự án khác dành riêng cho thử nghiệm tích hợp và thực hiện một mục tiêu maven khác với một cấu hình cụ thể sau khi triển khai kết thúc?

BTW - Triển khai AWS

Xin cảm ơn Guys.

Trả lời

4

Trước hết, tôi khuyên bạn nên đọc kỹ Giao hàng liên tục (Jez Humble, David Farley), có rất nhiều thông tin về điều này. Có một sample chapter here.

Vì đọc bài viết này, tôi đã bắt đầu thực hiện một đường ống xây dựng nơi mỗi cam kết svn đi qua mọi giai đoạn trong đường ống với môi trường dần dần giống như sản xuất khi xây dựng di chuyển qua. Chúng tôi sử dụng Jenkins cho việc này.

  1. Commit giai đoạn - dev sự tỉnh táo - biên dịch, đơn vị kiểm tra & một số số liệu. giai đoạn ban đầu này cũng xây dựng những chương trình cần thiết cho phần còn lại của các đường ống dẫn
  2. giai đoạn hội nhập - điều này sẽ lấy các file tương tự như giai đoạn trước (không phải là một thanh toán mới) và chạy thử nghiệm hội nhập db trong bộ nhớ
  3. chấp nhận tự động kiểm tra sân khấu - mất những chương trình từ cam kết giai đoạn và triển khai đến một máy chủ mà chúng tôi chạy thử nghiệm selen
  4. QA giai đoạn - điều này được triển khai bởi qa người chỉ cần nhấp vào một nút để kéo bất cứ điều gì build họ muốn, một lần nữa nó chỉ triển khai những chương trình từ giai đoạn cam kết đến một máy chủ QA
  5. UAT - giống như QA nhưng một sản xuất giống như môi trường mà chúng tôi cũng làm bài kiểm tra hiệu suất
  6. Sản - lấy các tệp nhị phân từ giai đoạn cam kết và triển khai để sản xuất.

Mỗi giai đoạn này hoạt động như một 'cổng chất lượng' - không được phép tiến xa hơn cho đến khi vượt qua một số lỗi - kiểm tra thất bại, số liệu% s v.v. Mọi thay đổi cấu hình cần thiết cho mỗi môi trường được thực hiện bằng cách giải nén các tệp nhị phân gốc, thay đổi các thiết lập, đóng gói lại - lý tưởng là tôi muốn tách cấu hình khỏi các tệp nhị phân của ứng dụng nhưng chưa tìm được cách thực hiện.

Giai đoạn thử nghiệm chấp nhận tự động chỉ cập nhật ứng dụng hiện có trên máy chủ - giai đoạn qa làm dừng hoàn toàn, gỡ cài đặt, cài đặt & bắt đầu hành động. Mỗi chạy một kịch bản khác nhau - một sự kết hợp của ant & python.

Here's đường dẫn trông như thế nào trong jenkins với plugin xây dựng đường ống.

[sửa]

Bạn không thực sự phải thực hiện từng giai đoạn này trong một đi, nó khá dễ dàng để có giữ chỗ cho từng giai đoạn mà chỉ chảy vào tiếp theo mà không thực sự làm bất cứ điều gì. Nếu bạn bản đồ quá trình hiện tại của bạn, bạn sẽ có thể tự động hóa các phần của nó và di chuyển theo hướng một chút đường ống. Giai đoạn cam kết là dễ nhất để làm, về cơ bản những gì bạn sẽ làm trong việc thiết lập một máy chủ CI bình thường, thực hiện một dự án, móc nó vào kiểm soát phiên bản, biên dịch, thực hiện kiểm tra, chạy một số số liệu thống kê tất cả từ kiến ​​/ nhiệm vụ maven. Việc này mất hơn 5 phút để chạy.

Nhiệm vụ thống kê mất quá nhiều thời gian để chạy (> 15 phút) vì vậy tôi chạy tập hợp con trên cam kết và chạy hàng đêm thực hiện toàn bộ rất nhiều Findbugs, PMD, Checkstyle & Cobertura. Tôi muốn chạy tất cả những điều này trên cam kết nhưng điều đó sẽ đòi hỏi một số phần cứng hơn & làm việc để thiết lập một số loại lưới xây dựng. Các thử nghiệm Selenium không phải là tại thời điểm này trong một dự án riêng biệt, nhưng chúng được đóng gói như một lọ riêng biệt và điều này được tạo sẵn cho giai đoạn thử nghiệm chấp nhận tự động thông qua plugin jenkins 'copy artifact' - các script ant/python gói tập tin WAR và triển khai vào một thùng chứa, sau đó ant unpacks và chạy các bài kiểm tra Selenium (thông qua junit). Chỉ có một 'thử nghiệm khói' hữu ích vào lúc này và họ không có sự phụ thuộc vào WAR chính mặc dù tôi có thể thấy sự thay đổi đó.Tôi không thực sự thích ý tưởng có các dự án riêng biệt cho các thử nghiệm mã & - các kịch bản xây dựng chỉ gói các lớp và thư viện cần thiết cho từng mô-đun từ dự án chính - cho tình huống của bạn (và chẳng bao lâu nữa, chúng ta) bạn có thể phải làm điều gì đó khác nhau - cách kích hoạt một máy ảo hoặc hai với cấu hình bạn cần và triển khai đến đó. (rất nhiều thông tin trong cuốn sách giao hàng liên tục về điều này)

Thật tốt khi Jenkins hỗ trợ rất nhiều điều này qua plugin - chúng tôi chuyển từ Atlassian Bamboo vì hầu hết những gì chúng tôi muốn không có sẵn và plugin hiện tại sẽ không hoạt động hoặc không tương thích với phiên bản Bamboo. Tôi đã không sử dụng Team City trong một thời gian vì vậy tôi không có ý tưởng nếu nó hỗ trợ ý tưởng này của một 'đường ống' [aparently not]. Plugin 'Build Pipeline' khá mới và có một vài cạnh thô nhưng đang trong quá trình phát triển tích cực - tôi nghĩ rằng có thể thực hiện được điều này với các bản dựng xây dựng của Jenkins '' promotion 'builds & nhưng chưa thử. Nếu bạn có đủ tài nguyên (tiền!), Bạn có thể muốn xem Go

+0

Trông giống như cách tiếp cận tốt và được xác định rõ ràng, bạn mất bao nhiêu thời gian để triển khai? và bạn có thể có thêm một chút về mặt kỹ thuật cụ thể về cách bạn thực hiện các thử nghiệm selen (một dự án khác không?) và triển khai? – Amnon

+0

Như tôi đã nói - 'Tôi đã bắt đầu thực hiện' - vì vậy, điều này chưa hoàn thành - tôi sẽ cập nhật câu trả lời của mình với một số thông tin khác. – blank

+0

Bạn đã bao giờ hoàn thành việc này chưa? sẽ rất thú vị để xem cách bạn đạt được nó. –