|
|
| (3 revisões intermediárias pelo mesmo usuário não estão sendo mostradas) |
| Linha 1: |
Linha 1: |
| − | 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. | + | Esta página tem como objetivo orientar os colaboradores na correta configuração do Build utilizando o Jenkins para os projetos desenvolvidos em .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 ==
| + | O novo modelo de Build adotado pela MSTech encontra-se disponível no link: [//gitlab.mstech.com.br/build-dotnet/cake-mstech/wikis/home Manual do Build/Jenkins] |
| − | | + | |
| − | === Arquivos ''*.csproj'' ===
| + | |
| − | Nos arquivos do projeto com extensão .csproj é necessário localizar e comentar o seguinte bloco:
| + | |
| − | | + | |
| − | <syntaxhighlight lang="xml" line="1" >
| + | |
| − | <PropertyGroup>
| + | |
| − | <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
| + | |
| − | <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
| + | |
| − | </PropertyGroup>
| + | |
| − | </syntaxhighlight>
| + | |
| − | | + | |
| − | 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:
| + | |
| − | <syntaxhighlight lang="xml" line="1" >
| + | |
| − | <?xml version="1.0" encoding="utf-8"?>
| + | |
| − | <configuration>
| + | |
| − | <versionNumber>
| + | |
| − | <Major value="5" />
| + | |
| − | <Minor value="5" />
| + | |
| − | <Revision value="7" />
| + | |
| − | <Build value="1" />
| + | |
| − | </versionNumber>
| + | |
| − | </configuration>
| + | |
| − | </syntaxhighlight>
| + | |
| − | | + | |
| − | Arquivo novo:
| + | |
| − | <syntaxhighlight lang="xml" line="1" >
| + | |
| − | <?xml version="1.0" encoding="utf-8"?>
| + | |
| − | <Project
| + | |
| − | ToolsVersion="4.0"
| + | |
| − | DefaultTargets="Default"
| + | |
| − | xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
| + | |
| − | <PropertyGroup>
| + | |
| − | <Major>5</Major>
| + | |
| − | <Minor>5</Minor>
| + | |
| − | <Revision>7</Revision>
| + | |
| − | <Build>1</Build>
| + | |
| − | </PropertyGroup>
| + | |
| − | </Project>
| + | |
| − | </syntaxhighlight>
| + | |
| − | | + | |
| − | === 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
| + | |
| − | | + | |
| − | <syntaxhighlight lang="xml" line="1" >
| + | |
| − | <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
| + | |
| − | | + | |
| − | <!-- Simple ZIP task that utilize .NET 4.5 Zip Compression -->
| + | |
| − | <!--
| + | |
| − | Example
| + | |
| − | <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
| + | |
| − | ToolsVersion="4.0" DefaultTargets="Sample" >
| + | |
| − | <Import Project="Zip.targets" />
| + | |
| − | <Target Name="Sample" >
| + | |
| − | <Zip SourceFolder="C:\SomeFolder\" OutputFileName="output.zip" />
| + | |
| − | </Target>
| + | |
| − | </Project>
| + | |
| − | you can run this project with msbuild
| + | |
| − | -->
| + | |
| − | <UsingTask TaskName="Zip" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
| + | |
| − | <ParameterGroup>
| + | |
| − | <SourceFolder ParameterType="System.String" Required="true"/>
| + | |
| − | <OutputFileName ParameterType="System.String" Required="true" />
| + | |
| − | <NoBackup ParameterType="System.Boolean" Required="false" />
| + | |
| − | </ParameterGroup>
| + | |
| − | <Task>
| + | |
| − | <Reference Include="System.Core" />
| + | |
| − | <Reference Include="Microsoft.CSharp" />
| + | |
| − | <Reference Include="System.IO.Compression" />
| + | |
| − | <Reference Include="System.IO.Compression.FileSystem" />
| + | |
| − | <Using Namespace="System" />
| + | |
| − | <Using Namespace="System.IO" />
| + | |
| − | <Using Namespace="System.Net" />
| + | |
| − | <Using Namespace="System.Linq" />
| + | |
| − | <Using Namespace="System.Reflection" />
| + | |
| − | <Using Namespace="Microsoft.Build.Framework" />
| + | |
| − | <Using Namespace="Microsoft.Build.Utilities" />
| + | |
| − | <Using Namespace="System.IO.Compression" />
| + | |
| − | <Code Type="Fragment" Language="cs">
| + | |
| − | <![CDATA[
| + | |
| − | try {
| + | |
| − | SourceFolder = Path.GetFullPath(SourceFolder);
| + | |
| − | OutputFileName = Path.GetFullPath(OutputFileName);
| + | |
| − |
| + | |
| − | Log.LogMessage("Package zip... (" + OutputFileName + " )");
| + | |
| − |
| + | |
| − | // Prepare output temp file
| + | |
| − | var tmpFile = Path.ChangeExtension(OutputFileName, ".zip.tmp");
| + | |
| − | File.Delete(tmpFile);
| + | |
| − | // Zip folder
| + | |
| − | ZipFile.CreateFromDirectory(SourceFolder, tmpFile);
| + | |
| − | // Replace output file
| + | |
| − | File.Delete(OutputFileName);
| + | |
| − | File.Move(tmpFile, OutputFileName);
| + | |
| − | return true;
| + | |
| − | }
| + | |
| − | catch (Exception ex) {
| + | |
| − | Log.LogErrorFromException(ex);
| + | |
| − | return false;
| + | |
| − | }
| + | |
| − | ]]>
| + | |
| − | </Code>
| + | |
| − | </Task>
| + | |
| − | </UsingTask>
| + | |
| − | </Project>
| + | |
| − | </syntaxhighlight>
| + | |
| − | | + | |
| − | === 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:
| + | |
| − | <syntaxhighlight lang="xml" line="1" >
| + | |
| − | <?xml version="1.0" encoding="utf-8"?>
| + | |
| − | <Project
| + | |
| − | ToolsVersion="4.0"
| + | |
| − | DefaultTargets="Compile"
| + | |
| − | xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
| + | |
| − |
| + | |
| − | <!-- CLASSE NECESSÁRIA PARA REALIZAR O ZIP DOS ARQUIVOS, CASO MUDAR A ESTRUTURA PRECISA ATUALIZAR O CAMINHO DE ONDE VAI FICAR -->
| + | |
| − | <Import Project="Zip.targets" />
| + | |
| − |
| + | |
| − | <PropertyGroup>
| + | |
| − | <!-- NOME DA APLICAÇÃO [SITE] -->
| + | |
| − | <ProjectName>NomeDoSite</ProjectName>
| + | |
| − |
| + | |
| − | <!-- DIRETÓRIO DA APLICAÇÃO RAIZ -->
| + | |
| − | <ProjectDir>$(ProjectName)\</ProjectDir>
| + | |
| − |
| + | |
| − | <!-- NOME DO CSPROJ DA APLICAÇÃO [SITE], CASO O NOME NÃO FOR O MESMO DO <PROJECTNAME> ALTERAR -->
| + | |
| − | <CSProjName>$(ProjectName).csproj</CSProjName>
| + | |
| − |
| + | |
| − | <!-- CAMINHO DE ONDE ESTÁ O ARQUIVO CSPROJ DA SOLUÇÃO [SITE] -->
| + | |
| − | <ProjectPath>$(ProjectDir)$(CSProjName)</ProjectPath>
| + | |
| − |
| + | |
| − | <!-- PASTA AUXILIAR PARA JOGAR A COMPILAÇÃO, ZIPAR E NO FIM É EXCLUIDA -->
| + | |
| − | <TargetDir>PackageBuild\</TargetDir>
| + | |
| − |
| + | |
| − | <!-- PASTA DEFAULT ONDE SERÁ COLOCADO AS DLL APÓS A COMPILAÇÃO DENTRO DO DIRETÓRIO AUXILIAR -->
| + | |
| − | <TargetBinDir>$(TargetDir)\bin</TargetBinDir>
| + | |
| − |
| + | |
| − | <!-- ONDE VAI FICAR O ZIP DO BUILD -->
| + | |
| − | <TargetBuildZip>Builds</TargetBuildZip>
| + | |
| − | | + | |
| − | <!-- NÃO ALTERAR -->
| + | |
| − | <Configuration Condition=" '$(Configuration)' == '' ">Release</Configuration>
| + | |
| − | <BuildPlatform Condition=" '$(BuildPlatform)' == '' ">Any CPU</BuildPlatform>
| + | |
| − | </PropertyGroup>
| + | |
| − |
| + | |
| − | <ItemGroup>
| + | |
| − | <BuildArtifactsDir Include="$(TargetBinDir)\" />
| + | |
| − | <ProjectsToBuild Include="$(ProjectDir)\$(CSProjName)"/>
| + | |
| − | </ItemGroup>
| + | |
| − |
| + | |
| − | <Import Project="$(ProjectDir)\version.xml" />
| + | |
| − |
| + | |
| − | <!-- LIMPA OS REGISTROS CASO EXISTA, E CRIA A PASTA PADRÃO ONDE FICARÁ OS ZIP -->
| + | |
| − | <Target Name="Clean">
| + | |
| − | <MakeDir Directories="$(TargetBuildZip)"/>
| + | |
| − | <RemoveDir Directories="$(TargetDir)" />
| + | |
| − | </Target>
| + | |
| − |
| + | |
| − | <!-- COPIA OS ARQUIVOS NECESSÁRIOS DO SITE [ITEMS QUE ESTÁ DENTRO DO CSPROJ ex:(<Content Include="Administracao\Configuracoes\Configuracao\Busca.aspx" />)] -->
| + | |
| − | <Target Name="CopyProject" DependsOnTargets="Clean">
| + | |
| − | <!-- Get list of CS and RES files -->
| + | |
| − | <XmlPeek
| + | |
| − | Namespaces="<Namespace Prefix='msb' Uri='http://schemas.microsoft.com/developer/msbuild/2003'/>"
| + | |
| − | XmlInputPath="$(ProjectPath)"
| + | |
| − | Query="/msb:Project/msb:ItemGroup/msb:Content/@Include|/msb:Project/msb:ItemGroup/msb:EmbeddedResource/@Include">
| + | |
| − | | + | |
| − | <Output TaskParameter="Result" ItemName="Peeked" />
| + | |
| − | | + | |
| − | </XmlPeek>
| + | |
| − | <!-- Copy source and resource files -->
| + | |
| − | <Copy
| + | |
| − | SourceFiles="@(Peeked->'$(ProjectDir)%(RelativeDir)%(Filename)%(Extension)')"
| + | |
| − | DestinationFiles="@(Peeked->'$(TargetDir)%(RelativeDir)%(Filename)%(Extension)')"/>
| + | |
| − | <!-- Copy project file -->
| + | |
| − | <Copy
| + | |
| − | SourceFiles="$(ProjectPath)"
| + | |
| − | DestinationFiles="$(ProjectDir)$(CSProjName)"/>
| + | |
| − | | + | |
| − | <MSBuild Projects="$(ProjectDir)$(CSProjName)"/>
| + | |
| − | | + | |
| − | </Target>
| + | |
| − |
| + | |
| − | <!-- LIMPA A PASTA BIN DA PASTA AUXILIAR CASO EXISTA -->
| + | |
| − | <Target Name="CleanBin" DependsOnTargets="CopyProject">
| + | |
| − | <RemoveDir Directories="$(TargetBinDir)" />
| + | |
| − | </Target>
| + | |
| − |
| + | |
| − | <!-- REALIZA O BUILD DA SOLUÇÃO GERANDO AS DLL's -->
| + | |
| − | <Target Name="BuildCompile" DependsOnTargets="CleanBin">
| + | |
| − | <MSBuild Projects="@(ProjectsToBuild)" Targets="Rebuild"
| + | |
| − | Properties="outdir=%(BuildArtifactsDir.FullPath);Configuration=$(Configuration)" />
| + | |
| − | </Target>
| + | |
| − |
| + | |
| − | <!-- REALIZA O ZIP DA PASTA AUXILIAR E JOGA PARA A PASTA PADRÃO ONDE FICARÁ O ZIP -->
| + | |
| − | <Target Name="Zip" DependsOnTargets="BuildCompile" >
| + | |
| − | <Zip SourceFolder="$(TargetDir)" OutputFileName="$(TargetBuildZip)\$(ProjectName)_$(Major).$(Minor).$(Revision).$(Build).zip" />
| + | |
| − | </Target>
| + | |
| − |
| + | |
| − | <!-- APAGA A PASTA AUXILIAR -->
| + | |
| − | <Target Name="Compile" DependsOnTargets="Zip">
| + | |
| − | <RemoveDir Directories="$(TargetDir)" />
| + | |
| − | </Target>
| + | |
| − | | + | |
| − | </Project>
| + | |
| − | </syntaxhighlight>
| + | |
| − | | + | |
| − | == Configurando o Build no Jenkins ==
| + | |
Esta página tem como objetivo orientar os colaboradores na correta configuração do Build utilizando o Jenkins para os projetos desenvolvidos em .NET.