2014 - dotnetcologne: build, builder, am buildesten

Post on 26-Jun-2015

335 Views

Category:

Software

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Ohne den Build ist Code nichts. Mit Continous Integration und Delivery wird er auch für nicht-Programmierer wichtig. Der Build-Server ist der Herzschlag eines Software-produzierenden Teams. Aber würdigen wir das auch so? Wer liest den schon Mails von Jenkins? Weg guckt auf das Dashboard von TeamCity? Aus einer Anforderung in einem Projekt hat sich Daniel gefragt, was man anders machen kann und das eine oder andere selbst implementiert. In dieser Session gibt es Ideen, Konzepte, Lösungen und Umsetzung in C# Code und JavaScript mit AngularJS.

TRANSCRIPT

lennybacon.com

BUILD BUILD BUILD

Daniel Fisher

lennybacon.com

Daniel Fisher

• Freelancer

– Developer, Architect, Coach, Trainer

• Justcommunity.de

– Mit-Gründer und Vorstand

• nrwconf.de

– Mit-Gründer und Organisator

• netug-niederrhein.de

– Mit-Gründer und Ex-Leiter

• microsoft.com

– Certified Professional Developer

– Business Platform Technology Advisor

• lennybacon.com

– Blog

• twitter.com

– @lennybacon

lennybacon.com

EFFICIENT COMMUNICATION…

lennybacon.com

© Daniel Fisher

Build, Build, Build

Daniel Fisher | info@lennybacon.com

lennybacon.com

Objectives

Serious Software Development

Product Delivery

C#/.NET

AppDomains

MsBuild

REST APIs

AngularJS

Code Quality

NuGet

lennybacon.com

Agenda

• What is a Build?

• MsBuild

• Hosting MsBuild in ASP.NET (YABS?)

• MsMetrics, FxCop & Co.

• Nunit

• …

lennybacon.com

WHAT IS A BUILD?

lennybacon.com

https://www.flickr.com/photos/86931652@N00/392470198

lennybacon.com

lennybacon.com

MSBUILD

lennybacon.com

News?

• MSBuild is now installed as part of Visual

Studio rather than as part of the .NET

Framework.

– The current MSBuild version number is 12.0. If

you want to install MSBuild separately, download

the installation package from MSBuild Download

(http://go.microsoft.com/fwlink/?LinkId=309745).

lennybacon.com

Properties

• Named Value Pairs

– Variables of the Build script

• Part of a PropertyGroup

• Referenced as scalar values

– Using the $() syntax

<PropertyGroup><AssemblyName>MyAssemblyName</AssemblyName>

</PropertyGroup>

lennybacon.com

Items

• Items are Inputs

– Source files, references…

• Part of a ItemGroup

• Items are referenced as groups

– Using the @() syntax

<ItemGroup><CSFile Include="MyLib\Class1.cs" /><CSFile Include="MyLib\Properties\AssemblyInfo.cs" /><Reference Include="System.dll" />

</ItemGroup>

lennybacon.com

Targets and Tasks

• Tasks are Steps that are performed in a build

process as Part of a Target

• A build can be told which target(s) to execute

<Target Name="Compile">

<MSBuild

Projects="MyLibrary\MyLibrary.sln"

Properties="Configuration=Release"/>

</Target>

lennybacon.com

Clone-Repository

Update-Version

Update-Dependencies

Generate-Code

Compile-Code

Test-Code

Analyze-Code

Document-Code

lennybacon.com

Custom Tasks

public class MyTask : Task

{

override void Execute(){

//TODO: Write your stuff here ...

}

}

lennybacon.com

http://www.flickr.com/photos/64550677@N06/12829392063/

lennybacon.com

http://www.flickr.com/photos/toaireisdivine/7245696024/

lennybacon.com

https://www.flickr.com/photos/seelensturm/4046487038

lennybacon.com

YET ANOTHER BUILD SERVER?

lennybacon.com

© Daniel Fisher

lennybacon.com

Clone-Repository

Update-Version

Update-Dependencies

Generate-Code

Compile-Code

Test-Code

Analyze-Code

Package-Output

Sign-Package

Deploy-Package

Test-DeploymentSign-Output

Publish-Package

Notify-Stakeholders

Document-Code

Generate-Manual

Report-Results

lennybacon.com

lennybacon.com

© Daniel Fisher

lennybacon.com

© Daniel Fisher

lennybacon.com

© Daniel Fisher

lennybacon.com

lennybacon.com

https://www.flickr.com/photos/hectoralejandro/3967217852

lennybacon.com

lennybacon.com

API

GET /api/builds

POST /api/builds

GET /api/builds/{slug}

PUT /api/builds/{slug}

PATCH /api/builds/{slug}

DELETE /api/builds/{slug}

BUILD /api/builds/{slug}

GET /api/runningBuild/{id}

lennybacon.com

lennybacon.com

Custom Verbs with Web API

using System.Net;using System.Net.Http;using System.Web.Http;

namespace WebApplication1.Controllers{public class BuildController : ApiController{[Route("api/builds/{id}")][AcceptVerbsAttribute("GET", "BUILD")]public HttpResponseMessage Build(Guid value){return new HttpResponseMessage(HttpStatusCode.OK);

}}

}

lennybacon.com

https://www.flickr.com/photos/25726169@N03/8600834488

lennybacon.com

HOSTING MSBUILD

lennybacon.com

References

• Microsoft.Build.dll

• Microsoft.Build.Engine.dll

• Microsoft.Build.Framework.dll

lennybacon.com

Programmatically run a build

public bool Run(string msBuildFile, Dictionary<string, string> properties)

{

var envVer = Environment.Version;

var toolsVersion = envVer.Major + "." + envVer.MajorRevision;

var project = new ProjectInstance(msBuildFile, properties, toolsVersion);

var buildRequestData = new BuildRequestData(project, new string[] { });

var buildParameters = new BuildParameters

{

BuildThreadPriority = ThreadPriority.Highest,

DefaultToolsVersion = toolsVersion,

UseSynchronousLogging = true

};

return

BuildManager.DefaultBuildManager.Build(

buildParameters,

buildRequestData

).OverallResult == BuildResultCode.Success;

}

lennybacon.com

https://www.flickr.com/photos/jlauletta/14058076975

lennybacon.com

APPDOMAIN ISOLATION

lennybacon.com

Run in another AppDomain

var appDomainSetup = new AppDomainSetup {

PrivateBinPath = appPath,

ApplicationBase = appPath};var appDomain =

AppDomain.CreateDomain(

appName,new Evidence(AppDomain.CurrentDomain.Evidence),

appDomainSetup);

var proxyObject =

appDomain.CreateInstanceFromAndUnwrap(Assembly.GetExecutingAssembly().Location,

typeof (AppDomainManager).FullName);

AppDomain.Unload(appDomain);

lennybacon.com

https://www.flickr.com/photos/ryan2point0/4986543660

lennybacon.com

READ LENNYBACON.COM

FOLLOW @LENNYBACON

LINK LINKEDIN.COM/IN/LENNYBACON

XING XING.COM/PROFILE/DANIEL_FISHER

FRIEND FB.COM/DANIEL.FISHER.LENNYBACON

MAIL DANIEL.FISHER@LENNYBACON.COM

CALL +49 (176) 6159 8612

top related