2013-05-09 12 views
8

Ist es möglich, eine Website zu veröffentlichen, anstatt sie als Teil eines FAKE-Skripts zu erstellen?Website in FAKE veröffentlichen (F # Marke)

+0

Ich glaube nicht, dass es eine eingebaute Aufgabe dafür gibt, aber Sie können das sicherlich tun (genau wie alles, was Sie in F # programmieren können). Wie möchten Sie die Site veröffentlichen? Mit FTP oder etwas anderem? –

+0

Hallo Tomas, Entschuldigung speziell ich meine "publizieren" im Visual Studio Sinne eher als ein Generic es irgendwo veröffentlichen. Hast du das auch gemeint? Wenn ja, dann muss es nur auf der Festplatte veröffentlicht werden, aber es läuft die web.config Transformationen, entfernt unnötige Dateien usw. – mattcole

+0

Ich sehe, ja das macht Sinn. Ich schaute mich im Internet um und postete einige Ideen in einer Antwort. –

Antwort

7

Ich habe keine Erfahrung damit, aber es sieht so aus, als gäbe es zwei Möglichkeiten, den Web-Deployment-Prozess von Hand auszuführen. Eins (sieht älter aus) soll MSBuild mit einem speziellen Ziel aufrufen (wie described here) und eine andere Option (sieht moderner aus) ist die Verwendung des MSDeploy-Tools (welches has a command line interface).

Beide sollten leicht von FAKE-Skript aufgerufen werden können. Hier ist ein Beispiel, das ein Kommandozeilen-Tool ruft:

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" 
) 

Aufruf einen MSBuild-Skript sollte wie folgt aussehen:

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

Wie gesagt, ich habe nicht getestet (so könnte es völlig falsch liegen), aber hoffentlich kann es dich in eine nützliche Richtung weisen, bevor einige Web-Deployment- oder FAKE-Experten zu SO kommen!

5

Hier ist eine Möglichkeit, es zu tun. (Eigentlich ist es nicht genau die Frage beantworten, weil Verlag nicht ohne Gebäude durchgeführt wird.)

  • Entscheiden Sie, welche Ziele müssen die Website veröffentlichen.
  • Machen Sie sie abhängig von der "Build" -Ziel.
  • Lassen Sie das Ziel "Build" die Website mithilfe eines Veröffentlichungsprofils publizieren, falls eine Veröffentlichung erforderlich ist.

Hier ist ein Stück Code aus build.fsx diesen Ansatz darstellt:

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. 

Mit diesem Code an Ort und Stelle, wenn eines der Ziele "Test", "AcceptanceTest", "Deploy" ausgeführt wird wird die Website gemäß dem in LocalTestServer.pubxml definierten Veröffentlichungsprofil veröffentlicht.