Xây dựng tự động có nghĩa là gì?


15

Tôi đang cố gắng thêm Tích hợp liên tục vào một dự án.

Theo Wikipedia , một phần chính của CI là các bản dựng tự động. Tuy nhiên, tôi bối rối về điều đó, chính xác, điều đó có nghĩa là gì, vì CI và các bài báo tự động hóa xây dựng dường như không đồng ý.

Các điểm nhầm lẫn cụ thể: "xây dựng tự động" nghĩa là gì trong bối cảnh:

  • một dự án sử dụng ngôn ngữ diễn giải, chẳng hạn như Python hoặc Perl?
  • xây dựng từ nguồn trên máy người dùng cuối?
  • một ứng dụng có các phụ thuộc không thể được biên dịch và phân phối đơn giản, chẳng hạn như cơ sở dữ liệu trong RDBMS cục bộ cho máy của người dùng?

2
Tôi đã gắn thẻ cả hai buildsbuildvì tôi không biết nên sử dụng cái nào.

Câu trả lời:


14

Bạn đã đúng khi lưu ý rằng, đối với một số công nghệ, bước tổng hợp là không cần thiết. Tuy nhiên, tôi khuyên bạn nên có cái nhìn rộng hơn khi diễn giải thuật ngữ "tự động hóa xây dựng". Hãy suy nghĩ về "xây dựng" bao gồm hai thành phần chính sau đây:

  • Quá trình tạo các nguồn tạo mã nguồn (mã, lược đồ cơ sở dữ liệu, tài liệu, v.v.) được triển khai cho người dùng cuối.
  • Việc áp dụng các biện pháp đảm bảo chất lượng trong quá trình chuyển đổi đã nói

Sau đó, tự động hóa chỉ đơn giản đề cập đến việc thực hiện bất kỳ - nếu không phải tất cả - các hoạt động đó tự động (nghĩa là không yêu cầu can thiệp thủ công). Điều này có thể bao gồm khá nhiều bước, tùy thuộc vào công nghệ của bạn:

Các bước chuyển đổi:

  • Biên soạn
  • Liên kết
  • Bao bì
  • Triển khai
  • Di chuyển dữ liệu
  • Sao lưu
  • Thông báo

Các bước đảm bảo chất lượng:

  • Trình biên dịch cảnh báo / lỗi
  • Bài kiểm tra đơn vị
  • Kiểm tra tích hợp
  • Kiểm tra hệ thống
  • Xác thực triển khai

Ngày nay, các công cụ CI tốt sẽ cho phép bạn giải quyết tất cả những mối quan tâm này. Ban đầu, hầu hết các cửa hàng đều quan tâm đến việc tự động biên dịch mã của họ, vì đó là nguồn gốc đầu tiên - và dễ thấy nhất - trong các vấn đề phát triển phần mềm thông thường.


21

Bản dựng tự động là một mô tả về một quy trình bao gồm các điều cơ bản sau:

  1. Lấy mã mới nhất từ ​​Kiểm soát nguồn
  2. Biên dịch mã mới nhất vào tệp thực thi
  3. Chạy thử nghiệm (kiểm tra đơn vị, kiểm tra hệ thống, kiểm tra tích hợp) đối với mã được biên dịch
  4. Triển khai hoàn thành thực thi đến một vị trí đã biết để triển khai.
  5. Công bố kết quả của bản dựng.
    5.1 Biên soạn thành công, kiểm tra đơn vị thành công

Đây là một quá trình thực tế, nên chạy với sự can thiệp bằng tay.


3
Vì nó được hỏi rõ ràng, bạn có thể đề cập rằng các bước không áp dụng là tùy chọn. Ví dụ: nếu ứng dụng của bạn là một tập lệnh python, bước 2 có thể không là gì hoặc nó có thể đơn giản như việc nén mã vào một tệp. Hoàn toàn chấp nhận khi không có bước biên dịch.
Bryan Oakley

@BryanOakley Thật công bằng. Tương đương với việc không có một trình biên dịch cho các tập lệnh có thể đảm bảo rằng tất cả các phụ thuộc của bạn, nếu bạn có bất kỳ, được thu thập đúng vào thời điểm này. Ví dụ: mọi thư viện bên thứ ba bổ sung theo yêu cầu của tập lệnh Python của bạn phải được đưa vào để chúng được bao gồm trong tất cả các bước sau. Điều này cũng không cần thiết, tôi cho rằng, nếu biết rằng máy đích và máy xây dựng luôn có tất cả các thư viện cần thiết.
Sheldon Warkentin

2

Theo tôi, một bản dựng tự động là thứ gì đó

  • xảy ra tự động, theo lịch trình hoặc với từng cam kết kiểm soát nguồn
  • tạo ra một tập hợp các đồ tạo tác có thể được triển khai đơn giản đến bất kỳ máy chủ nào

Mục đích là để có một quy trình triển khai có thể được lặp đi lặp lại - đọc: đã kiểm tra - để đến khi bạn triển khai sản xuất, bạn có một mức độ chắc chắn hợp lý rằng mọi thứ sẽ không đi sai. Càng ít tương tác của con người trong quá trình xây dựng và triển khai, bản phát hành của bạn sẽ càng an toàn.

Nếu bạn có một ngôn ngữ không được biên dịch, bạn vẫn có thể xây dựng một trang web và nén nó lên để tạo ra một vật phẩm duy nhất.

Một công cụ CI tốt sẽ cho phép bạn kịch bản nhiều tác vụ vào quá trình xây dựng, bao gồm cả việc chạy thử nghiệm đơn vị. Nó cũng sẽ lưu giữ hồ sơ về các bản dựng thành công và không thành công của bạn, phạm vi kiểm tra, v.v. Nhưng không ai trong số đó là một phần của những gì tôi xác định là bản dựng tự động. (ví dụ: Một quy trình xây dựng tự động tốt có những điều này, nhưng một quy trình kém không thất bại được gọi là "xây dựng tự động" vì nó thiếu những thứ đó.)

Tôi sẽ đề nghị các thử nghiệm tích hợp / hồi quy được chạy như một phần của quy trình triển khai, thay vì quá trình xây dựng (mặc dù, nếu bạn có môi trường thuận tiện, bạn có thể triển khai với mọi bản dựng).


Nó cũng có thể hữu ích khi có một bản dựng theo lịch trình và cho phép các nhà phát triển khởi động một bản dựng tự động chỉ với một hành động (nếu đó là hai hành động, nó không thực sự tự động, phải không?) Trong trường hợp của chúng tôi, bản dựng cho một số hệ thống cũng vậy khao khát khởi động từng cam kết, vì vậy nó đúng tiến độ và theo yêu cầu.
David Thornley

@DavidThornley: Vâng. Điều đó hữu ích. Hầu hết các công cụ CI cho phép bạn khởi động một bản dựng ngoài lịch trình đã đặt. Nhưng một lần nữa, nó không ngừng là bản dựng tự động vì tùy chọn này không có ở đó. Nó sẽ không còn là bản dựng tự động nếu nhà phát triển luôn phải kích hoạt nó.
pdr

1
a project using an interpreted language, such as Python or Perl?

Trong trường hợp ngôn ngữ được giải thích, mọi thứ có thể bị đánh hoặc bỏ lỡ. Một số ngôn ngữ xen kẽ có trình biên dịch nhưng thường xuyên hơn không có khả năng không cần sử dụng chúng. Trong trường hợp đó, tôi thường chỉ quét mã cho cú pháp và phân tích lỗi thay cho việc biên dịch hoặc bỏ qua để chạy các bài kiểm tra trên mã.

xây dựng từ nguồn trên máy người dùng cuối?

Đối với tôi điều này có nghĩa là bạn có thể cung cấp một lệnh duy nhất mà người dùng cuối có thể chạy để có được phiên bản mới nhất của chương trình, biên dịch nó, định cấu hình và triển khai khi cần.

một ứng dụng có các phụ thuộc không thể được biên dịch và phân phối đơn giản, chẳng hạn như cơ sở dữ liệu trong RDBMS cục bộ cho máy của người dùng?

Chúng sẽ nằm trong phần thử nghiệm của tích hợp liên tục vì bạn có thể tự động phá hủy và xây dựng lại cơ sở dữ liệu để đảm bảo rằng các tập lệnh là chính xác và chương trình kiểm tra chính xác.


1

Những gì bạn đang thảo luận trong câu hỏi của bạn thực sự là 3 khái niệm khác nhau:

Tích hợp liên tục ở cốt lõi của nó là tạo ra những thay đổi nhỏ và thường xuyên đồng bộ hóa những thay đổi đó với "sự thật toàn cầu". Thay vì thực hiện kiểm tra và giữ nó trong một tuần, nhà phát triển nên làm việc với các nhiệm vụ có thể hoàn thành trong một ngày để mã của anh ta không bao giờ quá đồng bộ với kho lưu trữ chính.

Để đạt được điều này mà không gây đau đớn cho đội của anh ấy (tức là kiểm tra nguồn không xây dựng hoặc phá vỡ chức năng hiện có). Nhà phát triển phải xác minh rằng mã của anh ta không "phá vỡ bản dựng". Nếu được thực hiện thủ công, điều này sẽ bổ sung thêm chi phí cho quá trình phát triển (nghĩ về một dự án mất nhiều thời gian để xây dựng và / hoặc có nhiều phụ thuộc lẫn nhau trong đó việc thay đổi một dòng mã có thể tác động đến ứng dụng theo những cách không mong muốn).

Để giảm thiểu tình trạng này, chúng tôi sử dụng các kỹ thuật khác để loại bỏ chi phí này.

Chúng tôi sử dụng các bản dựng tự động để kiểm tra nguồn và xây dựng tùy chọn chạy các kiểm tra tự động để xác minh ứng dụng hoạt động như bình thường (bước này chỉ hữu ích như bộ kiểm tra).

Một bước tiếp theo phân phối liên tục giải quyết vấn đề của bạn với cơ sở dữ liệu và các mối quan tâm khác. Ý tưởng ở đây là cung cấp một số mức độ phiên bản cho cơ sở dữ liệu và các yếu tố khác của môi trường để chúng tôi có thể xác nhận càng nhanh càng tốt để ứng dụng hoạt động trong môi trường gần với sản xuất nhất có thể .


1
Điểm tuyệt vời ... thật tệ khi hầu hết mọi người không đọc xuống cuối chủ đề và bỏ phiếu.
hotshot309

0

"Xây dựng tự động" có nghĩa là bạn có thể chuyển từ kiểm soát nguồn sang gói có thể chuyển đổi với một hành động (có thể lập lịch biểu) (thường là tập lệnh shell hoặc tệp bó).

Chính xác điều gì tạo nên một bản dựng, trong bối cảnh này, phụ thuộc rất nhiều vào chính xác bạn đang vận chuyển, cách thức giao hàng và các bước cần thiết cho các phần khác nhau của ngăn xếp phát triển của bạn, nhưng trong mọi trường hợp, bạn bắt đầu với những gì trong kiểm soát nguồn và bạn kết thúc với một sản phẩm có thể chuyển đổi (hoặc thông báo lỗi và người quản lý dự án tức giận).

Đối với một dự án Python đơn giản, một bản dựng tự động có thể chỉ bao gồm hai bước - kiểm tra các nguồn và sao chép các tệp có liên quan vào các thư mục chính xác. Đối với các dự án phức tạp hơn, nó có thể liên quan đến những thứ như:

  • biên dịch, liên kết
  • chạy kiểm tra tự động
  • tạo gói cài đặt
  • cài đặt
  • sửa đổi cơ sở dữ liệu
  • tạo bản sao lưu (trong trường hợp bạn cần quay lại)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.