Avatar billede CodingJoe Nybegynder
17. november 2010 - 17:54 Der er 33 kommentarer og
1 løsning

Automatiseret deployment scripts

Det er sådan set ikke så meget et C# spørgsmål, men mere om hvorvidt der findes noget best practice indenfor deployment af ens .Net kode.

Jeg har fx. lavet et deployment script, der kopiere source kode, det respektive sted på en webserver, og genstarter iis'en herefter.

Jeg kunne godt tænke mig et eller andet slags framework, der gør det nemmere at schedulere deploy scripts afvikling. Fx kan vi have en bygserver, der bygger een gang om natten og lægger, det kompilerede kode i en specifik folder. Herefter kan der være et scheduleret task script eller et andet framework, der overvåger denne mappe og sørger for at deploye / kopiere den kompilerede kode på fx en TEST server. Jeg er ret åben for forskellige forslag.

Til php og Linux findes der fx. noget, der hedder CFengine, kigger måske efter noget, der kan håndtere .Net kode.

Gode points her...smid endelig erfaringer eller best practice kommentarer ind her.
Avatar billede arne_v Ekspert
17. november 2010 - 18:09 #1
En mulighed er at bruge NAnt scripts (eller MSBuild scripts, men NAnt har lidt flere muligheder).

Visse typer apps genererer man typisk installere for.
Avatar billede CodingJoe Nybegynder
17. november 2010 - 19:19 #2
Ok, men hvordan skaffer jeg MSBuild, er det ikke noget, der følger med TFS?

Jeg kunne fx. godt tænke mig at prøve mulighederne i MSBUild herhjemme, men kan ikek rigtig finde microsofts download site.
Avatar billede CodingJoe Nybegynder
17. november 2010 - 19:20 #3
Bruger Visual Studio 2008 herhjemme...
Avatar billede arne_v Ekspert
17. november 2010 - 19:29 #4
MSBuild kommer med .NET framework.
Avatar billede CodingJoe Nybegynder
17. november 2010 - 19:45 #5
Hvor og hvordan finder jeg frem til det? Har du evt. et link? På nettet har jeg ikke været heldig med at finde det.
Avatar billede CodingJoe Nybegynder
17. november 2010 - 19:55 #6
Sorry...læste ikke helt din besked korrekt...jeg læste som, det ikke kom med .Net frameworket.
Avatar billede CodingJoe Nybegynder
17. november 2010 - 19:55 #7
Men jeg synes ikke jeg kan finde det på min pc....har søgt på fx. MSBuild.exe  men ingen hit...
Avatar billede arne_v Ekspert
17. november 2010 - 20:12 #8
C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe
Avatar billede arne_v Ekspert
17. november 2010 - 20:13 #9
Avatar billede CodingJoe Nybegynder
17. november 2010 - 20:30 #10
Tak for link...har fundet den på min maskine...nu skal jeg blot ha' lavet et test project og se hvordan det virker...points bliver afgivet meget snart :)

Skal lige få det til at virke
Avatar billede CodingJoe Nybegynder
17. november 2010 - 21:38 #11
Hmmm synes jeg har svært ved at komme i gang. Jeg skal lave en xml fil, hvor angiver en masse ting, men hvor skal den xml fil være placeret? og skal der laves et web deploy project...i min VS2008 er der ikke nogen web deploy template....har fået lidt styr på de ting man skriver i xml filen, men har lidt svært ved at starte det rigtige sted...på nettet tager alle links udgangspunkt i xml filen...men hvor dælen skal den står hennne...
Avatar billede CodingJoe Nybegynder
17. november 2010 - 21:40 #12
Avatar billede CodingJoe Nybegynder
17. november 2010 - 21:45 #13
Det var vist en fuser...der var brugt noget kode specifikt for sourcesafe, hvilket jeg ikke har installeret på min maskine...
Avatar billede CodingJoe Nybegynder
17. november 2010 - 21:49 #14
Avatar billede arne_v Ekspert
17. november 2010 - 21:56 #15
Du kan enten redigere i den fil som VS har lavet.

Eller du kan lave din egen og ligge den hvor du har lyst til. Så skal du bare køre msbuild i det dir.
Avatar billede CodingJoe Nybegynder
17. november 2010 - 22:03 #16
Yes, fik faktisk lavet det...men får en fejl ved at køre msbuild...det er nok fordi jeg har kopieret MSBuild.exe i den mappe hvor min *.sln og min *.proj fil ligger i...

Fejl:
  C:\Windows\Microsoft.NET\Framework\v3.5\Microsoft.Data.Entity.targets(40,5):
error MSB4127: Opgaven "EntityDeploy" kunne ikke instantieres fra assemblyen "C
:\Windows\Microsoft.NET\Framework\v3.5\Microsoft.Data.Entity.Build.Tasks.dll".
Kontroller, at opgaveassemblyen er bygget med samme version af assemblyen Micro
soft.Build.Framework som den, der er installeret på computeren, og at værtsprog
rammet ikke mangler en bindingsomdirigering til Microsoft.Build.Framework. Et o
bjekt af typen 'Microsoft.Data.Entity.Build.Tasks.EntityDeploy' kan ikke konver
teres til typen 'Microsoft.Build.Framework.ITask'.
  C:\Windows\Microsoft.NET\Framework\v3.5\Microsoft.Data.Entity.targets(40,5):
error MSB4060: Opgaven "EntityDeploy" er erklæret eller brugt forkert eller mis
lykkedes under konstruktion. Kontroller stavningen af opgavenavnet og assemblyn
avnet.
Avatar billede CodingJoe Nybegynder
17. november 2010 - 22:04 #17
Skal man lave en environment variable? MSBuild bliver ikke genkendt ellers...
Avatar billede arne_v Ekspert
17. november 2010 - 22:06 #18
Du skal ikke kopiere EXE filen.

Tilføj det dir den ligger i til PATH.
Avatar billede CodingJoe Nybegynder
17. november 2010 - 22:14 #19
ok...prøver..
Avatar billede CodingJoe Nybegynder
17. november 2010 - 22:26 #20
Bær lige over med mig...det er længe siden jeg har lavet en environment variable... er inde i path og har angivet msbuild.exe pathen...det er vel nok.
Avatar billede CodingJoe Nybegynder
17. november 2010 - 22:28 #21
Hmmm tror der skal en genstart af maskinen indtil det virker...
Avatar billede arne_v Ekspert
17. november 2010 - 22:35 #22
åben en kommando prompt
gå til det rigtige dir
PATH=C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe;%PATH%
msbuild
Avatar billede arne_v Ekspert
17. november 2010 - 22:35 #23
her gemme PATH så ikke når vinduet lukkes, men fix det i step 2
Avatar billede CodingJoe Nybegynder
17. november 2010 - 22:45 #24
Det irriterer mig at det ikke virker...jeg er på en vista...det burde ikke være anderledes...har gjort det før for et par år siden...men det bøvler lige nu...jeg fikser det...
Avatar billede CodingJoe Nybegynder
17. november 2010 - 22:50 #25
Det er måske pga. det her administrator kør som helvede...hvor man ikke må en skid i en lorte vista :S
Avatar billede CodingJoe Nybegynder
17. november 2010 - 23:18 #26
Jeg har fået den til at bygge fint, men jeg er ikke sikker på hvad der sker. Jeg har sådan set bare kopieret noget eksempel xml og tilrettet det:
Er der noget jeg skal kigge efter specifikt?

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="3.5" DefaultTargets="Build"
    xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <DeploymentProject>NDashboard.UI</DeploymentProject>
    <OutputDirectory>$(DeploymentProject)\bin\$(Configuration)</OutputDirectory>
  </PropertyGroup>

  <Target Name="Clean"> 
    <RemoveDir Directories="$(OutputDirectory)"
            Condition="Exists($(OutputDirectory))"></RemoveDir>
  </Target>
  <Target Name="Build">
    <MSBuild
      Projects="$(DeploymentProject)\NDashboard.UI.csproj"
      Properties="Configuration=$(Configuration)" >   
    </MSBuild>
  </Target>
  <Target Name="Package" DependsOnTargets="Build">
    <ItemGroup>
      <!-- All files from build -->
      <ZipFiles Include="$(DeploymentProject)\bin\$(Configuration)\**\*.*"
        Exclude="**\*.zip;**\*.pdb;**\*.vshost.*" />
    </ItemGroup>
    <Zip Files="@(ZipFiles)"
        WorkingDirectory="$(DeploymentProject)\bin\$(Configuration)\"
        ZipFileName="$(ApplicationName)-$(Configuration)-$(Version).zip"
        Flatten="True" />
    </Target>

    <Target Name="Backup">
    <ItemGroup>
      <!-- All source code -->
      <SourceFiles Include="**\*.*"
        Exclude="**\bin\**\*.*;**\obj\**\*.*;*.zip" />
    </ItemGroup>
    <Zip Files="@(SourceFiles)"
        WorkingDirectory=""
        ZipFileName="$(ApplicationName)-SourceCode-$(Version).zip" />
</Target>
</Project>
Avatar billede CodingJoe Nybegynder
17. november 2010 - 23:33 #27
Jeg kan se, den bygger i bin folderen. Så nu kommer spørgsmålet omkring mit oprindelige spørgsmål, hvordan kan jeg udnytte dette til at kunne deploye det på en test server.

Skal der køre en scheduled task af en eller anden art, som tager den kompilerede kode, og kopierer den over på en webserver.

PS! Jeg kan se at den blot kompilerer mine assemblies, men da det er en webapp, så hører der naturligvis også websider og usercontrols til, der skal med i en deployment pakke.
Avatar billede arne_v Ekspert
17. november 2010 - 23:38 #28
MSBuild er et helt lille script sprog i seig selv.

Du kan scripte mange ting.

Jeg gætter på at Copy tasket vil være praktisk!
Avatar billede CodingJoe Nybegynder
18. november 2010 - 08:49 #29
Ok...jeg forsker lige mere i det...skal have noget der fungerer efter mit hoved. Jeg vil forsøge at køre nogle automatiserede msbuild på en tfs server.
Avatar billede Syska Mester
18. november 2010 - 10:06 #30
Du kan jo gøre mange ting ...

har du kigget på WorkFlow, det burde vist også kunne automatisere det hele på en mere grafisk måde ... men har ikke prøvet det. Bag det hele bruger den nok alligevel også MSBuild.

kræver vist TFS 2010.
Avatar billede CodingJoe Nybegynder
18. november 2010 - 15:46 #31
Jeg vil ikke begive mig ud i noget mere omfattende og begynde at bruge WWF. Jeg holder mig til det simple...
Avatar billede Syska Mester
18. november 2010 - 17:22 #32
Det var også kun en ide :-)
Avatar billede CodingJoe Nybegynder
08. december 2010 - 20:47 #33
Arne...smid du bare et svar ind her...jeg har fået noget basis til at virke... :)
Avatar billede arne_v Ekspert
08. december 2010 - 21:04 #34
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester