Customizando build process template no TFS – Parte 4

Salve, salve galera,

Continuando nossos posts sobre customização de build process template, hoje vamos ver como criar as nossas próprias atividades dentro do workflow. Com isso ganhamos um “poder” surpreendente para estendermos nosso build. Um exemplo que acredito ser bem lúdico é a copia do conteúdo do build para um servidor FTP (antes que questionem, sim existe um pacote de atividades que contém uma atividade dessa, que pode ser visto aqui, só estou dando o exemplo para ficar claro).

Vamos começar a brincar ???

Esse primeiro exemplo será algo bem simples para exemplificarmos o procedimento de criação em um próximo post faremos algo mais elaborado.

A primeira coisa que faremos é abrir nosso Visual Studio e criar um projeto do tipo Class Library e adicionaremos a seguinte referência:

C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\ReferenceAssemblies\v2.0\Microsoft.TeamFoundation.Build.Client.dll

Além das referências:

System.Xaml
System.Actitvities
WindowsBase
System.Drawing
PresentationCore
System.ServiceModel
System.ServiceModel.Activities
PresentationFramework

Posteriormente iremos adicionar ao nosso projeto um novo arquivo do tipo “Code Activity” que representa efetivamente nossa atividade, cada code activity será uma atividade separada e essas atividades serão exibidas na toolbox para quem for customizar o build process template.

CodeActivity

Se observamos o conteúdo padrão veremos uma propriedade de entrada do tipo string e um método Execute, que é onde iremos implementar nossa regra. Essa propriedade (assim como as que criarmos seguindo essa estrutura) serão nossas propriedades (acessíveis via F4 ;) ). Poderemos ter propriedades de entrada e de saída, mas adiante iremos ver.

CodigoPadrao

Feito isso vamos alterar a nossa atividade incluindo nossas regras, nesse caso, simplesmente iremos recuperar um argumento de input e exibi-lo como argumento de output. Como nossa regra é muito simples não vou entrar nos méritos de ficar detalhando-a, ela simplesmente faz uma concatenação de textos. Pessoal apesar de nosso parametros estarem com o nome de ArgumetnDe…. eles não são argumentos (falamos de argumentos na Parte 3)

CodigoCompleto

Agora vamos criar um outro projeto e adicionar aquele workflow que vinhamos criando ( ou adicionar o projeto em que ele está incluído) . Depois adicionaremos nesse novo projeto uma referência para o assembly gerado pelo projeto que contém a activity (precisamos referenciar o assembly – que estará na Debug ou Release – e não o projeto).

ProjetoWF

Quando editarmos o nosso .xaml e abrirmos a toolbox iremos localizar nela uma nova seção com a nossa atividade recém-criada. Para isso vamos criar um outro projeto class library e adicionar o arquivo de workflow.

Toolbox

Agora basta adicionarmos no workflow.

AtividadeNoWF

 

Se clicarmos em F4 (ou botão direito > Properties) iremos ver as propriedades da nossa atividade, que foi criada anteriormente.

PropriedadesActivity

Vamos agora criar uma variável que sera preenchida com o conteúdo do nosso parâmetro ArgumentoDeOutput (que vimos em nossa regra de negocio que foi preenchido seguindo nossa especificação).

VariavelWF

Para sermos simplistas vamos preencher manualmente o parâmetro “ArgumentoDeEntrada” com qualquer mensagem e no “ArgumentoDeSaida” iremos colocar a variável que acabamos de criar. Como vocês podem ver na imagem acima temos também depois da nossa atividade um ‘WriteBuildMessage” e iremos exibir a variável que acabamos de criar e preencher. A imagem abaixo mostra como ficara os parâmetros dessa atividade.

WirteBuildFinal

 

Feito isso temos nosso Workflow de build customizado. Agora vamos fazer o deploy dele.

O processo de deploy

O processo de deploy não é de outro mundo, basta criarmos dentro da estrutura do nosso version control um diretório onde iremos adicionar o arquivo de workflow e as DLL dependentes (no nosso caso o assembly gerado que acabamos de criar). Após criarmos essa estrutura e adicionarmos esses arquivos, vamos criar nossa definição de build.

 

Um ponto de atenção aqui é que não há uma regra para a estrutura desses diretórios, eles não necessitam estar juntos, porém é aconselhável utilizar uma estrutura que seja facilmente assimilável e que possa receber outros componentes customizados, já entenderemos o por que.

A primeira coisa que precisamos fazer é adicionar nas configurações da Build Controller os assemblies externos (o que acabamos de fazer check-in). Pra isso vamos em action e clicamos em Manage Build Controllers.

BuildController

 

Feito isso vamos clicar em “Version Control Path to Custom Assemblies” e depois nas propriedades da nossa controller e localizar dentro do version control o diretório onde estão todas as nossas DLLs (não iremos apontar uma a uma). Um ponto de atenção aqui é que cada controller pode ter um diretório – por isso a organização – então temos que tomar cuidado para não perder o controle sobre nossas dependências.

 

AdicionandoDLL

 

Agora vamos criar uma definição de build fazendo uso do nosso workflow. Para isso vamos clicar em New Build Definition, será exibida a tela padrão de criação da definição de build (prometo um artigo apenas sobre os passos, mas agora vamos nos atentar ao processo necessário para prosseguirmos), depois clicaremos em Process onde iremos selecionar qual template utilizaremos. Da primeira vez que formos criar uma definição com o nosso processo customizado ele não será exibido, para isso clicaremos em New (dentro do panel Build Process template), será exibida uma tela para navegarmos dentro do version control (similar ao que fizemos com o diretório de assemblies customizados na controller), vamos navegar até o diretório que adicionamos nosso workflow e selecionaremos ele ( igual já fizemos aqui). Pronto , agora basta preenchermos os parâmetros obrigatórios do nosso template e enfileirarmos um novo build.

Se observamos o resultado veremos a chamada da nossa atividade e a exibição da nossa mensagem.

Resultado

Pronto pessoal, temos o nosso workflow de build customizado, inclusive com uma atividade customizada.

Esse exemplo é bem simples para mostrarmos o funcionamento, caso tenham alguma dúvida sintam-se a vontade de entrar em contato para batermos um papo.

Espero que tenha ajudado pessoal, até a próxima.

 
Comments

No comments yet.