2013-05-09 16 views
8

È possibile pubblicare un sito Web invece di crearlo come parte di uno script FAKE?Pubblica sito Web in FAKE (F # Make)

+0

Non penso che ci sia un compito predefinito per farlo, ma puoi certamente farlo (proprio come qualsiasi altra cosa che puoi programmare in F #). Come vuoi pubblicare il sito? Usando FTP o qualcos'altro? –

+0

Ciao Tomas, mi dispiace in particolare intendo "pubblicare" nel senso di Visual Studio piuttosto che un generico pubblicarlo da qualche parte. È anche questo che intendevi? Se è così, allora basta pubblicarlo su disco, ma esegue le trasformazioni web.config, rimuove i file non necessari ecc. – mattcole

+0

Vedo, sì, ha senso. Mi sono guardato su Internet e ho postato alcune idee in una risposta. –

risposta

7

Non ho esperienza con questo, ma sembra che ci siano due modi per eseguire il processo deploymnent Web a mano. Uno (sembra più vecchio) è di invocare MSBuild con un obiettivo speciale (come described here) e un'altra opzione (sembra più moderna) è quella di utilizzare lo strumento MSDeploy (che has a command line interface).

Entrambi devono essere facili da chiamare dallo script FAKE. Ecco un esempio che chiama uno strumento a riga di comando:

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

Calling uno script MSBuild dovrebbe essere simile a questo:

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

Come ho detto, non ho ancora testato questo (così si potrebbe si sbaglia completamente), ma si spera che possa indirizzarti verso una direzione utile, prima che alcuni esperti di FAKE o di distribuzione web vengano a SO!

5

Ecco un modo per farlo. (In realtà non è esattamente rispondere alla domanda, perché la pubblicazione non viene eseguita senza edificio.)

  • Decidere quali obiettivi hanno bisogno di pubblicare il sito.
  • Farle dipendere dal target "Build".
  • Fare in modo che il target "Build" pubblichi il sito utilizzando un profilo di pubblicazione nel caso sia necessaria la pubblicazione.

Ecco un pezzo di codice da build.fsx che illustra questo approccio:

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. 

Con questo codice in luogo, quando uno degli obiettivi "Test", "AcceptanceTest", "Distribuzione" è gestito , il sito web viene pubblicato in base al profilo di pubblicazione definito in LocalTestServer.pubxml.

Problemi correlati