2014-03-01 8 views
1

현재 C#에서 로컬 정적 사이트 생성기를 구축 중입니다. 한 무리의 템플릿을 일반 오래된 HTML 파일의 계층 구조로 함께 컴파일합니다. 결과 파일을 내 Windows Azure 웹 사이트에 업로드하고 변경 내용을 실시간으로 반영하고 싶습니다. 스크립트를 통해 프로그래밍 방식으로이 작업을 수행 할 수 있기를 원합니다.정적 HTML 사이트를 Windows Azure 웹 사이트에 프로그래밍 방식으로 업로드하려면 어떻게해야합니까?

Windows Azure 웹 사이트에 HTML을 직접 업로드 할 수있는 API 또는 SDK를 찾을 수 없어서 WebMatrix를 사용하여 생성 된 파일을 수동으로 업로드해야합니다.

sFTP 라이브러리를 사용하는 것 외에는 코드에서이 작업을 수행 할 수있는 방법이 있어야합니다 (WebMatrix/IIS 프로토콜을 사용하지 않기 때문에 압축 된 diff를 보내면 느려지고 일부 파일이 업데이트되고 다른 파일이 업로드되지 않은 상태에서 업로드하는 동안 동기화되지 않은 데이터를 의미합니다.) 피할 수만 있다면 생성 된 사이트를 소스 제어에 위임하지 않아도됩니다. 배포의 구현 세부 사항으로 만 소스 제어에 무언가를 넣는 것이 개념적으로 잘못되었습니다.

업데이트 : WebMatrix는 내부적으로 Web Deploy (MSDeploy)를 사용합니다. 이론적으로는 API를 사용하여 직접 배포 패키지를 구축 할 수 있어야하지만 예제 중 99 %가 Visual Studio의 명령 줄 도구 또는 GUI 도구를 사용하고 있습니다. 패키지를 빌드하고 프로그래밍 방식으로 C#에서 배포해야합니다. 이것에 대해 어떤 생각이나 지침이 있습니까? MSDN의 문서는 이런 종류의 시나리오에 대한 예제를 실제로 보여주지 않습니다.

답변

3

좋아요, 그래서 저는 Microsoft의 친절한 두 사람의 도움으로 무엇을해야할지 생각해 냈습니다. (David's Ebbo's response to my forum question과 msdeploy.exe 콘솔 응용 프로그램에서 수행하고 싶은 작업을 정확히 수행하는 방법을 보여주는 Sayed Hashimi의 유용한 정보를 참조하십시오.

Azure 웹 포털에서 PublishSettings 파일을 가져 오기만하면됩니다. 텍스트 편집기에서 열어 아래 코드에 붙여 넣을 값을 가져옵니다.

var destinationOptions = new DeploymentBaseOptions() 
{ 
    // userName from Azure Websites PublishSettings file 
    UserName = "$msdeploytest", 
    // pw from PublishSettings file 
    Password = "ThisIsNotMyPassword", 
    // publishUrl from PublishSettings file using https: protocol prefix rather than 443 port 
    // and adding "/msdeploy.axd?site={msdeploySite-variable-from-PublishSettings}" 
    ComputerName = "https://waws-prod-blu-003.publish.azurewebsites.windows.net/msdeploy.axd?site=msdeploytest", 
    AuthenticationType = "Basic" 
}; 
                  // This option says we're giving it a directory to deploy 
using (var deploymentObject = DeploymentManager.CreateObject(DeploymentWellKnownProvider.ContentPath, 
                  // path to root directory of source files 
                  @"C:\Users\ryan_000\Downloads\dummysite")) 
{ 
    var syncOptions = new DeploymentSyncOptions(); 
    syncOptions.WhatIf = false; 
                        // "msdeploySite" variable from PublishSettings file 
    var changes = deploymentObject.SyncTo(DeploymentWellKnownProvider.ContentPath, "msdeploytest", destinationOptions, syncOptions); 
    Console.WriteLine("BytesCopied:  " + changes.BytesCopied.ToString()); 
    Console.WriteLine("Added:    " + changes.ObjectsAdded.ToString()); 
    Console.WriteLine("Updated:   " + changes.ObjectsUpdated.ToString()); 
    Console.WriteLine("Deleted:   " + changes.ObjectsDeleted.ToString()); 
    Console.WriteLine("Errors:   " + changes.Errors.ToString()); 
    Console.WriteLine("Warnings:   " + changes.Warnings.ToString()); 
    Console.WriteLine("ParametersChanged: " + changes.ParameterChanges.ToString()); 
    Console.WriteLine("TotalChanges:  " + changes.TotalChanges.ToString()); 
} 

obscure documentation on MSDN을 통해 비틀 거릴 수도 있습니다. 기묘하게 명명 된 옵션 클래스가 많이 지나가고 있지만, 눈을 가늘게 훑어보고 문서에서 눈을 깜박 거리면 명령 행 옵션 (온라인에서 예제를 찾는 것이 훨씬 쉽습니다.)를 API 호출에 매핑합니다.

2

가장 쉬운 방법은 아마도 웹 사이트에 Git publishing을 설정하고 프로그래밍 방식으로 git commit을 한 다음 git push를 수행하는 것입니다. Azure 웹 사이트는 선택한 SCM 솔루션과 아무 관련이없는 Backing Git 저장소를 기본적으로 지원하므로 소스 관리 대신 배포 메커니즘으로 생각할 수 있습니다.

+0

아마도 약간의 궤변이지만, 당신은 공정한 지적을합니다. 그럼에도 불구하고, SCM을 배포에 사용하는 것을 피하고 싶습니다. 코드에 명령 줄을 놓고 Mercurial과 상호 작용하여 지저분해질 수 있어야합니다. WebDeploy는 나쁘게 문서화 된 API를 이해할 수만 있다면 좋은 방법입니다. –

1

WebMatrix는 WebDeploy을 사용하여 파일을 Windows Azure 웹 사이트에 업로드합니다.

+0

차가움. 내 시나리오의 문서와 예제가 드물게 보이지만 지금 당장이 문제를 조사하고 있습니다. –

1

다른 대안은 VFS REST API (https://github.com/projectkudu/kudu/wiki/REST-API#wiki-vfs)를 사용하는 것입니다. diagnostic console은 이것을 사용하여 파일 시스템을 사용합니다.

+0

차가움.그러나 내 아이디어는 MSDeploy와 같은 기술을 활용하여 모든 파일을 개별적으로 반복하거나 맹목적으로 다시 업로드하는 대신 변경 사항의 압축 된 diff를 보낼 수있게하려는 것입니다 (일반적인 SFTP 접근 방식과 마찬가지로). REST API를 사용하면 파일을 개별적으로 업로드해야합니다. –