2013-08-02 2 views
1

많은 검색을 수행했지만 문제점에 맞는 솔루션을 찾을 수 없습니다.CodeIgniter 프로젝트의 빌드 및 배포 워크 플로

나는 내 프로젝트에 내 개발 워크 플로우이 Phing을 사용하여 개선 하고 싶습니다. 현재의 워크 플로가 너무 간단하고 실패하기 쉽습니다.

기계 : 나의 현재 상황은 다음과 같다

  • 데브 : 내 기계와 개발 환경을 제공합니다.
  • 테스트 : 테스트 및 VCS 서버. 프로젝트가 출시 준비가되면 테스트를 위해이 머신에 "배치"되고 코드는이 머신의 Git 중앙 저장소에도 푸시됩니다.
  • 생산 : 프로젝트가 생산 준비가되면이 시스템에 "배치"됩니다.

현재 "배포"프로세스 :

변화가 feature 지점에서 내 컴퓨터에서 만들어진 응용 프로그램. 변경 내용이 출시 준비가되면 해당 컴퓨터를 develop 분기에 병합 한 다음 내 컴퓨터 작업 디렉토리 (로컬 또는 원격 VCS가 아닌)에서 테스트 서버 (물리적으로 동일합니다. VCS의 기계). 모든 것이 정상이면 develop의 변경 사항을 master 분기로 병합 한 다음 테스트 서버와 동일한 방법으로프로덕션 서버에 "배포"합니다. 마지막으로 developmaster 분기의 로컬 변경 사항을 중앙 원격 리포지토리의 해당 지점으로 푸시합니다. 이러한 프로세스는 때로는 수동으로 또는 사용자 지정 셸 스크립트를 통해 수행됩니다.

문제점 :

  • 수동으로 배포 프로세스는이 작업을 수행 할 수없는 전문적이고 안전한 방법입니다.
  • 내 사용자 지정 셸 스크립트는 간단하며 (1) 배포해야하는 파일 목록을 수동으로 제공하고, (2) 다른 서버에 배포하기 위해 코드를 변경해야하며, (3) 롤백이 필요하지 않은 등의 몇 가지 문제가 있습니다. 작업 등.
  • 테스트, 데이터베이스 마이그레이션, 캐시 및 로그 파일 정리, 권한 변경 등과 같은 일부 작업을 빌드 또는 배포 프로세스 중에 수행 할 수 없습니다.
  • 즉,해야 할 것처럼 단순한 단일 작업이 아닙니다!

질문 :

  • Phing이 빌드 도구입니다. 배포에도 사용할 수 있습니까?
  • 필자는 응용 프로그램 코드가 각각 '테스트'및 '프로덕션'서버에 대한 중앙 원격 저장소 (및 작업 디렉토리가 아닌)의 '개발'및 '마스터'분기에서 배치되어야한다고 생각합니다 . 이것이 올바른 방법입니까?
  • 이전 질문을 고려하고 Phing을 사용하고 싶습니다. 어디에서 Phing을 설치해야합니까? 내 개발 기계 또는 테스트 기계에서?
  • '테스트'및 '생산'배포 전략에 더 익숙한 '조리법'은 무엇입니까?

    • 케이스 A1 - 테스트 배포 (로컬 컴퓨터에서 실행)
      (1) 시험 장치에 연결 (2) 클론을 웹 루트 폴더에 대한 중앙의 repo에서 지점을 '개발'(3) .git 디렉토리, 캐시 및 로그 파일 제거, (4) 일부 권한 변경, (5) 데이터베이스 스크립트 실행, (6) 현재 릴리스로의 심볼릭 링크 변경 및 (7) 웹 서버 재시작.

    • 케이스 A2 - 테스트 배포 케이스 A1에서
      같은 단계 (시험기에서 실행).

    • 케이스 B1 - 생산 배포 (로컬 컴퓨터에서 실행이)
      (1) 웹 루트 폴더에 중앙의 repo에서 (2) 클론 '마스터'지점, 기계를 produciton에 연결, (3)을 제거합니다. git 디렉토리, 캐시 및 로그 파일, (4) 일부 권한 변경, (5) 데이터베이스 스크립트 실행, (6) 현재 릴리스로의 심볼릭 링크 변경 및 (7) 웹 서버 재시작.

    • 케이스 B2 - 생산 배포 케이스 B1에서
      같은 단계 (시험기에서 실행).

  • 전체 프로젝트 또는 변경된 파일 만 배포해야합니까? 더 좋고 안전한 무엇이 있습니까?

  • 테스트, 품질 보증 및 축소 도구를 실행하기 위해 개발 컴퓨터에 빌드 프로세스를 설치해야합니까? 아니면 테스트 서버에서 실행해야합니까?
  • 배포 전략을 수동으로 실행하거나 서버에서 Git 후킹으로 실행해야합니까?

답변

1

개인적으로 내 흐름이 유사합니다 기능 분기 및 테스트 http://marcelog.github.io/articles/ci_jenkins_hudson_continuous_integration_php_phing.html

  • 내가 코드가 로컬.
  • 내가 준비가되면 CI (continuous integration) 브랜치에 병합하고 푸시
  • 젠킨스는 새로운 커밋을 CI에보고 테스트 서버에서 자동으로 빌드하고 모든 단위 테스트를 실행합니다. 단위가 모두 통과하면 문서가 생성되고 결과가 이메일로 전송됩니다.
  • 일반적으로 테스트 서버에서 몇 가지 수동 테스트를 실행합니다.
  • 모든 것이 잘 보이면 CI 분기를 마스터에 병합하는 스크립트를 배포하고 새로 생성 된 문서로/docs/폴더를 업데이트 한 다음 모든 것을 원격에 푸시합니다. 마지막으로 라이브 서버가 새로운 변경 사항을 가져오고 다른 이메일을 받게됩니다.
  • 최종 라이브 사이트 수동 테스트 및 반복.

IMHO 내 작업 흐름에 대한 실제 비밀은 후크, 후크, 후크입니다! 젠킨스가 나를 위해하는 모든 자동화는 모두 포스트 커밋/푸시 후크를 기반으로합니다. 내가 CI에 커밋하고 원격 서버 (github)로 밀어 넣을 때 jenkins는 포스트 푸시 후크 (http://developer.github.com/v3/repos/hooks/#test-a-push-hook)를 통해이를 경고합니다.

관련 문제