당신이 말한 것처럼 세 번째 방법이 있습니다. 개발, 테스트 및 배포를 혼합하고 있다고 생각합니다. SDLC 전체를 전체적으로 살펴보고, 무엇을 달성 하려는지 이해하기를 제안합니다. 이것은 큰 주제이지만 요약하기 위해 최선을 다할 것입니다.
TL; DR;
간단히 말해서 다음을 분리해야합니다.
- 귀하의 코드
- 응용 프로그램 구성
- 시스템 환경 구성.
각각은 서로 독립적이고 적절해야합니다.
더 긴 버전
먼저 코드와 (별도의 세트) 구성으로 구성된 응용 프로그램이 있습니다. 빌드 및 의도 기능 모두에 대해 테스트해야합니다.이를 CI (Continuous Integration)라고합니다. 온라인 및 로컬로이 서비스를 제공하는 많은 제공자가 있습니다 (예 : 저장소에 링크하고 커밋 할 때마다 빌드 및 테스트하는 클라우드 제공자의 경우 CircleCI) . 저장소가 온 프레미스이고 Jenkins 와 같은 클라우드 공급자를 사용할 수없는 경우동등한 것입니다. 응용 프로그램이 상당히 표준적인 경우 CI 서비스가 사용할 수있는 기존 Docker 이미지가있을 수 있습니다. 그렇지 않은 경우 응용 프로그램 코드 및 구성을 배포 할 수 있도록 클러스터를 만들거나 클러스터를 만들어야합니다. 올바르게 구성하면 응용 프로그램 코드의 품질에 대한 다양한 통계가 제공됩니다.
다음으로, 응용 프로그램의 기능과 정확성에 만족하면 특정 릴리스에 맞게 코드베이스에 태그를 지정해야합니다. 그런 다음이 빌드를 테스트 환경에 배포해야합니다. 코드는 CI에서 테스트 한 것과 동일하지만 (올바르게 수행 한 경우) 구성이 다를 수 있습니다. 또한 일부 CI 제공 업체는이 단계를 제공하여 패키지 된 응용 프로그램의 배포 및 개별 구성을 테스트 할 수 있습니다. 이 단계에는 일반적으로 사용자 기능 테스트 (새로운 기능의 경우)와 자동 테스트 (알려진 기능의 경우)가 포함됩니다. 릴리스가이 단계를 통과하면 통합 테스트를위한 릴리스 후보가 있습니다. 다른 Docker 컨테이너에서 자동화 테스트를 실행할 수 있습니다.테스트 노력을 나타내는 몇 가지 메트릭은 코딩 노력과 1 : 1입니다 (자신이 확실하지는 않지만).
마지막으로, 다음 단계는 마치 프로덕션 환경 인 것처럼 (시스템) 환경을 구축하는 것입니다. 프로덕션에서 Docker를 사용하는 경우 보안 강화, 네트워크 및 서버 최적화 등을 생각할 수 있습니다. Docker 이미지는 개발에서 사용한 이미지를 기반으로 할 수 있지만 (이상적으로는) 확장 및 보안에 대한 변경 사항이있을 수 있습니다 , 내가 말했듯이. 이제 응용 프로그램의 기능 테스트가 완료되었으므로 보안 및 성능에 더 관심이 있습니다. 기능 테스트에 따라 다른 Docker 이미지에서 테스트를 개발, 배포 및 실행할 수 있습니다. 이 단계는 끔찍하게 비싸고 거의 수행되지 않았으므로 생산을 재현 할 수있는 전용 하드웨어가 필요했습니다. 오늘날에는 거의 모든 규모의 온 디맨드 환경에서 일어 서서 분해 할 수 있기 때문에이 기능은 완전히 실현 가능합니다.
마지막으로, 통합 테스트의 구성 델타 (IP 주소, 데이터베이스 URI, 비밀번호 등)의 구성 델타 세트만으로 프로덕션 준비가 된 릴리스가 있습니다. 코드베이스는이 시점에서 적어도 세 가지 다른 환경에서 테스트되었습니다. 포인트 및 대부분의 시스템 구성을 한 번 이상