PHP 프로젝트를위한 배포 / 빌드 / CI주기 설정


200

저는 대부분의 시간에 고독한 개발자이며 주로 PHP 기반의 많은 대규모 프로젝트를 수행하고 있습니다. 코드베이스의 변경 사항을 처리하는 방법을 전문화하고 자동화하고 근본적인 변경없이 팀에서 작업 할 수있는 지속적인 통합 프로세스를 만들고 싶습니다.

내가 지금하고있는 일은 모든 프로젝트에 대해 로컬 테스트 환경이 있다는 것입니다. 각 프로젝트마다 SVN을 사용합니다. 변경 사항은 로컬에서 테스트 한 다음 일반적으로 FTP를 통해 온라인 버전으로 전송됩니다. API 문서는 소스 코드에서 수동으로 생성됩니다. 단위 테스트는 느리게 진행되고 있으며 아직 일상적인 일이 아닙니다.

내가 계획하고있는 "빌드주기"는 다음을 수행합니다.

  • 로컬에서 테스트 한 후 변경 세트가 SVN에 체크인됩니다.

  • 빌드 프로세스를 시작합니다. SVN HEAD 개정판이 체크 아웃되고 필요한 경우 수정되며 업로드 준비가되었습니다.

  • API 문서는 자동으로 생성됩니다. 기본 템플릿을 사용하여 아직 자세히 설정하지 않은 경우 전체 코드베이스를 스캔합니다.

  • 새로운 개정판은 FTP를 통해 원격 위치에 배포됩니다 (일부 디렉토리 이름 바꾸기, chmodding, 데이터베이스 가져 오기 등 포함). 이것은 이미 phing 을 매우 좋아 하지만 대안을 위해 열려 있습니다.

  • 사전 정의 된 위치에있는 단위 테스트가 실행됩니다. 전자 메일, RSS 또는 웹 페이지에 넣을 수있는 HTML 출력 (바람직하게는)을 사용하여 실패 또는 성공에 대한 정보를 받았습니다.

  • (선택 사항) 사전 정의 된 위치의 최종 사용자 "changelog"텍스트 파일이 커밋 메시지의 사전 정의 된 부분으로 업데이트됩니다 ( "이제"foo "와"bar "를 모두 동시에 필터링 할 수 있음) 이 메시지는 SVN commit 메시지와 반드시 같을 필요는 없으며, 여기에는 아마도 더 많은 내부 정보가 포함되어있을 것입니다.

  • 코드 메트릭스, 코드 스타일 검사 등과 같은 것들이 현재 제 주요 초점은 아니지만 장기적으로는 확실합니다. 이 즉시 사용 가능한 솔루션은 매우 친절합니다.

내가 찾고 있어요

  • 비슷한 상황에 있거나 비슷한 상황에있는 사람들의 피드백과 경험에 대한 솔루션을 성공적으로 구현했습니다.

  • 특히, 단계별 자습서 및 이를 설정하는 방법에 대한 연습

  • 예를 들어 각각의 새 프로젝트에 대한 스켈레톤 API, 테스트 케이스 등을 작성하여 최대한 많은 자동화 를 제공하는 솔루션 .

그리고 또한

  • 제품 권장 사항 . 내가 지금까지 아는 것은 빌드를위한 phing / ant ,보고 부분을위한 phpUnderControl 또는 Hudson 입니다. 나는 그들이 볼 수있는 한 그들을 모두 좋아하지만, 물론 그들에 대한 자세한 경험은 없다.

나는 일로 늪에 빠졌 으므로 간단한 해결책에 대한 강한 성향을 가지고 있습니다. 반면에 기능이 누락 된 경우 기능이 너무 제한되어 있습니다. :) 포인트 앤 클릭 솔루션도 환영합니다. 또한 PHP 프로젝트와 함께 사용할 수있는 상용 제품 권장 사항도 있습니다.

내 설정

나는 Windows에서 로컬로 (정확히 말하자면 7) 일하고 있으며 대부분의 클라이언트 프로젝트는 LAMP 스택에서 실행되며 종종 공유 호스팅 (= 원격 SSH 없음)에서 실행됩니다. 내 환경에서 실행할 수있는 솔루션을 찾고 있습니다. 이를 위해 Linux VM을 설정할 준비가되었습니다. 문제 없습니다. 호스팅 솔루션은 설명 된 모든 측면을 제공하거나 프로세스의 다른 부분과 상호 작용할 수있을 정도로 융통성이있는 경우에만 유용합니다.

현상금 나는 가장 많은 마일리지를 줄 것이라고 생각하는 대답을 받아들이고 있습니다. 여기에 훌륭한 의견이 많이 있습니다. 하나 이상의 답변을 받아 들일 수 있기를 바랍니다. 모두 감사합니다!

답변:


76

나는 buildbot , CruiseControl.net , CruiseControlHudson겪었습니다 . 내가 CruiseControl *을 정말로 좋아했지만, 복잡한 의존 사례가 너무 번거로 웠습니다. buildbot은 설정하기 쉽지 않지만 멋진 분위기가 있습니다 (파이썬을 좋아하는 것이 전부입니다). 그러나 허드슨은 다음과 같은 이유로 이전 세 가지를 이겼습니다.

  1. 설정하기 쉽습니다.
  2. 쉽게 사용자 정의 할 수 있습니다
  3. 좋아 보이고 개요 기능이 훌륭합니다.
  4. 자체 및 설치된 모든 플러그인에 대한 포인트 앤 클릭 업데이트가 있습니다. 이것은 정말 좋은 기능입니다. 점점 더 감사합니다.

경고 : 위에서 언급 한 빌드 서버 (CC.net은 모노에서 실행 됨 )의 기본으로 Linux를 사용 했지만 문서에 따르면 크로스 플랫폼을 실행해야합니다.

허드슨 서버 설정

전제 조건 :

  • Java (1.5는 잘 작동합니다)
  • Subversion 서버에 대한 읽기 권한 (허드슨 사용자를위한 별도의 계정이 있습니다)

여기서부터는 다음과 같습니다.

java -jar hudson.war

이렇게하면 콘솔에서 작은 서버 인스턴스가 바로 http://localhost:8080실행되므로 해당 포트에서 실행중인 다른 항목이없는 경우에 설치를 찾아 볼 수 있어야합니다 ( --httpPort=ANOTHER_HTTP_PORT옵션을 위의 명령) 및 모든 것이 '설치'프로세스에서 잘 진행되었습니다.

사용 가능한 플러그인 디렉토리 ( http://localhost:8080/pluginManager/available)로 이동하면 위에서 언급 한 작업을 지원하기위한 플러그인이 있습니다 (기본적으로 서브 버전 지원이 설치됨).

그것이 식욕을 자극하면 tomcat 또는 jetty 와 같은 Java 응용 프로그램 서버를 설치해야합니다 . 모든 주요 응용 프로그램 서버에 대해 설치 지침 을 사용할 수 있습니다

업데이트 : Kawaguchi Kohsuke 는 hudson 용 Windows 서비스 설치 프로그램 을 구성했습니다.

허드슨에서 프로젝트 설정

다음 연습의 링크는 실행중인 hudson 인스턴스가 있다고 가정합니다. http://localhost:8080

  1. http://localhost:8080/view/All/newJob왼쪽 메뉴에서 새 작업 ( )을 선택하십시오.
  2. 작업에 이름을 지정하고 Build a free-style software project목록을 확인하십시오.
  3. '확인'을 누르면 작업의 구성 페이지로 이동합니다. 모든 옵션에는 그 외에 작은 물음표가 있습니다. 이것을 누르면 옵션에 관한 도움말 텍스트가 나타납니다.
  4. 옵션 그룹 '소스 코드 관리'에서 Subversion을 사용합니다. Hudson은 URL 액세스와 로컬 모듈 액세스를 모두 허용합니다.
  5. 옵션 그룹 'Build Triggers'에서 'Poll SCM'을 사용합니다. 여기서 사용되는 구문은 cron의 구문이므로 5 분마다 서브 버전 저장소를 폴링하는 것은*/5 * * * *
  6. 프로젝트 빌드 프로세스는 옵션 그룹 '빌드'에서 지정됩니다. 필요한 모든 대상이 포함 된 개미 빌드 파일이 이미 있다면 운이 좋을 것입니다. '개미 호출'을 선택하고 대상 이름을 작성하십시오. 옵션 그룹은 기본적으로 maven 및 shell 명령을 지원하지만 phing 용 플러그인도 있습니다 .
  7. 이메일 알림 또는 빌드 아티팩트 아카이브와 같은 '빌드 빌드 조치'에서 추가 빌드 조치를 선택하십시오.

hudson에 플러그인이없는 프로세스를 설정하려면 빌드 설정 내에서 쉘 스크립트를 통해 직접 호출하거나 자체 플러그인을 작성할 수 있습니다

함정 :

  • 빌드 아티팩트를 생성하는 경우 정기적으로 허드슨을 정리해야합니다.
  • 20 개가 넘는 프로젝트를 설정 한 경우, 빌드 상태를 hudson의 기본 기본 페이지로 표시 하지 않는 것이 좋습니다

행운을 빕니다!


2
cron 구문에 오류가 있다고 생각합니다. 매시간 5 분마다 실행됩니다. 당신이 REPO 5 분마다 폴링하고 싶었다면 당신은 * / 5 사용해야합니다
브라이언 위긴턴

2
@BrianWigginton : 당신은 완전히 옳습니다. 그리고 게시물을 수정하려고했지만 "잘못된 호스트 이름", 즉 'localhost'에 대한 참조가 있기 때문에 저장할 수 없습니다. 나는 사람들이 수정을 위해 여기를 내려다보기를 바랍니다.
Steen

22

찾고있는 용어는 "연속 통합"입니다.

다음은 GIT + phpundercontrol을 사용하는 사람의 예입니다. http://maff.ailoo.net/2009/09/continuous-integration-phpundercontrol-git/

CruiseControl (CI 서버)은 호스트 된 SVN / GIT를 소스로 사용할 수 있습니다. 따라서 GitHub 또는 Beanstalk 또는 다른 것과 함께 사용할 수도 있습니다.

그런 다음이를 다음 종류의 소프트웨어와 통합 할 수 있습니다.

  • PHPUnit
  • PHP 코드 스니퍼
  • PHP 문서
  • PHP GCOV
  • PHPXref
  • 야 스카
  • 기타

이 호스팅 된 CI를 사용해 볼 수도 있습니다 : http://www.php-ci.net/hosting/create-project

그러나 이러한 도구를 직접 통합하는 경우 해당 도구에 대한 사용자 지정 지원이 필요합니다.

프로젝트 관리 및 패치 관리에 대해서도 생각해 보셨습니까?

프로젝트 관리에 Redmine을 사용할 수 있습니다. 지속적인 통합 지원을 제공하지만 CI 서버가 아닌 클라이언트 측으로 만 지원됩니다.

호스팅 된 SVN / GIT / etc를 사용해보십시오. 솔루션은 백업을 커버하고 서버를 계속 실행하므로 개발에 집중할 수 있습니다.

Hudson 설정 방법에 대한 자습서는 http://toptopic.wordpress.com/2009/02/26/php-and-hudson/을 참조하십시오.


2
링크 주셔서 감사합니다. 내가 잘 알고있는 제품은 내가 제공하는 것과 같은 자습서 스타일 연습입니다.
Pekka

안녕하세요, 2012 년 10 월 현재 php-ci.net이 다운되었거나 이미 서비스에서 풀려 났습니까? 해당 주소에 연결할 수 없거나 작년에 새로운 정보를 찾을 수 없습니다.
Ryan

@Ryan, 무슨 일이 있었는지 모르겠습니다. 나는 당신이 다른 사람들을 시도 할 수 있다는 것을 알고 있습니다. : 어쩌면 당신은 시도 할 수 CircleCI를 하거나이 주제 확인할 수 있습니다 : PHP를위한 호스팅 지속적인 통합을?
Michiel

@ 라이언, 아니, 다운되지 않았습니다, 나는 잠시 동안 그것을 사용하고 있습니다. 그들은 phptesting.org로 이동
omrakhur

6

Atlassian의 Bamboo 연속 통합 서버를 메인 PHP 프로젝트에 사용합니다 ( fisheye (리포지토리 탐색), jira (문제 추적기) 및 클로버 (코드 적용 범위) 와 같은 다른 제품과 함께 ).

SVN을 지원하고 Git을 지원하며 훌륭한 사용자 인터페이스를 제공합니다. Linux, Windows 및 Mac에서 사용할 수 있으며 자체 Tomcat 서버에서 독립 실행 형으로 실행할 수 있습니다 (도구를 설정하는 데 며칠이 걸리지 않는 사람들). 비록 고가 인 것처럼 보이지만 혼자 개발자 인 나는 스타터 키트 라이센스를 10 $ (소프트웨어에 의해 10 $)로 구입했습니다. 소규모 팀에 적합하며 살펴볼 가치가 있습니다.


phing을 지원하도록 대나무를 어떻게 구성 할 수 있습니까? 나는 현재 개미를 사용하고 있지만, phing은 PHP depooyment에 사용하기에 더 적합한 것 같습니다. 감사합니다
Vincent

5

PHPTesting PHPCI PHP에 내장 된 훌륭하고 지속적인 통합 서버입니다.

또한 무료 및 오픈 소스입니다. :)

많은 플러그인이 있습니다 ..

PHPCI에는 다음을위한 통합 플러그인이 포함되어 있습니다.

  • 아톰
  • Behat
  • 캠프 불
  • 인식
  • 작곡가
  • 이메일
  • 꿀꿀 거리는 소리
  • IRC
  • PHP
  • 보풀
  • MySQL
  • PDepend
  • PostgreSQL
  • PHP 코드 스니퍼
  • PHP 복사 / 붙여 넣기 탐지기
  • PHP 사양
  • PHP 단위
  • 쉘 명령
  • 타르 / 우편

PHPCI가 마음에 들지만 권장하지 않습니다. 믿을 수 없을 정도로 버그가 많고 신뢰할 수 없습니다. 일반적인 기본 기능이 제대로 단위 테스트되지 않아서 프로젝트 URL 추가와 같은 기본 작업이 엉망이되지 않는 것이 유감입니다.
Tek

@Tek PHP의 CI 전략은 무엇입니까?
omrakhur

1
@omrakhur 불행히도 PHPCI에 붙어 있습니다. 다른 모든 소프트웨어는 훨씬 부피가 커서 설정하는 데 많은 시간이 걸립니다. 모든 것이 장단점이 있습니다. 당신은 당신에게 가장 잘 맞는 것과 함께 가야합니다.
Tek

3

나는 주로 시스템 관리자이지만 때로는 PHP도 코딩합니다. 사이드 프로젝트로 Jenkins를 사용하여 PHP CI 환경을 완전하고 간단하게 설정하는 스크립트를 만들었습니다. 또한 샘플 프로젝트를 실행하여 각 빌드 단계가 어떻게 구성되어 있는지 확인할 수 있습니다.

시도해보고 싶다면 데비안 / 우분투 상자와 쉘 액세스 만 있으면됩니다.

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

업데이트 내 답변에 내용을 추가하려면 :

Ansible을 사용하여 PHP 용 Jenkins CI를 간단하게 설정할 수 있습니다. v1.4부터는 galaxy.ansibleworks.com 커뮤니티 사이트에서 다운로드 할 수있는 역할을 지원하며 많은 노력을 기울일 것입니다. jenkins-php 라고 합니다.


3

Jenkins http://jenkins-ci.org/를 사용하는 것이 좋습니다. 무료이며 오픈 소스입니다.

설정이 간단하고 여러 플랫폼에서 작동하며 SonarQube (+ SQUALE)와 같은 다른 연속 통합 도구와 잘 통합되어 자동화 테스트를위한 기술 부채 및 Thucydides를 측정합니다.

SVN 대신 버전 제어에 GIT 또는 GIT Hub를 사용하는 것이 좋습니다. 내 관점에서 볼 때 그것은 나중에 개발 노력을 확장하는 데 도움이되는 더 나은 버전 제어 시스템입니다.

주로 PHP 프로젝트로 작업하기 때문에 사용할 수있는 다른 도구가 있습니다.

PHPUnit-단위 테스트 용

PHP CodeSniffer-코딩 표준 확인

PHP 의존-PHP 코드 의존성을 보여줍니다

XDEBUG-성능 테스트 용

이러한 모든 도구는 Jenkins 작업으로 시작되며 코드의 품질과 성능을 도와줍니다.

행운을 빌어 요!


3

나는 당신이 사용하는 많은 제품들, 심지어 당신이 사용하는 제품들조차 사용하지 않지만, 나는 당신에게 내 경험을 줄 것입니다.

PROD 환경과 병렬로 테스트 환경을 실행합니다. 로컬 테스트 자체는 없습니다. 실제 테스트 환경에 설치하기가 너무 어렵다면 빌드 프로세스를 수정합니다. 환경이 다르기 때문에 로컬 테스트의 요점을 보지 못했습니다. 업데이트 : 내가 로컬로하는 유일한 것은 아무것도 업로드하기 전에 "php -l"을 실행하는 것입니다. 바보 같은 실수를 막습니다.

빌드 프로세스는 커밋되지 않은 코드를 포함하여 현재 작업 공간에있는 모든 작업에서 작동합니다. 이것은 모든 사람의 차는 아니지만 테스트를 자주합니다. PROD에 가기 전에 모든 것이 커밋됩니다.

내 빌드 프로세스의 일부 (귀하의 것과 유사)는 두 개의 META 파일을 만듭니다. 하나는 마지막 (일반적으로) 100 개의 변경 사항을 포함하고 현재 변경 목록 번호를 제공합니다. 어떤 변경 사항이 설치되었는지 보여줍니다. 다른 하나에는 CLIENTSPEC (Perforce 용어로)이 포함되어 있으며이 빌드에서 사용 된 분기를 정확하게 보여줍니다. 이것들은 함께 재현 가능한 빌드를 제공합니다.

대상 환경을 직접 구축하지 않고 서버의 준비 영역을 구축합니다. SSH를 사용하므로 이것이 의미가 있습니다. 이것은 나에게 몇 가지 장점을 제공합니다. 가장 중요한 것은 큰 업로드를 통해 반쯤 죽지 않도록합니다. 또한 META 파일을 저장할 장소를 제공하고 모든 빌드 파일이 자동으로 아카이브되므로 모든 빌드로 바로 돌아갈 수 있습니다. 스크립트는 또한 업데이트를 기록하므로 (로그 스트림에 항목이 있고 사전 및 사후를 볼 수 있음) 모든 데몬을 시작합니다 (데몬 도구를 사용하여 "svc -t"). 이 모든 것이 대상 컴퓨터에서 더 좋습니다.

다른 문제는 DB 변경입니다. DB 스키마의 마스터 스크립트를 유지하며 스키마가 변경 될 때마다 업데이트됩니다. 각 변경 사항은 changes.sql 스크립트로 이동하며 스테이징 영역에 빌드와 함께 업로드됩니다. 스크립트는 설치 스크립트의 일부로 실행됩니다.


귀하의 의견을 보내 주셔서 감사합니다. 이것은 매우 흥미로운 설정이며이 부분을 사용할 수 있다고 생각합니다. 그러나 필자의 경우 원격 엔드에 대한 SSH 액세스 권한이없는 경우가 많으므로 로컬로 많은 "지능"이 필요하므로 Hudson과 같은 CI 제품이 필요할 것입니다.
Pekka

2

최근에 같은 종류의 프로세스를 시작했으며 svs 호스팅에 Beanstalk 를 사용 하고 있습니다.

유료 계정에는 두 가지 멋진 기능이 있습니다 (오후 15 시부 터 시작).

  • 배치를 통해 사용자는 스테이징 및 프로덕션 서버에 대한 ftp 대상을 작성할 수 있으며 버튼을 클릭하여 배치 할 수 있습니다 (개정 및 분기 포함)
  • webhook을 사용하면 각 커밋 / 배포에서 호출되는 URL을 설정하여 개정 번호, 설명 및 사용자와 같은 항목을 전달할 수 있습니다. 이것은 문서를 업데이트하고, 단위 테스트를 실행하고, 변경 로그를 업데이트하는 데 사용될 수 있습니다.

이 두 가지 기능을 가진 다른 호스팅 또는 자체 호스팅 svn 서버가 있다고 확신하지만 beantalk는 내가 경험 한 것으로 매우 잘 작동합니다.

프로세스에 배포를 통합하는 데 사용할 수있는 API도 있습니다.


건배 @ 아담. 나는 그들이 필요한 것에 대해 항상 너무 제한적이라고 두려워하기 때문에 호스팅 서비스를별로 찾고 있지 않습니다. 그러나 당신이 말하는 것은 흥미로울 것입니다. API는 나머지 부분의 연결점 일 수 있습니다. 이것에 대해 살펴 보겠습니다.
Pekka

걱정하지 마세요. 나는 svn (그리고 나는 1 인 팀) 인 내 머리를 얻지 못했기 때문에 나에게 적합하며, 이동하려는 경우 전체 리포지토리 내보내기를 제공합니다.
Adam Hopkinson

2

구성 및 설치 절차를 자동화하는 무료 호스팅 CI 플랫폼 인 fazend.com을 고려하십시오 . 버전 관리, 버그 추적, CI 서버, 테스트 환경 등을 설정할 필요가 없습니다. 모든 것이 주문형으로 이루어집니다.


음, 이것은 매우 흥미로워 보입니다! 그러나 그들은 어떻게 살아남습니까? 모든 것이 무료로 보입니까? 서버 비용과 E3 요금은 어떻게 지불합니까?
Pekka

@Pekka이 프로젝트는 소프트웨어 개발 회사의 후원으로 서비스가 무료 인 이유입니다
yegor256
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.