2013-10-04 5 views
0

테스트/미리보기 목적으로 별도의 가상 호스트/도메인에서 프로젝트의 Git 저장소의 특정 분기를 실행하고 싶습니다. Git push 후에 브라우저에서 수동 테스트를 위해 "미리보기"또는 "테스트"서버로 분기를 배포하는 프로세스에 대해 생각하고 있습니다.웹 프로젝트의 분기를 병렬로 실행하는 방법은 무엇입니까?

예. 특정 서버에 "feature/my-new-feature"라는 지점을 배포하고 "my-new feature.project.com"과 같은 URL에서 프로젝트에 액세스 할 수있게하면 좋을 것입니다.

이론적으로는 처음부터 직면 한 문제는 데이터베이스 연결/구성, 포트 등에 대한 문제입니다. 예를 들어 단일 서버의 별도 하위 도메인에서 여러 분기가 실행되는 경우에는 다음을 수행해야합니다. 단일 MySQL 설치를 공유합니다. 실제로 모든 지사는 모든 지사에 대해 데이터베이스 구성이 변경되지 않기 때문에 별도의 MySQL 인스턴스가 필요합니다. 즉, 동일한 지사에 연결하여 동일한 데이터베이스 이름, 사용자,

아마도 한 가지 방법은 포트를 VM에 직접 매핑하는 것입니다. (최소한 그것이 어떻게 든 가능하다고 생각합니다.) 많은 분기가있는 많은 프로젝트에서 이것은 의미 할 수 있습니다. 하드웨어가 많이 필요해. 이걸 처리하는 오우어. (그리고 아마도 돈이 많이 든다.)

그렇다면 도커 및/또는 Linux 컨테이너에 대해 들었을 때 이것이 제대로 작동 할 수 있을지도 모르겠다.하지만 어떻게 작동하는지 완전히 모르겠다.

간섭 서비스 및 관련 충돌에 대한 문제없이 병렬로 프로젝트의 멀티플 버전을 실행하는 방법이 무엇인지 궁금합니다.

그런 설정을 위해 도커를 사용하는 것이 가능할까요, 아니면 내가 완전히 가고있는 방향입니까?

anwsers에게 감사드립니다.

답변

4

질문 범위가 다소 넓습니다.

당신이 염두에두고있는 것에 대해 리눅스 컨테이너와 도커를 사용할 수 있습니다 : 예, 확실히. 컨테이너는 가볍고 배치가 저렴하며 (VM보다 저렴합니다.) 지속적인 배치/병렬 테스트를 위해 컨테이너를 사용하는 것이 효과적입니다. 당신이 어떤 응용 프로그램을 서비스하는 내부 컨테이너 (MySQL은, PHP, 무엇이든), 당신이 필요로하는 컨테이너 OS에 어떤 구체적인 조정/설정하고, 필요로 설명하는 dockerfile를 만들 : 여기 지금

는 고정 표시기가 작동하는 방법이다 귀하의 응용 프로그램 코드를 넣어. 그런 다음 해당 도커 파일에서 "이미지"를 만들고 마지막으로 해당 이미지에서 새 컨테이너를 시작하면 컨테이너가 완전히 독립형이되어 응용 프로그램을 실행할 수있는 "클린 룸"컨텍스트가 제공됩니다.

컨테이너에 특정 IP가 있으며 선택한 서비스가 노출됩니다. 그러면 이러한 서비스는 호스트에 NAT됩니다 (시작시 포트를 선택할 수도 있습니다). 그렇다면 다양한 도메인 이름/URL에서 컨테이너를 제공하기 위해 nginx를 사용하여 프록시를 리버스하는 것이 다소 간단합니다.

현재 위치 (일반적으로와 고정 표시기) dockerfile에 대해 알아볼 수 http://docs.docker.io/en/latest/

내가 가지 그런 식으로 테스트 실제로 있다면, 나는 것 :

  • 는 Dockerfile 내 애플리케이션 스택을 설명 쓰고, 푸시 그것은 내 프로젝트의 모든 지점에 있습니다.
  • CI 도구 (젠킨스, 스트라이더, 뭐든간에)를 사용하고 github에 연결하여 푸시 된 모든 커밋에 새 이미지를 작성합니다 (docker build -rm -t me/myproject : branchname)을 실행 한 다음 해당 분기에 대해 이전에 실행중인 컨테이너를 중지하고 (빌드가 성공 가정) 리버스 프록시로
  • 설정 내 호스트 nginx를 새로 빌드 이미지에서 새 컨테이너를 타트, 매핑, Hipache (https://github.com/dotcloud/hipache가)에 대한 대안이 될 수 있음을 http://example/branch

http://localhost:NATTED_PORT/에 주 말 나는 그것과 함께 처음 손 경험을 가지고 있지 않지만 프록시로 nginx와 장난 해.

이 단계는 관련된 단계를 대략적으로 설명한 것으로 일부 학습 방법이있을 수 있지만 희망 사항을 충족시켜야합니다.

+0

내 의견을 많이 보내 주셔서 감사합니다. 내가 찾고있는 것과 아주 흡사합니다. : D 내가 아직 이해하지 못하는 것은 docker 이미지를 교환 할 때 데이터베이스/컨텐트를 유지하는 방법입니다. 예를 들어 기존 분기에 새 코드 변경 사항을 적용하고 이전 고정 점 이미지를 중지하고 새 점을 시작하지만 이전 고정 점 이미지의 데이터베이스 데이터를 새 분기 내부에 유지하려고합니다. CI/CD 서버를 사용하여 이전 고정 이미지에서 데이터베이스를 내보내고 새 이미지로 가져올 수 있습니까? 아니면 더 쉬운 방법이 있습니까? 고마워요! :) – Thasmo

+2

컨테이너에 호스트 디렉토리를 "마운트"하여 컨테이너를 재구성 할 때마다 mysql 데이터베이스 폴더가 보존되도록합니다 (바인드 마운트 참조 : http://docs.docker.io/en/latest/commandline/command/). 실행 /) –

+0

아, 그래. 훌륭한. Git 브랜치가 삭제되면 CI/CD 서버가 브랜치의 도커 인스턴스/이미지와 마운트 된 디렉토리를 삭제하도록 구성 할 수 있습니까? – Thasmo