2009-09-17 7 views
9

Joelthink highly of daily builds 인 것처럼 보입니다. 전통적인 컴파일 된 응용 프로그램에 대해서는 필자의 정당성을 확실히 볼 수 있지만이 문제는 웹 개발과 어떻게 평행합니까? 그렇지 않습니다.매일 웹 앱을 만들 수있는 방법이 있습니까?

제가 묻는 프로젝트에 대한 설명 - 장고 (Python) 웹 응용 프로그램을 작성하는 개발자가 2 명 있습니다. 우리는 1 svn 저장소가 있습니다. 각 개발자는 로컬에서 실행되는 MySQL의 체크 아웃과 그 자신의 복사본을 유지 관리합니다 (Django에 익숙하지 않은 경우 ASP 응용 프로그램을 Visual Studio 내에서 실행할 수있는 방법과 같이 자체 테스트 서버가 번들로 제공됩니다). 개발 및 테스트는 로컬에서 수행 된 다음 저장소로 다시 커밋됩니다. 웹 사이트의 실제 작업 사본은 SVN 체크 아웃입니다 (SVN 내보내기에 대해 알고 있으며 너무 오래 걸림). 가장 가까운 '빌드'는 작업 복사본에서 SVN 업데이트를 실행하고 django 비트 ('manage.py syncdb')를 실행하고 검색 엔진 캐시 (solr)를 업데이트 한 다음 Apache를 다시 시작하는 배치 파일입니다.

내가보기에는 내가 웹 앱과 평행을 이루지 못한다고 생각합니다.

'야간 빌드'가 포함 된 소스 제어 웹 앱을 사용하고 있습니까? 그렇다면 어떻게 생겼습니까?

답변

11

야간 빌드로 Django 테스트 프레임 워크를 통해 모든 장고 테스트를 쉽게 실행할 수 있습니다.

우리가하는 일입니다.

또한 장고 기능을 사용하지 않는 일반적인 단위 테스트가 있으며이를 실행합니다.

비록 Python (및 Django)이 언어 컴파일과 같은 종류의 야간 컴파일/링크/단원 테스트를 요구하지 않지만 "Do not Break The Build"의 일일 징계로부터 여전히 이익을 얻을 수 있습니다. 그리고 당신이 소유 한 모든 것을 단위 테스트하는 매일의 사이클은 좋은 일입니다.

우리는 Python 2를보고 싶어합니다.6 (우리에게 완벽하게 작동 함) 및 -3 옵션을 사용하여 단위 테스트를 실행하여 사용 중단 된 기능을 확인하십시오. 단위 테스트의 전체 집합을 가짐으로써 Python 3 호환성을위한 변경으로 인해 빌드가 손상되지 않는다는 것을 확신 할 수 있습니다. 야간에 실행하면 이어야하며 리팩토링을해야합니다.

+1

동적 언어로 된 +1 웹 앱은 종종 "빌드"가 필요하지 않지만 지속적인 통합 테스트가 적극 권장됩니다. –

3

동적 언어로 작성된 웹 응용 프로그램에는 "컴파일"단계가 필요하지 않지만 앱 실행에 관련된 많은 "빌드"단계가있을 수 있습니다. 빌드 스크립트는 종속성을 설치 또는 업그레이드하고 데이터베이스 마이그레이션을 수행 한 다음 테스트 스위트를 실행하여 코드가 "깨끗한"상태로 유지되도록 할 수 있습니다. 저장소의 실제 체크인 된 버전 또는 코드 사본을 테스트 서버에 배포 한 다음 새 버전에 대한 Selenium 통합 테스트 세트를 실행하여 핵심 사이트 기능이 계속 작동하도록 할 수 있습니다.

연속 통합 주제에 대한 내용은 매우 유용합니다. webapp 개발 팀을위한 유용한 습관입니다. 개발 프로세스가보다 신속하고 민첩해질수록 자동화 된 테스트 및 품질 메트릭의 정기적 인 입력이 필요하므로 코드의 깨진 버전에서 빠르게 실패 할 수 있습니다.

+0

첫 번째 답변은 빌드 프로세스의 비 편집 측면의 아이디어와 지속적인 통합을위한 제안을 결합한 것입니다. FWIW, 나는 webapp을 위해 CruiseControl과 함께 행운을 빈다. – rmeador

1

저는 지속적인 통합을 위해 Hudson을 사용하여 큰 성공을 거두었습니다. 허드슨을 파이썬과 함께 사용하는 것에 대한 자세한 내용은 Redsolo입니다.

몇 달 전에 continuous deployment을 열거 한 기사들이 온라인을 자극했습니다. IMVU에 대한 자세한 내용은 deploy up to 5 times a day입니다.

1

빈번한 빌드 (야간 또는 연속적인 통합과 같은 빈번한 빌드)의 모든 아이디어는 문제의 도입과 발견 사이의 경과 시간을 줄이기 위해 즉각적인 피드백을 얻는 것입니다. 따라서 자주 컴파일하는 것은 편집, (이상적으로 자동화 된) 테스트, 품질 검사 등을 통해 피드백을 생성 할 수있는 경우에만 유용합니다. 피드백이 없으면 실제 포인트가 없습니다.

2

실제로 개발자와 다른 개발자가 작업하는 경우 야간 빌드는 아마도별로 도움이되지 않을 것입니다.

야간 빌드에 해당하는 웹 앱은 야간에 사이트를 구축 할 수있는 준비 사이트라고 할 수 있습니다.

야간에 준비 구역을 건설하는 곳에서는 클라이언트, 프로젝트 관리자 및 QA 담당자가있어 앱의 최신 버전이지만 비교적 안정적인 버전을 볼 수 있어야합니다. 귀하의 개발자 샌드 박스 (나 같은 사람이라면)는 아마도 다음 번 기능을 구현하려고하는 일을 깨고 있기 때문에 사용할 수없는 상태로 많은 시간을 보낼 것입니다. 따라서 일반적인 문제는 품질 보증 담당자가 버그가 수정되었는지 확인하려고하거나 PM이 일부 계획 기능이 올바르게 구현되었는지 확인하려고하거나 고객이 관심있는 문제에 대해 진전을 보이기를 원합니다. 약. 개발자 샌드 박스에만 액세스 할 수있는 경우 샌드 박스 버전이 보이지 않을 때 (또는 ./manage.py runserver가 터미널의 어딘가에있을 때) 또는 다른 이유로 인해 부서진 상태에 있습니다. 정말 팀 전체가 느려지고 많은 시간을 낭비합니다.

프로덕션 버전을 자동으로 업데이트하기 때문에 스테이징 설정이없는 것처럼 들립니다. 만약 당신이 이라면보다 조심스럽고 훈련 된 것이 좋을 것입니다. (그리고 저는 대부분의 개발자들이라고 생각합니다.) 절대 완벽하지는 않습니다. 개인적으로, 나는 내 작품이 제작에 닿기 전에 제게 다른 사람이 적어도 약간의 QA를 거쳐 제작했는지 확인하려고합니다.

는 는 는

그래서, 결론, 설치 내가 일하는 곳 :

  • 각 개발자가 로컬 자신의 샌드 박스를 실행합니다 (같은 당신이 그것을처럼)
  • 이 dev에 서버에서 "일반적인"준비 샌드 박스가 있음 밤에 cronjob에서 업데이트됩니다. PM, 고객 및 품질 보증은 여기에 있습니다. 개발자 샌드 박스에 직접 액세스 할 수 없습니다.
  • 프로덕션 환경으로 자동 배치 (수동으로 시작되었지만)가 있습니다. 개발자 또는 PM은 일이 충분히 품질 보증되고 안정적이고 안전하다고 느끼면 생산에 "밀"수 있습니다.

야간 준비 빌드를 설정하는 데 약간의 추가 오버 헤드 외에도 유일한 단점은 버그 확인시 소요되는 시간을 단축한다는 것입니다.즉, QA는 소프트웨어 (그날의 야간 빌드를 기반으로 함)에 버그를보고하고 개발자가 버그와 커밋을 수정하면 QA는 다음 날 빌드까지 기다려서 버그가 실제로 수정되었는지 확인해야합니다. 모든 사람들이 일정에 영향을 미치지 않는다는 충분한 지식을 가지고 있기 때문에 대개는별로 문제가되지 않습니다. 이정표가 다가오고 기능이 고정 된 버그 수정 전용 모드에있게되면 준비 사이트를보다 자주 수동으로 업데이트 할 것입니다.

관련 문제