[asp.net] ASP.NET 응용 프로그램을 라이브 서버에 어떻게 배포합니까?

나는 당신이 ASP.NET 웹 응용 프로그램 프로젝트 (배포하는 데 사용할 다른 기술 / 도구를 찾고 있어요 NOT ASP.NET 웹 사이트) 생산을?

특히 Continuous Integration Build 서버가 특정 위치에 바이너리를 드롭하는 시점과 첫 번째 사용자 요청이 이러한 바이너리에 도달하는 시점 사이에 발생하는 워크 플로에 관심이 있습니다.

  1. 특정 도구를 사용하고 있습니까 아니면 XCOPY 만 사용하고 있습니까? 응용 프로그램은 어떻게 패키지됩니까 (ZIP, MSI, …)?

  2. 응용 프로그램을 처음 배포 할 때 응용 프로그램 풀 및 가상 디렉터리를 어떻게 설정합니까 (수동으로 또는 일부 도구를 사용하여 생성합니까)?

  3. 정적 리소스가 변경되면 (CSS, JS 또는 이미지 파일) 전체 애플리케이션을 재배포합니까 아니면 수정 된 리소스 만 재배포합니까? 어셈블리 / ASPX 페이지가 변경되면 어떻습니까?

  4. 주어진 응용 프로그램에 대해 배포 된 모든 버전을 추적하고 있으며 문제가 발생하는 경우 응용 프로그램을 이전에 알려진 작업 상태로 복원하는 절차가 있습니까?

이전 목록을 자유롭게 작성하십시오.


그리고 다음은 ASP.NET 응용 프로그램을 배포하는 데 사용하는 것입니다.

  1. 솔루션에 웹 배포 프로젝트 를 추가 하고 ASP.NET 웹 애플리케이션을 빌드하도록 설정합니다.
  2. 우리는 설치 프로젝트 (추가 하지 솔루션에 웹 설치 프로젝트)와 웹 배포 프로젝트의 출력을하도록 설정
  3. 사용자 지정 설치 작업을 추가하고 OnInstall 이벤트에서 System.DirectoryServices.DirectoryEntry를 사용하여 IIS에서 앱 풀과 가상 디렉터리를 만드는 사용자 지정 빌드 .NET 어셈블리를 실행합니다 (이 작업은 응용 프로그램이 처음 배포 될 때만 수행됨). . IIS에서 여러 웹 사이트, 가상 디렉터리에 대한 인증 및 앱 풀에 대한 ID 설정을 지원합니다.
  4. TFS에 사용자 지정 작업을 추가하여 설치 프로젝트를 빌드합니다 (TFS는 설치 프로젝트를 지원하지 않으므로 devenv.exe를 사용하여 MSI를 빌드해야 함).
  5. MSI는 라이브 서버에 설치됩니다 (이전 버전의 MSI가있는 경우 먼저 제거됨).


답변

Setup Factory를 사용하여 모든 코드를 MSI에 배포했습니다. 변경이 필요한 경우 전체 솔루션을 재배치합니다. 이것은 css 파일에 대해 과도하게 들리지만 모든 환경을 동기화 상태로 유지하며 프로덕션 환경에 정확히 무엇인지 알고 있습니다 (모든 테스트 및 uat 환경에 동일한 방식으로 배포).


답변

라이브 서버에 롤링 배포를 수행하므로 설치 프로그램 프로젝트를 사용하지 않습니다. CI와 비슷한 것이 있습니다.

  • 승인 된 소스 (repo의 “HEAD”가 아님) 에서 “라이브”빌드 서버 빌드
  • (백업 후 ;-p)
  • robocopy는 스테이징 서버에 게시합니다 ( “라이브”이지만 F5 클러스터에는 없음).
  • 스테이징 서버에서 수행되는 최종 유효성 검사 (종종 “호스트”해킹으로 전체 내용을 최대한 가깝게 에뮬레이션)
  • robocopy / L은 다음 “푸시”에서 변경 사항 목록을 자동으로 배포하여 실수를 경고하는 데 사용됩니다.
  • 예약 된 프로세스의 일부로 클러스터가 순환되고 robocopy를 통해 클러스터의 노드에 배포됩니다 (클러스터 외부에있는 동안).

robocopy는 변경 사항 만 배포되도록 자동으로 보장합니다.

Re the App Pool 등 나는 것이다 사랑 (이 자동화 될 이 질문을 참조 )하지만,에 순간 은 수동이다. 그래도 정말 바꾸고 싶어요.

(우리가 자체 데이터 센터와 서버 팜을 “현장”에 두는 것이 도움이되므로 많은 장애물을 넘을 필요가 없습니다.)


답변

웹 사이트

배포자 :
http://www.codeproject.com/KB/install/deployer.aspx

웹 사이트를 로컬 폴더에 게시하고 압축 한 다음 FTP를 통해 업로드합니다. 그러면 서버의 Deployer가 zip을 추출하고 구성 값 (Web.Config 및 기타 파일)을 바꿉니다.

물론 처음 실행하려면 서버에 연결하고 IIS WebSite, 데이터베이스를 설정해야하지만 그 후에 업데이트를 게시하는 것은 케이크 조각입니다.

데이터 베이스

데이터베이스를 동기화 상태로 유지하기 위해 http://www.red-gate.com/products/sql-development/sql-compare/를 사용합니다 .

서버가 여러 라우터 뒤에 있고 직접 연결할 수없는 경우 (SQL 비교 요구 사항) https://secure.logmein.com/products/hamachi2/ 를 사용하여 VPN을 만듭니다.


답변

저는 대부분 ASP.NET 앱을 Linux 서버에 배포하고 아주 작은 변경에도 모든 것을 재배포합니다. 내 표준 워크 플로는 다음과 같습니다.

  • 소스 코드 저장소 (예 : Subversion)를 사용합니다.
  • 서버에는 다음을 수행하는 bash 스크립트가 있습니다.
    • 최신 코드 확인
    • 빌드 수행 (DLL 생성)
    • 파일을 필수 항목으로 필터링 (예 : 코드 파일 제거)
    • 데이터베이스 백업
    • 현재 날짜로 명명 된 디렉토리의 웹 서버에 파일을 배포합니다.
    • 새 스키마가 배치에 포함 된 경우 데이터베이스를 업데이트합니다.
    • 새 설치를 기본 설치로 설정하여 다음 히트와 함께 제공됩니다.

체크 아웃은 Subversion의 명령 줄 버전으로 수행되고 빌드는 xbuild (Mono 프로젝트와 유사한 msbuild 작업)로 수행됩니다. 대부분의 마법은 ReleaseIt에서 이루어집니다.

내 dev 서버에서는 본질적으로 지속적 통합이 있지만 프로덕션 측면에서는 실제로 서버에 SSH를 사용하고 스크립트를 실행하여 수동으로 배포를 시작합니다. 내 스크립트는 영리하게 ‘배포’라고 불리므로 bash 프롬프트에 입력합니다. 나는 매우 창의적입니다. 아니.

프로덕션에서는 ‘deploy’를 두 번 입력해야합니다. 한 번은 체크 아웃, 빌드 및 날짜가 지정된 디렉토리에 배포하고 한 번은 해당 디렉토리를 기본 인스턴스로 만듭니다. 디렉토리의 날짜가 지정 되었기 때문에 관련 디렉토리에서 ‘deploy’를 입력하기 만하면 이전 배포로 되돌릴 수 있습니다.

초기 배포에는 몇 분이 걸리고 이전 버전으로 되 돌리는 데 몇 초가 걸립니다.

나에게 좋은 솔루션이었고 세 가지 명령 줄 유틸리티 (svn, xbuild 및 releaseit), DB 클라이언트, SSH 및 Bash에만 의존합니다.

언젠가 CodePlex에서 ReleaseIt의 복사본을 업데이트해야합니다.

http://releaseit.codeplex.com/


답변

ASP.NET 용 간단한 XCopy. 압축하고 서버에 sftp하고 올바른 위치에 압축을 풉니 다. 첫 번째 배포의 경우 IIS 수동 설정


답변

질문에 대한 답변 :

  1. XCopy
  2. 수동으로
  3. 정적 리소스의 경우 변경된 리소스 만 배포합니다.
    DLL의 경우 변경된 DLL 및 ASPX 페이지를 배포합니다.
  4. 예, 그렇습니다.

멋지고 단순하게 유지함으로써 지금까지 많은 두통을 덜어주었습니다.


답변

특정 도구를 사용하고 있습니까 아니면 XCOPY 만 사용하고 있습니까? 응용 프로그램은 어떻게 패키지됩니까 (ZIP, MSI, …)?

BuildMaster 의 개발자로서 이것은 당연히 제가 사용하는 것입니다. 모든 애플리케이션은 도구 내에서 아티팩트로 빌드되고 패키징되며 내부적으로 ZIP 파일로 저장됩니다.

응용 프로그램을 처음 배포 할 때 응용 프로그램 풀 및 가상 디렉터리를 어떻게 설정합니까 (수동으로 또는 일부 도구를 사용하여 생성합니까)?

수동-애플리케이션이 테스트 환경을 통과 할 때 향후 환경에서 수행 할 정확한 단계를 상기시키는 도구 내에서 변경 제어를 생성합니다. 간단한 PowerShell 스크립트로도이를 자동화 할 수 있지만 새 애플리케이션을 자주 추가하지 않으므로 사이트를 수동으로 만드는 데 걸리는 1 분만큼 쉽습니다.

정적 리소스가 변경되면 (CSS, JS 또는 이미지 파일) 전체 애플리케이션을 재배포합니까 아니면 수정 된 리소스 만 재배포합니까? 어셈블리 / ASPX 페이지가 변경되면 어떻습니까?

기본적으로 아티팩트 배포 프로세스는 수정 된 파일 만 대상 서버로 전송되도록 설정됩니다. 여기에는 CSS 파일, JavaScript 파일, ASPX 페이지 및 연결된 어셈블리의 모든 항목이 포함됩니다.

주어진 응용 프로그램에 대해 배포 된 모든 버전을 추적하고 있으며 문제가 발생하는 경우 응용 프로그램을 이전에 알려진 작업 상태로 복원하는 절차가 있습니까?

예, BuildMaster가이 모든 것을 처리합니다. 복원은 대부분 이전 빌드 승격을 다시 실행하는 것처럼 간단하지만 때로는 데이터베이스 변경 사항을 수동으로 복원해야하며 데이터 손실이 발생할 수 있습니다. 기본 롤백 프로세스는 http://inedo.com/support/tutorials/performing-a-deployment-rollback-with-buildmaster에 자세히 설명되어 있습니다.