Thiết lập chu trình triển khai / xây dựng / CI cho các dự án PHP


200

Tôi là một nhà phát triển đơn độc hầu hết thời gian của tôi, làm việc trên một số dự án lớn, chủ yếu dựa trên PHP. Tôi muốn chuyên nghiệp hóa và tự động hóa cách xử lý các thay đổi đối với cơ sở mã và tạo quy trình Tích hợp liên tục để có thể chuyển đổi để làm việc trong một nhóm mà không cần phải thực hiện các thay đổi cơ bản.

Những gì tôi đang làm bây giờ là, tôi có một môi trường thử nghiệm cục bộ cho mọi dự án; Tôi sử dụng SVN cho từng dự án; các thay đổi được kiểm tra cục bộ và sau đó được chuyển sang phiên bản trực tuyến, thường là qua FTP. Tài liệu API được tạo thủ công từ mã nguồn; Các bài kiểm tra đơn vị là thứ tôi đang đi vào từ từ, và nó chưa phải là một phần của thói quen hàng ngày của tôi.

"Chu kỳ xây dựng" tôi đang hình dung sẽ làm như sau:

  • Một thay đổi được kiểm tra vào SVN sau khi đã được thử nghiệm cục bộ.

  • Tôi bắt đầu quá trình xây dựng. Bản sửa đổi SVN HEAD được kiểm tra, sửa đổi nếu cần và sẵn sàng để tải lên.

  • Tài liệu API được tạo tự động - nếu tôi chưa thiết lập chi tiết, sử dụng mẫu mặc định, quét toàn bộ cơ sở mã.

  • Bản sửa đổi mới được triển khai đến vị trí từ xa thông qua FTP (Bao gồm một số đổi tên thư mục, chỉnh sửa, nhập cơ sở dữ liệu và các lượt thích.) Đây là điều tôi đã rất thích phing , nhưng tôi mở cho các lựa chọn thay thế.

  • Các bài kiểm tra đơn vị cư trú tại một địa điểm được xác định trước được chạy. Tôi được thông báo về sự thất bại hoặc thành công của họ khi sử dụng E-Mail, RSS hoặc (tốt nhất là) đầu ra HTML mà tôi có thể lấy và đưa vào một trang web.

  • (tùy chọn) tệp văn bản "changelog" của người dùng cuối ở vị trí được xác định trước sẽ được cập nhật với một phần được xác định trước của thông báo cam kết ("Hiện tại có thể lọc cả hai" foo "và" bar " thời gian). Thông báo này không nhất thiết phải giống với thông điệp cam kết SVN, có thể chứa nhiều thông tin nội bộ hơn.

  • Những thứ như số liệu mã, kiểm tra kiểu mã, v.v. không phải là trọng tâm chính của tôi ngay bây giờ, nhưng về lâu dài, chắc chắn họ sẽ làm được. Các giải pháp mang đến sự vượt trội này được xem xét rất tử tế.

Tôi đang tìm kiếm

  • Phản hồi và kinh nghiệm từ những người đang hoặc đang ở trong tình huống tương tự và đã thực hiện thành công giải pháp cho việc này

  • Đặc biệt, hướng dẫn từng bước tốt và hướng dẫn về cách thiết lập tính năng này

  • Các giải pháp cung cấp càng nhiều tự động hóa càng tốt , ví dụ bằng cách tạo API bộ xương, các trường hợp thử nghiệm, v.v. cho mỗi dự án mới.

và cũng

  • Khuyến nghị sản phẩm . Những gì tôi biết cho đến nay là phing / ant để xây dựng và phpUnderControl hoặc Hudson cho phần báo cáo. Tôi thích tất cả những gì tôi có thể thấy, nhưng tất nhiên tôi không có kinh nghiệm chi tiết với họ.

Tôi bị ngập trong công việc, vì vậy tôi có thiên hướng mạnh mẽ đối với các giải pháp đơn giản. Mặt khác, nếu một tính năng bị thiếu, tôi sẽ khóc vì nó quá hạn chế. :) Giải pháp điểm và nhấp cũng được chào đón. Tôi cũng đề xuất các sản phẩm thương mại có thể làm việc với các dự án PHP.

Thiết lập của tôi

Tôi đang làm việc trên Windows cục bộ (chính xác là 7) và hầu hết các dự án máy khách đều chạy trên ngăn xếp LAMP, thường là trên lưu trữ chia sẻ (= không có SSH từ xa). Tôi đang tìm kiếm giải pháp mà tôi có thể chạy trong môi trường của riêng tôi. Tôi đã sẵn sàng để thiết lập một máy ảo Linux cho việc này, không vấn đề gì. Các giải pháp lưu trữ chỉ thú vị đối với tôi nếu chúng cung cấp tất cả các khía cạnh được mô tả hoặc đủ linh hoạt để tương tác với các phần khác của quy trình.

Tiền thưởng Tôi chấp nhận câu trả lời mà tôi cảm thấy sẽ cho tôi nhiều dặm nhất. Có rất nhiều đầu vào tuyệt vời ở đây, tôi ước tôi có thể chấp nhận nhiều hơn một câu trả lời. Cảm ơn mọi người!

Câu trả lời:


76

Tôi đã thông qua buildbot , CruiseControl.net , CruiseControlHudson . Mặc dù tôi thực sự thích CruiseControl *, nhưng nó quá rắc rối với các trường hợp phụ thuộc thực sự phức tạp. buildbot không dễ cài đặt, nhưng nó có một hào quang tốt đẹp (tôi cũng giống như trăn, vậy thôi). Nhưng hudson đã thắng ba người trước vì:

  1. Thật dễ dàng để thiết lập
  2. Thật dễ dàng để tùy chỉnh
  3. Nó trông tốt và có chức năng tổng quan đẹp
  4. Nó có các bản cập nhật điểm và nhấp, cho chính nó và tất cả các plugin đã cài đặt. Đây là một tính năng thực sự tốt, mà tôi đánh giá cao hơn và nhiều hơn nữa

Hãy cẩn thận: Tôi chỉ từng sử dụng linux làm cơ sở cho các máy chủ xây dựng được đề cập ở trên (CC.net chạy trên mono ), nhưng tất cả chúng nên - theo các tài liệu - chạy đa nền tảng.

Thiết lập máy chủ hudson

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

  • Java (1.5 sẽ phục vụ bạn tốt)
  • Đọc quyền truy cập vào máy chủ lật đổ (Tôi có một tài khoản riêng cho người dùng hudson)

Từ đây, nó chỉ là:

java -jar hudson.war

Điều này sẽ chạy một cá thể máy chủ nhỏ ngay trên bảng điều khiển của bạn và bạn sẽ có thể duyệt cài đặt tại http://localhost:8080, nếu bạn không có gì khác chạy trên cổng đó (bạn có thể chỉ định một cổng khác bằng cách chuyển --httpPort=ANOTHER_HTTP_PORTtùy chọn sang lệnh trên) và mọi thứ diễn ra tốt đẹp trong quá trình 'cài đặt'.

Nếu bạn đi đến thư mục plugin có sẵn ( http://localhost:8080/pluginManager/available), bạn sẽ tìm thấy các plugin để hỗ trợ các tác vụ được đề cập ở trên của bạn (hỗ trợ lật đổ được cài đặt theo mặc định).

Nếu điều đó khiến bạn thèm ăn, bạn nên cài đặt một máy chủ ứng dụng java, chẳng hạn như tomcat hoặc cầu cảng . Hướng dẫn cài đặt có sẵn cho tất cả các máy chủ ứng dụng chính

Cập nhật : Kohsuke Kawaguchi đã xây dựng trình cài đặt dịch vụ windows cho hudson

Thiết lập một dự án trong hudson

Các liên kết trong phần hướng dẫn sau đây giả sử một ví dụ đang chạy của hudson nằm ở http://localhost:8080

  1. Chọn Công việc mới ( http://localhost:8080/view/All/newJob) từ menu bên trái
  2. Đặt tên cho công việc và đánh dấu Build a free-style software projectvào danh sách
  3. Nhấn 'ok' sẽ đưa bạn đến trang cấu hình của công việc. Tất cả các tùy chọn có một dấu hỏi nhỏ bên cạnh chúng. Nhấn vào đây sẽ đưa ra một văn bản trợ giúp liên quan đến tùy chọn.
  4. Trong nhóm tùy chọn 'Quản lý mã nguồn', bạn sẽ sử dụng Subversion. Hudson chấp nhận cả truy cập url cũng như truy cập mô-đun cục bộ
  5. Trong nhóm tùy chọn 'Build Triggers', bạn sẽ sử dụng 'Poll SCM'. Cú pháp được sử dụng ở đây là của cron, do đó, việc bỏ phiếu lưu trữ lật đổ cứ sau 5 phút sẽ là*/5 * * * *
  6. Quá trình xây dựng dự án được chỉ định trong nhóm tùy chọn 'Xây dựng'. Nếu bạn đã có một tệp kiến ​​tạo với tất cả các mục tiêu bạn cần, bạn sẽ gặp may. Chỉ cần chọn 'Gọi kiến' và viết tên của mục tiêu. Nhóm tùy chọn hỗ trợ các lệnh maven và shell cũng như ngoài hộp, nhưng cũng có một plugin có sẵn cho phing .
  7. Đánh dấu các hành động xây dựng bổ sung trong 'Đăng hành động xây dựng', chẳng hạn như thông báo email hoặc lưu trữ các vật phẩm xây dựng.

Để thiết lập các quy trình mà hudson không có plugin, bạn có thể gọi chúng trực tiếp thông qua tập lệnh shell từ trong thiết lập bản dựng hoặc bạn có thể viết plugin của riêng mình

Cạm bẫy:

  • Nếu bạn có nó tạo ra các vật phẩm xây dựng, hãy nhớ để hudson dọn dẹp sau mỗi lần đều đặn.
  • Nếu bạn có hơn 20 dự án được thiết lập, hãy cân nhắc việc không hiển thị trạng thái xây dựng của chúng làm trang chính mặc định trên hudson

Chúc may mắn!


2
Tôi nghĩ rằng có một lỗi với cú pháp cron của bạn. Điều đó sẽ chạy vào phút thứ năm mỗi giờ. Nếu bạn muốn thăm dò ý kiến ​​repo cứ sau 5 phút, bạn sẽ cần sử dụng * / 5
Brian Wigginton

2
@BrianWigginton: bạn hoàn toàn đúng. Và tôi thậm chí đã cố gắng sửa bài đăng, nhưng tôi không thể lưu nó vì tôi có "tham chiếu đến tên máy chủ không hợp lệ", cụ thể là 'localhost'. Tôi hy vọng mọi người nhìn xuống đây để sửa chữa.
Steen

22

Thuật ngữ bạn đang tìm kiếm là "hội nhập liên tục."

Dưới đây là ví dụ về người sử dụng GIT + phpundercontrol: http://maff.ailoo.net/2009/09/continupt-integration-phpundercontrol-git/

CruiseControl (là máy chủ CI), có thể sử dụng SVN / GIT được lưu trữ làm nguồn. Vì vậy, bạn thậm chí có thể sử dụng nó với GitHub hoặc Beanstalk hoặc một cái gì đó khác.

Sau đó, bạn có thể tích hợp nó với các loại phần mềm sau:

  • PHPUnit
  • mã php
  • phpdocumentor
  • PHP
  • PHPXref
  • Yasca
  • Vân vân.

Bạn cũng có thể dùng thử CI được lưu trữ này: http://www.php-ci.net/hosting/create-project

Mặc dù vậy, hãy nhớ rằng những công cụ đó cần hỗ trợ tùy chỉnh nếu bạn tự tích hợp chúng.

Bạn cũng đã nghĩ về quản lý dự án và quản lý bản vá?

Bạn có thể sử dụng Redmine để quản lý dự án. Nó đã tích hợp hỗ trợ tích hợp liên tục, nhưng chỉ là phía máy khách (không phải là máy chủ CI).

Hãy thử sử dụng SVN / GIT / v.v. giải pháp, bởi vì họ sẽ bao gồm các bản sao lưu của bạn và giữ cho máy chủ của họ chạy, vì vậy bạn có thể tập trung vào phát triển.

Để xem hướng dẫn về cách thiết lập Hudson, hãy xem: http://toptopic.wordpress.com/2009/02/26/php-and-hudson/


2
Cảm ơn các liên kết. Các sản phẩm tôi quen thuộc, những gì tôi hy vọng là các hướng dẫn theo phong cách hướng dẫn giống như các sản phẩm bạn cung cấp.
Pekka

Xin chào, kể từ tháng 10 năm 2012, php-ci.net đã ngừng hoạt động hay đã rút khỏi dịch vụ? Tôi dường như không thể kết nối với địa chỉ đó, tôi cũng không thể tìm thấy thông tin mới từ năm ngoái.
Ryan

@Ryan, tôi không biết chuyện gì xảy ra. Tôi biết, bạn có thể thử người khác. Có lẽ bạn có thể thử: CircleCI hoặc bạn có thể kiểm tra chủ đề này: Tích hợp liên tục cho PHP?
Michiel

@Ryan, không, nó không bị hỏng, tôi đã sử dụng nó được một thời gian rồi. Họ đã chuyển đến phptesting.org
omrakhur

6

Tôi sử dụng máy chủ tích hợp liên tục Tre của Atlassian cho dự án PHP chính của mình (cùng với các sản phẩm khác của họ như fisheye (duyệt kho lưu trữ), jira (theo dõi vấn đề) và clover (bảo hiểm mã)).

Nó hỗ trợ SVN và hiện hỗ trợ Git và nó có giao diện người dùng tuyệt vời. Nó có sẵn cho linux, windows và mac và có thể chạy độc lập trên máy chủ tomcat của riêng nó, rất phù hợp với những người (như tôi), những người không muốn mất nhiều ngày để thiết lập công cụ của họ). Mặc dù nó có thể trông đắt tiền, bản thân tôi là một nhà phát triển đơn độc, tôi đã mua giấy phép bộ khởi động với giá 10 đô la (10 đô la bằng phần mềm). Điều này là tuyệt vời cho các đội nhỏ và nó là đáng xem.


Làm thế nào bạn có thể cấu hình tre để hỗ trợ phing? Tôi hiện đang sử dụng ant, nhưng có vẻ như phing thích hợp hơn để sử dụng cho depooyment php. Cảm ơn
Vincent

5

PHPTesting PHPCI Đây là máy chủ tích hợp liên tục, đẹp mắt được xây dựng bằng php.

Thêm vào đó, nguồn mở và miễn phí. :)

nó có số lượng plugin ..

PHPCI bao gồm các plugin tích hợp cho:

  • Atoum
  • Hành vi
  • Lửa trại
  • Mật mã
  • Nhà soạn nhạc
  • E-mail
  • Tiếng càu nhàu
  • IRC
  • PHP
  • MySQL
  • Bảo vệ
  • PostgreSQL
  • Mã sniffer PHP
  • Trình sao chép / dán PHP
  • Thông số kỹ thuật PHP
  • Đơn vị PHP
  • Lệnh Shell
  • Tar / Zip

Mặc dù tôi thích PHPCI nhưng tôi không khuyên bạn nên dùng nó. Đó là lỗi vô cùng và không đáng tin cậy. Thật đáng buồn khi chức năng cơ bản phổ biến không được kiểm tra đúng đơn vị nên điều cơ bản như thêm URL dự án là khó khăn mà không gây rối.
Tek

@Tek chiến lược CI của bạn cho PHP là gì?
omrakhur

1
@omrakhur Tôi không may mắc kẹt với PHPCI. Tất cả các phần mềm khác cồng kềnh hơn rất nhiều và mất rất nhiều để thiết lập. Mọi thứ đều có ưu và nhược điểm. Bạn chỉ cần đi với những gì tốt nhất cho bạn.
Tek

3

Tôi chủ yếu là một quản trị viên hệ thống nhưng đôi khi tôi cũng viết mã PHP. Là một dự án phụ, tôi đã tạo ra một số tập lệnh sẽ giúp đơn giản và không gây đau đớn khi thiết lập môi trường PHP CI đầy đủ bằng cách sử dụng Jenkins. Nó cũng chạy một dự án mẫu cho bạn để bạn có thể xem từng bước xây dựng được cấu hình như thế nào.

Nếu bạn muốn dùng thử, tất cả những gì bạn cần là hộp Debian / Ubuntu và quyền truy cập shell.

http://yauh.de/articles/379/setting-up-a-ci-envir-for-php-projects-USE-jenkins-ci

Cập nhật Để thêm một số nội dung vào câu trả lời của tôi:

Bạn có thể chỉ cần thiết lập một Jenkins CI cho PHP bằng Ansible. Kể từ v1.4, nó hỗ trợ các vai trò mà bạn có thể tải xuống từ trang cộng đồng galaxy.ansibleworks.com của họ và nó sẽ giúp bạn rất nhiều. Nó được gọi là jenkins-php .


3

Tôi sẽ đề nghị sử dụng Jenkins http://jenkins-ci.org/ nó miễn phí và nó là nguồn mở.

Thật dễ dàng để thiết lập, hoạt động trên nhiều nền tảng và tích hợp tốt với các công cụ tích hợp liên tục khác như SonarQube (+ SQUALE) để đo lường nợ kỹ thuật và Thucydides để thử nghiệm tự động hóa.

Tôi rất khuyến nghị sử dụng GIT hoặc GIT Hub để kiểm soát phiên bản thay vì SVN. Theo quan điểm của tôi, nó chỉ là một hệ thống kiểm soát phiên bản tốt hơn sẽ giúp bạn mở rộng quy mô phát triển sau này.

Vì bạn đang làm việc chủ yếu với dự án PHP, nên có một số công cụ khác bạn có thể sử dụng.

PHPUnit - Để thử nghiệm đơn vị

PHP CodeSniffer - Kiểm tra các tiêu chuẩn mã hóa

PHP Depend - Hiển thị các phụ thuộc mã PHP của bạn

XDEBUG - Để kiểm tra hiệu suất

Tất cả các công cụ này và được kích hoạt với một công việc Jenkins và giúp với chất lượng và hiệu suất mã của bạn.

Chúc may mắn và tận hưởng!


3

Tôi không sử dụng nhiều sản phẩm, hoặc thậm chí các loại sản phẩm mà bạn sử dụng, nhưng tôi sẽ cung cấp cho bạn kinh nghiệm của tôi.

Tôi chạy một môi trường TEST song song với môi trường SẢN XUẤT của tôi. Tôi không có thử nghiệm địa phương mỗi se. Nếu quá khó để đưa mọi thứ vào môi trường KIỂM TRA thực sự, thì tôi sẽ sửa quy trình xây dựng của mình. Tôi không thấy điểm trong thử nghiệm cục bộ, vì môi trường là khác nhau. CẬP NHẬT: Điều duy nhất tôi làm cục bộ là chạy "php -l" trước khi tôi tải lên bất cứ thứ gì. Dừng những sai lầm ngu ngốc.

Quá trình xây dựng hoạt động với bất cứ điều gì trong không gian làm việc hiện tại, bao gồm mã không được cam kết. Đây không phải là tách trà của mọi người, nhưng tôi sẽ thường xuyên KIỂM TRA. Tất cả mọi thứ được cam kết trước khi đi đến SẢN XUẤT.

Một phần trong quá trình xây dựng của tôi (tương tự như của bạn) tạo ra hai tệp META. Một cái chứa 100 thay đổi (thường) cuối cùng và cũng cho tôi số thay đổi hiện tại. Hiển thị cho tôi những thay đổi được cài đặt. Cái kia chứa CLIENTSPEC (theo thuật ngữ Perforce) cho tôi biết chính xác những nhánh nào được sử dụng trong bản dựng này. Cùng nhau những thứ này cho tôi bản dựng có thể tái tạo.

Tôi không xây dựng thẳng đến môi trường đích, mà đến khu vực tổ chức trên máy chủ. Tôi sử dụng SSH để điều này có ý nghĩa. Điều này cho tôi một vài lợi thế. Quan trọng nhất là nó tránh chết một nửa thông qua một tải lên lớn. Nó cũng cho tôi một nơi để lưu trữ các tệp META và tất cả các tệp xây dựng được lưu trữ tự động (vì vậy tôi có thể quay lại bất kỳ bản dựng nào). Kịch bản cũng ghi nhật ký cập nhật (vì vậy có một mục trong luồng nhật ký và tôi có thể thấy trước và sau-) và đá tất cả các trình tiện ích (Tôi sử dụng daemontools nên "svc -t"). Tất cả những thứ này tốt hơn trên máy mục tiêu.

Một vấn đề khác là thay đổi DB. Tôi giữ một tập lệnh chính của lược đồ DB, mà tôi cập nhật mỗi khi lược đồ thay đổi. Mỗi thay đổi cũng đi vào một tập lệnh thay đổi, được tải lên cùng với bản dựng lên khu vực tổ chức. Kịch bản được chạy như một phần của tập lệnh cài đặt.


Cảm ơn Phil đầu vào của bạn, đây là một thiết lập rất, rất thú vị và tôi nghĩ rằng tôi có thể sử dụng các phần của điều này. Tuy nhiên, trong trường hợp của tôi, tôi sẽ thường không có quyền truy cập SSH vào đầu từ xa, vì vậy tôi cần rất nhiều "trí thông minh" cục bộ, đó là lý do tại sao tôi nghĩ rằng tôi sẽ cần một sản phẩm CI như Hudson.
Pekka

2

Gần đây tôi đã bắt đầu quy trình tương tự và đang sử dụng Beanstalk cho svn hosting.

Có hai tính năng tiện lợi trong các tài khoản trả phí (tôi nghĩ bắt đầu từ $ 15pm):

  • triển khai cho phép người dùng tạo các mục tiêu ftp cho các máy chủ dàn dựng và sản xuất, có thể được triển khai chỉ với một nút bấm (bao gồm chỉ định sửa đổi và chi nhánh)
  • webhooks cho phép người dùng thiết lập một url được gọi trên mỗi cam kết / triển khai, đi qua những thứ như số sửa đổi, mô tả và người dùng. Điều này có thể được sử dụng để cập nhật tài liệu, chạy thử nghiệm đơn vị và cập nhật thay đổi.

Tôi chắc chắn có các máy chủ svn được lưu trữ hoặc tự lưu trữ khác với hai tính năng này, nhưng beanstalk là máy chủ tôi có kinh nghiệm và nó hoạt động rất, rất tốt

Ngoài ra còn có một API mà tôi tưởng tượng có thể được sử dụng để tích hợp triển khai hơn nữa vào quy trình của bạn.


Chúc mừng @adam. Tôi đang tìm kiếm không nhiều cho các dịch vụ lưu trữ cho việc này, vì tôi sợ chúng sẽ luôn bị giới hạn cho những gì tôi cần. Nhưng những gì bạn nói nghe có vẻ thú vị và API có thể là điểm kết nối cho phần còn lại. Tôi sẽ xem xét điều này.
Pekka

Đừng lo lắng, nghĩ rằng bạn có thể nói rằng. Nó phù hợp với tôi bây giờ, vì tôi chưa hoàn toàn có svn (và tôi là nhóm một người), ngoài ra họ cung cấp xuất khẩu repo đầy đủ nếu bạn muốn di chuyển.
Adam Hopkinson

2

Hãy xem xét fazend.com , một nền tảng CI được lưu trữ miễn phí, tự động hóa các quy trình cài đặt và cấu hình. Bạn không cần thiết lập kiểm soát phiên bản, theo dõi lỗi, máy chủ CI, môi trường thử nghiệm, v.v. Mọi thứ đều được thực hiện theo yêu cầu.


Mmm, điều này có vẻ rất thú vị! Nhưng làm thế nào để họ tồn tại? Xem như mọi thứ đều miễn phí? Làm thế nào để họ trả tiền cho máy chủ và phí E3?
Pekka

@Pekka Dự án này được tài trợ bởi một công ty phát triển phần mềm, đó là lý do tại sao dịch vụ này miễn phí
yegor256
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.