2013-05-09 10 views
8

Czy można opublikować stronę internetową zamiast budować ją jako część skryptu FAKE?Opublikuj witrynę w FAKE (F # Make)

+0

Nie sądzę, że jest to wbudowane w to zadanie, ale możesz to zrobić (tak jak wszystko, co możesz zaprogramować w F #). Jak chcesz opublikować witrynę? Korzystasz z FTP lub czegoś innego? –

+0

Cześć Tomas, przepraszam, konkretnie mam na myśli "publikuj" w sensie Visual Studio, a nie ogólne, publikuj go gdzieś. Czy to też miałeś na myśli? Jeśli tak, to musisz tylko opublikować go na dysku, ale uruchamia transformacje web.config, usuwa niepotrzebne pliki itp. – mattcole

+0

Rozumiem, że to ma sens. Rozejrzałem się po internecie i zamieściłem kilka pomysłów w odpowiedzi. –

Odpowiedz

7

Ja sam nie mam z tym doświadczenia, ale wygląda na to, że istnieją dwa sposoby ręcznego uruchomienia procesu wdrażania w sieci. Jeden (wygląda na starszy) to wywołanie MSBuild ze specjalnym celem (jako described here), a inna opcja (wygląda bardziej nowocześnie) jest użycie narzędzia MSDeploy (które has a command line interface).

Oba te elementy powinny być łatwe do wywołania ze skryptu FAKE. Oto przykład, który wywołuje narzędzie wiersza poleceń:

Target "Deploy" (fun _ -> 
    let result = 
     ExecProcess (fun info -> 
      info.FileName <- "file-to-run.exe" 
      info.Arguments <- "--parameters:go-here" 
     ) (System.TimeSpan.FromMinutes 1.0)  
    if result <> 0 then failwith "Operation failed or timed out" 
) 

wywołanie skryptu MSBuild powinien wyglądać mniej więcej tak:

Target "BuildTest" (fun _ -> 
    "Blah.csproj" 
    |> MSBuildRelease "" "ResolveReferences;_CopyWebApplication" 
    |> ignore 
) 

Jak już mówiłem, nie testowałem tego (tak to może całkowicie mylnie), ale miejmy nadzieję, że może wskazać ci przydatny kierunek, zanim niektóre wdrożenia internetowe lub eksperci FAKE przyjdą do SO!

5

Oto jeden sposób, aby to zrobić. (Faktycznie to nie dokładnie odpowiedzieć na to pytanie, ponieważ publikowanie nie jest wykonywana bez budynku.)

  • Zdecyduj, które cele muszą publikować na stronie internetowej.
  • Spraw, aby były zależne od celu "Kompilacja".
  • Ustaw obiekt docelowy "Buduj", publikując witrynę, korzystając z profilu publikowania, jeśli potrzebne jest publikowanie.

Oto fragment kodu z build.fsx ilustrujących to podejście:

let testProjects = @"src/**/*Tests.csproj" 

let requestedTarget = getBuildParamOrDefault "target" "" 
let shouldDeploy = 
    match requestedTarget with 
    | "Test" | "AcceptanceTest" | "Deploy" -> true 
    | _ -> false 


// *** Define Targets *** 
Target "BuildApp" (fun _ -> 
    let properties = 
     if shouldDeploy 
     then [ ("DeployOnBuild", "true"); ("PublishProfile","LocalTestServer.pubxml") ] 
     else [] 
    !! @"src/**/*.csproj" 
     -- testProjects 
     |> MSBuildReleaseExt null properties "Build" 
     |> Log "Build-Output: " 
) 

// Other targets and dependencies omitted. 

Z tego kodu w miejscu, gdy prowadzony jest jednym z celów „Test”, „AcceptanceTest”, „wdrożyć” , strona internetowa zostanie opublikowana zgodnie z profilem publikowania zdefiniowanym w LocalTestServer.pubxml.