Build utilizando Jenkins

De MSTECH wiki
Revisão de 20h08min de 1 de julho de 2016 por Daniel.alves (Discussão | contribs) (Web.config)

Ir para: navegação, pesquisa

Esta página tem como objetivo orientar os colaboradores na correta configuração do Build utilizando a plataforma Jenkins para os projetos que usam .NET. Para tanto, algumas alterações no projeto são necessárias para que o Build possa ser executado utilizando-se o próprio MSBUILD, e não a versão do Visual Studio no qual o sistema foi desenvolvido.

Alterações necessárias no Projeto

Arquivos *.csproj

Nos arquivos do projeto com extensão .csproj é necessário localizar e comentar o seguinte bloco:

1 <PropertyGroup>
2     <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
3     <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
4 </PropertyGroup>

No exemplo acima, o sistema foi desenvolvido utilizando a versão 10.0 do Visual Studio, e para que o MSBUILD possa compilar o projeto faz-se necessário comentar ou remover o bloco <PropertyGroup>.

Version.xml

É necessário alterar a estrutura do arquivo version.xml para atender a necessidade do sistema de build. Vale ressaltar que, como alguns sistemas fazem a leitura deste arquivo, faz-se necessária a alteração no sistema para efetuar a correta leitura do novo arquivo.

Arquivo antigo:

1 <?xml version="1.0" encoding="utf-8"?>
2 <configuration>
3   <versionNumber>
4     <Major value="5" />
5     <Minor value="5" />
6     <Revision value="7" />
7     <Build value="1" />
8   </versionNumber>
9 </configuration>

Arquivo novo:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <Project
 3  ToolsVersion="4.0"
 4  DefaultTargets="Default"
 5  xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 6     <PropertyGroup>
 7 	<Major>5</Major>
 8 	<Minor>5</Minor>
 9 	<Revision>7</Revision>
10 	<Build>1</Build>
11     </PropertyGroup>
12 </Project>

Zip.targets

É necessário incluir na raiz da solução o arquivo Zip.targets, que é responsável por compactar o pacote com o número da versão constante no arquivo version.xml.

  • Nota: A extensão do arquivo é .targets

Conteúdo do arquivo zip.targets

 1 <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 2 
 3   <!-- Simple ZIP task that utilize .NET 4.5 Zip Compression -->
 4   <!--
 5     Example
 6     <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
 7          ToolsVersion="4.0" DefaultTargets="Sample" >
 8       <Import Project="Zip.targets" />
 9       <Target Name="Sample" >
10           <Zip SourceFolder="C:\SomeFolder\" OutputFileName="output.zip" />
11       </Target>
12     </Project>
13     you can run this project with msbuild    
14   -->
15   <UsingTask TaskName="Zip" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
16     <ParameterGroup>
17       <SourceFolder ParameterType="System.String" Required="true"/>
18       <OutputFileName ParameterType="System.String" Required="true" />
19       <NoBackup ParameterType="System.Boolean" Required="false" />      
20     </ParameterGroup>
21     <Task>
22       <Reference Include="System.Core" />
23       <Reference Include="Microsoft.CSharp" />
24       <Reference Include="System.IO.Compression" />
25       <Reference Include="System.IO.Compression.FileSystem" />
26       <Using Namespace="System" />
27       <Using Namespace="System.IO" />
28       <Using Namespace="System.Net" />
29       <Using Namespace="System.Linq" />      
30       <Using Namespace="System.Reflection" />
31       <Using Namespace="Microsoft.Build.Framework" />
32       <Using Namespace="Microsoft.Build.Utilities" />
33       <Using Namespace="System.IO.Compression" />
34       <Code Type="Fragment" Language="cs">
35         <![CDATA[
36                 try {
37                     SourceFolder = Path.GetFullPath(SourceFolder);
38                     OutputFileName = Path.GetFullPath(OutputFileName);
39                       
40                     Log.LogMessage("Package zip... (" + OutputFileName + " )");
41                     
42                     // Prepare output temp file
43                     var tmpFile = Path.ChangeExtension(OutputFileName, ".zip.tmp");
44                     File.Delete(tmpFile);
45                     // Zip folder
46                     ZipFile.CreateFromDirectory(SourceFolder, tmpFile);
47                     // Replace output file
48                     File.Delete(OutputFileName);
49                     File.Move(tmpFile, OutputFileName);
50                     return true;
51                 }
52                 catch (Exception ex) {
53                     Log.LogErrorFromException(ex);
54                     return false;
55                 }
56             ]]>
57       </Code>
58     </Task>
59   </UsingTask>
60 </Project>

Build.xml

Todo o processo de Build está atrelado ao arquivo build.xml desenvolvido para orquestrar a execução do build dos sistemas em .NET. Este arquivo deve estar na raiz da solução.

A estrutura do arquivo é a seguinte:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <Project
 3  ToolsVersion="4.0"
 4  DefaultTargets="Compile"
 5  xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 6  
 7 	<!-- CLASSE NECESSÁRIA PARA REALIZAR O ZIP DOS ARQUIVOS, CASO MUDAR A ESTRUTURA PRECISA ATUALIZAR O CAMINHO DE ONDE VAI FICAR -->
 8 	<Import Project="Zip.targets" />
 9  
10 	<PropertyGroup>
11 		<!-- NOME DA APLICAÇÃO [SITE] -->
12 		<ProjectName>NomeDoSite</ProjectName>
13 		
14 		<!-- DIRETÓRIO DA APLICAÇÃO RAIZ -->
15 		<ProjectDir>$(ProjectName)\</ProjectDir>
16 		
17 		<!-- NOME DO CSPROJ DA APLICAÇÃO [SITE], CASO O NOME NÃO FOR O MESMO DO <PROJECTNAME> ALTERAR -->
18 		<CSProjName>$(ProjectName).csproj</CSProjName>
19 		
20 		<!-- CAMINHO DE ONDE ESTÁ O ARQUIVO CSPROJ DA SOLUÇÃO [SITE] -->
21 		<ProjectPath>$(ProjectDir)$(CSProjName)</ProjectPath>
22 		
23 		<!-- PASTA AUXILIAR PARA JOGAR A COMPILAÇÃO, ZIPAR E NO FIM É EXCLUIDA -->
24 		<TargetDir>PackageBuild\</TargetDir>
25 		
26 		<!-- PASTA DEFAULT ONDE SERÁ COLOCADO AS DLL APÓS A COMPILAÇÃO DENTRO DO DIRETÓRIO AUXILIAR -->
27 		<TargetBinDir>$(TargetDir)\bin</TargetBinDir>
28 		
29 		<!-- ONDE VAI FICAR O ZIP DO BUILD -->
30 		<TargetBuildZip>Builds</TargetBuildZip>
31 
32 		<!-- NÃO ALTERAR -->
33 		<Configuration Condition=" '$(Configuration)' == '' ">Release</Configuration>
34 		<BuildPlatform Condition=" '$(BuildPlatform)' == '' ">Any CPU</BuildPlatform>
35 	</PropertyGroup>
36 	
37 	<ItemGroup>
38 		<BuildArtifactsDir Include="$(TargetBinDir)\" />
39 		<ProjectsToBuild Include="$(ProjectDir)\$(CSProjName)"/>
40 	</ItemGroup>
41 	
42 	<Import Project="$(ProjectDir)\version.xml" />
43 	
44 	<!-- LIMPA OS REGISTROS CASO EXISTA, E CRIA A PASTA PADRÃO ONDE FICARÁ OS ZIP -->
45 	<Target Name="Clean">
46 		<MakeDir Directories="$(TargetBuildZip)"/>
47         <RemoveDir Directories="$(TargetDir)" />
48     </Target>
49 	
50 	<!-- COPIA OS ARQUIVOS NECESSÁRIOS DO SITE [ITEMS QUE ESTÁ DENTRO DO CSPROJ ex:(<Content Include="Administracao\Configuracoes\Configuracao\Busca.aspx" />)] -->
51 	<Target Name="CopyProject" DependsOnTargets="Clean">
52 	 <!-- Get list of CS and RES files -->
53 		 <XmlPeek
54 		 Namespaces="&lt;Namespace Prefix='msb' Uri='http://schemas.microsoft.com/developer/msbuild/2003'/&gt;"
55 		 XmlInputPath="$(ProjectPath)"
56 		 Query="/msb:Project/msb:ItemGroup/msb:Content/@Include|/msb:Project/msb:ItemGroup/msb:EmbeddedResource/@Include">
57 
58 		 <Output TaskParameter="Result" ItemName="Peeked" />
59 
60 		 </XmlPeek>
61 		 <!-- Copy source and resource files -->
62 		 <Copy
63 		 SourceFiles="@(Peeked->'$(ProjectDir)%(RelativeDir)%(Filename)%(Extension)')"
64 		 DestinationFiles="@(Peeked->'$(TargetDir)%(RelativeDir)%(Filename)%(Extension)')"/>
65 		 <!-- Copy project file -->
66 		 <Copy
67 		 SourceFiles="$(ProjectPath)"
68 		 DestinationFiles="$(ProjectDir)$(CSProjName)"/>
69 
70 		 <MSBuild Projects="$(ProjectDir)$(CSProjName)"/>
71 
72 	</Target>
73 	
74 	<!-- LIMPA A PASTA BIN DA PASTA AUXILIAR CASO EXISTA -->
75 	<Target Name="CleanBin" DependsOnTargets="CopyProject">
76          <RemoveDir Directories="$(TargetBinDir)" />
77     </Target>
78 	
79 	<!-- REALIZA O BUILD DA SOLUÇÃO GERANDO AS DLL's -->
80 	<Target Name="BuildCompile" DependsOnTargets="CleanBin">
81 	<MSBuild Projects="@(ProjectsToBuild)" Targets="Rebuild"
82                   Properties="outdir=%(BuildArtifactsDir.FullPath);Configuration=$(Configuration)" />
83     </Target>
84 	
85 	<!-- REALIZA O ZIP DA PASTA AUXILIAR E JOGA PARA A PASTA PADRÃO ONDE FICARÁ O ZIP -->
86 	<Target Name="Zip" DependsOnTargets="BuildCompile" >
87 		<Zip SourceFolder="$(TargetDir)" OutputFileName="$(TargetBuildZip)\$(ProjectName)_$(Major).$(Minor).$(Revision).$(Build).zip" />
88     </Target>
89 	
90 	<!-- APAGA A PASTA AUXILIAR -->
91 	<Target Name="Compile" DependsOnTargets="Zip">
92          <RemoveDir Directories="$(TargetDir)" />
93     </Target>
94 
95 </Project>

Alterações sugeridas

Web.config

Atualmente o web.config do site não é armazenado juntamente com o projeto, pois o mesmo "varia" de acordo com cada cliente. Uma forma de permitir esse armazenamento do web.config no projeto é alterar a sua estrutura, criando arquivos adicionais que são invocados pelo mesmo, mas estão protegidos em outra pasta. Desta forma, o web.config pode ser um arquivo padrão, sendo que os parâmetros de cada cliente estarão em arquivos individuais.

Para tanto, precisamos remover todas as configurações individuais do arquivo "web.config". Abaixo, um exemplo de um arquivo utilizado em um dos projetos da MSTECH que segue esse padrão:

  1 <?xml version="1.0"?>
  2 <!--
  3   For more information on how to configure your ASP.NET application, please visit
  4   http://go.microsoft.com/fwlink/?LinkId=301879
  5   -->
  6 <configuration>
  7   <configSections>
  8     <!--SAML config section-->
  9     <section name="ServiceProvider" type="MSTech.SAML20.Configuration.ConfigurationReader, MSTech.SAML20"/>
 10     <!-- Log4net config section -->
 11     <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
 12     <!-- FileStorage config section -->
 13     <section name="fileStorage" type="MSTech.FileStorage.Core.FileSystemConfiguration, MSTech.FileStorage.Core"/>
 14     <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
 15     <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
 16     <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
 17     <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
 18   </configSections>
 19   <!--SAML config source-->
 20   <ServiceProvider configSource="Configs\saml.config"/>
 21   <!-- log4net config source -->
 22   <log4net configSource="Configs\log4net.config"/>
 23   <!-- fileStorage source -->
 24   <fileStorage configSource="Configs\filestorage.config"/>
 25   <!-- connectionStrings source -->
 26   <!--<connectionStrings configSource="Configs\connection.config"></connectionStrings>-->
 27   <appSettings>
 28     <add key="bundle:EnableOptimizations" value="false"/>
 29     <add key="webpages:Version" value="3.0.0.0"/>
 30     <add key="webpages:Enabled" value="false"/>
 31     <add key="ClientValidationEnabled" value="true"/>
 32     <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
 33     <add key="log4net.Internal.Debug" value="true"/>
 34     <add key="aspnet:MaxJsonDeserializerMembers" value="10000"/>
 35   </appSettings>
 36   <system.web>
 37     <!--"forms": -->
 38     <authentication mode="Forms">
 39       <forms name="3FB22D4A-6407-454E-B66F-000F2FFD1ECE" cookieless="UseCookies" timeout="60" protection="All" slidingExpiration="true" loginUrl="Account/LogoutSSO" path="/"/>
 40     </authentication>
 41     <!--"sessionState": -->
 42     <sessionState cookieName="F740F707-D127-412E-A34F-000F24A6CD37" cookieless="UseCookies" timeout="60" mode="InProc"/>
 43     <!--"customErrors": Habilitar página de erro personalizada -->
 44     <!--<customErrors mode="On" />-->
 45     <customErrors mode="RemoteOnly"/>
 46     <httpRuntime targetFramework="4.5" maxRequestLength="10000"/>
 47     <!-- Performance: Buffer -->
 48     <pages buffer="true" enableViewState="false"/>
 49     <!--"caching": Configura o cache de saída -->
 50     <!-- CacheDay = 1d -->
 51     <!-- CacheHour = 1h -->
 52     <caching>
 53       <outputCache enableOutputCache="false"/>
 54       <outputCacheSettings>
 55         <outputCacheProfiles>
 56           <add name="CacheDay" duration="86400" varyByParam="*"/>
 57           <add name="CacheHour" duration="3600" varyByParam="*" enabled="false"/>
 58         </outputCacheProfiles>
 59       </outputCacheSettings>
 60     </caching>
 61     <machineKey decryption="Auto" decryptionKey="CDC7A465F34F652CD3FA574A7214C1836799D4D960554801" validationKey="CF0EE132931281163550B2297B017030712EB1AFDE85FDF7844F244651785EB636FD0A3A2B2DBA0EB377A51E60901329B7BA717994D295351B35503E100C68D8"/>
 62     <compilation debug="true"/>
 63   </system.web>
 64   <runtime>
 65     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
 66       <dependentAssembly>
 67         <assemblyIdentity name="Newtonsoft.Json" culture="neutral" publicKeyToken="30ad4fe6b2a6aeed"/>
 68         <bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0"/>
 69       </dependentAssembly>
 70       <dependentAssembly>
 71         <assemblyIdentity name="System.Web.Optimization" publicKeyToken="31bf3856ad364e35"/>
 72         <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="1.1.0.0"/>
 73       </dependentAssembly>
 74       <dependentAssembly>
 75         <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35"/>
 76         <bindingRedirect oldVersion="0.0.0.0-1.6.5135.21930" newVersion="1.6.5135.21930"/>
 77       </dependentAssembly>
 78       <dependentAssembly>
 79         <assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" culture="neutral"/>
 80         <bindingRedirect oldVersion="0.0.0.0-1.2.15.0" newVersion="1.2.15.0"/>
 81       </dependentAssembly>
 82       <dependentAssembly>
 83         <assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral"/>
 84         <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0"/>
 85       </dependentAssembly>
 86       <dependentAssembly>
 87         <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35"/>
 88         <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
 89       </dependentAssembly>
 90       <dependentAssembly>
 91         <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35"/>
 92         <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
 93       </dependentAssembly>
 94       <dependentAssembly>
 95         <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
 96         <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0"/>
 97       </dependentAssembly>
 98       <dependentAssembly>
 99         <assemblyIdentity name="Antlr3.Runtime" publicKeyToken="eb42632606e9261f" culture="neutral"/>
100         <bindingRedirect oldVersion="0.0.0.0-3.5.0.2" newVersion="3.5.0.2"/>
101       </dependentAssembly>
102       <dependentAssembly>
103         <assemblyIdentity name="Microsoft.VisualStudio.Enterprise.AspNetHelper" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
104         <codeBase version="12.0.0.0" href="file:///C:/Program%20Files%20(x86)/Microsoft%20Visual%20Studio%2012.0/Common7/IDE/PrivateAssemblies/Microsoft.VisualStudio.Enterprise.AspNetHelper.DLL"/>
105       </dependentAssembly>
106     </assemblyBinding>
107   </runtime>
108   <entityFramework>
109     <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
110       <parameters>
111         <parameter value="mssqllocaldb"/>
112       </parameters>
113     </defaultConnectionFactory>
114     <providers>
115       <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer"/>
116     </providers>
117   </entityFramework>
118   <system.webServer>
119     <!-- PassThrough – If existingResponse is seen as “PassThrough”,
120     custom error module will always pass through responses from modules.
121     This setting will make custom error module return blank response if modules don’t set any text.-->
122     <httpErrors existingResponse="PassThrough"/>
123     <!-- Performance: Compressão de arquivos dinâmicos, estáticos e antes de enviar para OutPutCache-->
124     <urlCompression doDynamicCompression="true" doStaticCompression="true" dynamicCompressionBeforeCache="true"/>
125     <!-- Performance: Cache de conteúdo estático 1 hora-->
126     <staticContent>
127       <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="1.00:00:00"/>
128     </staticContent>
129   </system.webServer>
130 </configuration>

Os arquivos relacionados com esse sistema são:

saml.config

1 <ServiceProvider id="http://localhost:59494/Account" xmlns="urn:MSTech.SAML20.Configuration">
2 
3   <ServiceEndpoint type="signon" localpath="http://localhost:59494/Home" redirectUrl="http://localhost:54296/SAML/Signon.aspx">
4     <SigningCertificate keyFile="~/samlcert.pfx" password="YS2OglvxHMwaTWXkzeTOTw==" />
5   </ServiceEndpoint>
6   <ServiceEndpoint type="logout" localpath="http://localhost:59494/Account/LogoutSSO" redirectUrl="http://localhost:54296/Logout.ashx" />
7 </ServiceProvider>

log4net.config

  1 <log4net debug="true">
  2 
  3   <logger name="Errors">
  4     <level value="ALL"/>
  5     <appender-ref ref="AdoNetAppender_LogError"/>
  6   </logger>
  7 
  8   <logger name="Activity">
  9     <level value="ALL"/>
 10     <appender-ref ref="AdoNetAppender_LogActivity"/>
 11   </logger>
 12 
 13   <appender name="AdoNetAppender_LogError" type="log4net.Appender.AdoNetAppender">
 14     <bufferSize value="1" />    
 15     <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />    
 16     <commandText value="INSERT INTO LogError ([Date],[Level],[Logger],[Message],[Exception],[Browser],[HostName],[UserHostAddress],[QueryString],[FilePath],[Identity],[Plataform],[MobileDeviceModel]) VALUES (@log_date,@log_level,@logger,@message,@exception,@Browser,@HostName,@UserHostAddress,@QueryString,@FilePath,@Identity,@Plataform,@MobileDeviceModel)" />
 17     <parameter>
 18       <parameterName value="@log_date"/>
 19       <dbType value="DateTime"/>
 20       <layout type="log4net.Layout.RawTimeStampLayout"/>
 21     </parameter>
 22     <parameter>
 23       <parameterName value="@log_level"/>
 24       <dbType value="String"/>
 25       <size value="50"/>
 26       <layout type="log4net.Layout.PatternLayout">
 27         <conversionPattern value="%level"/>
 28       </layout>
 29     </parameter>
 30     <parameter>
 31       <parameterName value="@logger"/>
 32       <dbType value="String"/>
 33       <size value="255"/>
 34       <layout type="log4net.Layout.PatternLayout">
 35         <conversionPattern value="%logger"/>
 36       </layout>
 37     </parameter>
 38     <parameter>
 39       <parameterName value="@message"/>
 40       <dbType value="String"/>
 41       <size value="4000"/>
 42       <layout type="log4net.Layout.PatternLayout">
 43         <conversionPattern value="%message"/>
 44       </layout>
 45     </parameter>
 46     <parameter>
 47       <parameterName value="@exception"/>
 48       <dbType value="String"/>
 49       <size value="8000"/>
 50       <layout type="log4net.Layout.ExceptionLayout"/>
 51     </parameter>
 52     <parameter>
 53       <parameterName value="@Browser"/>
 54       <dbType value="String"/>
 55       <size value="250"/>
 56       <layout type="log4net.Layout.PatternLayout">
 57         <conversionPattern value="%property{Browser}"/>
 58       </layout>
 59     </parameter>
 60     <parameter>
 61       <parameterName value="@HostName"/>
 62       <dbType value="String"/>
 63       <size value="500"/>
 64       <layout type="log4net.Layout.PatternLayout">
 65         <conversionPattern value="%property{HostName}"/>
 66       </layout>
 67     </parameter>
 68     <parameter>
 69       <parametername value="@UserHostAddress"/>
 70       <dbtype value="string"/>
 71       <size value="500"/>
 72       <layout type="log4net.layout.patternlayout">
 73         <conversionpattern value="%property{UserHostAddress}"/>
 74       </layout>
 75     </parameter>
 76     <parameter>
 77       <parametername value="@QueryString"/>
 78       <dbtype value="string"/>
 79       <size value="500"/>
 80       <layout type="log4net.layout.patternlayout">
 81         <conversionpattern value="%property{QueryString}"/>
 82       </layout>
 83     </parameter>
 84     <parameter>
 85       <parametername value="@FilePath"/>
 86       <dbtype value="string"/>
 87       <size value="250"/>
 88       <layout type="log4net.layout.patternlayout">
 89         <conversionpattern value="%property{FilePath}"/>
 90       </layout>
 91     </parameter>
 92     <parameter>
 93       <parametername value="@Identity"/>
 94       <dbtype value="string"/>
 95       <size value="250"/>
 96       <layout type="log4net.layout.patternlayout">
 97         <conversionpattern value="%property{Identity}"/>
 98       </layout>
 99     </parameter>
100     <parameter>
101       <parametername value="@Plataform"/>
102       <dbtype value="string"/>
103       <size value="250"/>
104       <layout type="log4net.layout.patternlayout">
105         <conversionpattern value="%property{Plataform}"/>
106       </layout>
107     </parameter>
108     <parameter>
109       <parametername value="@MobileDeviceModel"/>
110       <dbtype value="string"/>
111       <size value="250"/>
112       <layout type="log4net.layout.patternlayout">
113         <conversionpattern value="%property{MobileDeviceModel}"/>
114       </layout>
115     </parameter>
116   </appender>
117 
118   <appender name="AdoNetAppender_LogActivity" type="log4net.Appender.AdoNetAppender">
119     <bufferSize value="1" />
120     <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />    
121     <commandText value="INSERT INTO LogActivity ([Date],[Message],[Action],[Browser],[HostName],[UserHostAddress],[QueryString],[FilePath],[Identity],[Plataform],[MobileDeviceModel]) VALUES (@log_date,@Message,@Action,@Browser,@HostName,@UserHostAddress,@QueryString,@FilePath,@Identity,@Plataform,@MobileDeviceModel)" />
122     <parameter>
123       <parameterName value="@log_date"/>
124       <dbType value="DateTime"/>
125       <layout type="log4net.Layout.RawTimeStampLayout"/>
126     </parameter>
127     <parameter>
128       <parameterName value="@message"/>
129       <dbType value="String"/>
130       <size value="4000"/>
131       <layout type="log4net.Layout.PatternLayout">
132         <conversionPattern value="%message"/>
133       </layout>
134     </parameter>
135     <parameter>
136       <parameterName value="@Action"/>
137       <dbType value="String"/>
138       <size value="30"/>
139       <layout type="log4net.Layout.PatternLayout">
140         <conversionPattern value="%property{Action}"/>
141       </layout>
142     </parameter>
143     <parameter>
144       <parameterName value="@Browser"/>
145       <dbType value="String"/>
146       <size value="250"/>
147       <layout type="log4net.Layout.PatternLayout">
148         <conversionPattern value="%property{Browser}"/>
149       </layout>
150     </parameter>
151     <parameter>
152       <parameterName value="@HostName"/>
153       <dbType value="String"/>
154       <size value="500"/>
155       <layout type="log4net.Layout.PatternLayout">
156         <conversionPattern value="%property{HostName}"/>
157       </layout>
158     </parameter>
159     <parameter>
160       <parameterName value="@UserHostAddress"/>
161       <dbType value="String"/>
162       <size value="500"/>
163       <layout type="log4net.Layout.PatternLayout">
164         <conversionPattern value="%property{UserHostAddress}"/>
165       </layout>
166     </parameter>
167     <parameter>
168       <parameterName value="@QueryString"/>
169       <dbType value="String"/>
170       <size value="500"/>
171       <layout type="log4net.Layout.PatternLayout">
172         <conversionPattern value="%property{QueryString}"/>
173       </layout>
174     </parameter>
175     <parameter>
176       <parameterName value="@FilePath"/>
177       <dbType value="String"/>
178       <size value="250"/>
179       <layout type="log4net.Layout.PatternLayout">
180         <conversionPattern value="%property{FilePath}"/>
181       </layout>
182     </parameter>
183     <parameter>
184       <parameterName value="@Identity"/>
185       <dbType value="String"/>
186       <size value="250"/>
187       <layout type="log4net.Layout.PatternLayout">
188         <conversionPattern value="%property{Identity}"/>
189       </layout>
190     </parameter>
191     <parameter>
192       <parameterName value="@Plataform"/>
193       <dbType value="String"/>
194       <size value="250"/>
195       <layout type="log4net.Layout.PatternLayout">
196         <conversionPattern value="%property{Plataform}"/>
197       </layout>
198     </parameter>
199     <parameter>
200       <parameterName value="@MobileDeviceModel"/>
201       <dbType value="String"/>
202       <size value="250"/>
203       <layout type="log4net.Layout.PatternLayout">
204         <conversionPattern value="%property{MobileDeviceModel}"/>
205       </layout>
206     </parameter>
207   </appender>
208 
209   <!--<root>
210     <level value="DEBUG" />
211     <appender-ref ref="AdoNetAppender_LogError" />
212     <appender-ref ref="AdoNetAppender_LogActivity" />
213   </root>-->
214 
215 </log4net>

filestorage

1 <!-- Quando utilizado o diretório virtual, necessário que o mesmo faça referência para ao diretório
2      <fileStorage directory="Files" virtualDirectoryAlias="Files" />
3 -->
4 <fileStorage directory="Files" virtualDirectoryAlias="" />

connection.config

1 <connectionStrings>
2   <add name="GestaoFinanceira.LogMongoDB" connectionString="mongodb://devedu-nodejs:27017/GestaoFinanceira" />
3 </connectionStrings>

Configurando o Build no Jenkins