O desenvolvimento de uma aplicação pode ser um processo repetitivo: compilação, teste e execução/publicação. Vendo apenas esses pontos, o processo pode ser algo simples, mas ao longo do desenvolvimento, toda esta repetição pode ter consumido horas.
Quando nos deparamos com uma situação assim, chegou o momento de procuramos formas de automatizar este processo e economizarmos um esforço não útil para a aplicação.
Curso C# (C Sharp) Básico
Conhecer o cursoHoje em dia existem várias soluções de automação para essas tarefas repetitivas de um projeto. Neste artigo conheceremos o Cake.
Cake
O Cake (C# Make) é um sistema de automação, multiplataforma e open source, que permite definir das tarefas em C#, se tornando assim o sistema de automação ideal para o desenvolvedor desta linguagem.
Aliases e Extensibilidade
Como é voltado para aplicações da plataforma .NET, o Cake já define uma série de métodos que representam ações em aplicações desta plataforma. Por exemplo, para aplicar o restore em um projeto .NET Core, pode ser definido a tarefa abaixo:
Task("Restore")
.Does(() =>
{
DotNetCoreRestore("./ExemploCake.csproj");
});
O método DotNetCoreRestore
usado acima é chamado de “alias”, e faz parte dos alises de DotNetCore. Existem aliases para uma infinidade de tarefas, e você pode ver todos na documentação do Cake.
Caso não exista um alias nativo para a ação que queira executar, a plataforma também suporta os chamados Addins, que são métodos de extensão criados pela comunidade.
Se mesmo assim não encontrar um método para a sua tarefa, você pode criar seu próprio alias, que nada mais é que um método de extensão do C#. E se fizer isso, contribua com a comunidade disponibilizando ele no NuGet.
Agora que conhecemos o Cake, vamos ver um exemplo rápido do seu uso.
Colocando a mão na massa
Para este artigo vou testar o Cake uma aplicação console simples:
dotnet new console -n ExemploCake
cd ExemploCake
Nela o Cake pode ser adicionado com o comando do PowerShell abaixo, caso esteja no Windows:
Invoke-WebRequest https://cakebuild.net/download/bootstrapper/windows -OutFile build.ps1
Ou o comando de terminal abaixo, caso esteja no Linux:
curl -Lsfo build.sh https://cakebuild.net/download/bootstrapper/linux
Ou caso esteja no Mac OS X:
curl -Lsfo build.sh https://cakebuild.net/download/bootstrapper/osx
Com isso, será adicionado um arquivo build.ps1 no Windows e build.sh nos ambientes Unix. Será este arquivo que executaremos quando as tarefas estiverem automatizadas.
Curso C# (C Sharp) Intermediário
Conhecer o cursoCriando um script Cake
Com o Cake adicionado na aplicação, crie nela um arquivo chamado build.cake. Será neste arquivo que as tarefas devem ser adicionadas. Por exemplo:
var target = Argument("target", "Default");
Task("Default")
.Does(() =>
{
Information("Hello World!");
});
RunTarget(target);
A tarefa acima é simples, como é possível supor, ela apenas exibe o famoso "Hello World"
no console/terminal quando o Cake for executado:
Windows
.uild.ps1
Linux / Mac OS X
# Agusta a permissão
chmod +x build.sh
# Executa o arquivo.
./build.sh
No código, a primeira linha:
var target = Argument("target", "Default");
Define a tarefa padrão, caso alguma não seja definida durante a execução, que pode ser feito da seguinte forma:
./build.sh -target Default
Por ser código C#, podemos definir elementos que são válidos nesta linguagem com uma variável:
var target = Argument("target", "Default");
var projectFile = "./ExemploCake.csproj";
Task("Default")
.IsDependentOn("Restore-Application")
.Does(() =>
{
Information("Hello World!");
});
Task("Restore-Application")
.Does(() =>
{
DotNetCoreRestore(projectFile);
});
RunTarget(target);
Além de definirmos uma variável:
var projectFile = "./ExemploCake.csproj";
Também foi definido que antes de executar a tarefa “Default
”:
Task("Default")
.IsDependentOn("Restore-Application")
.Does(() =>
{
Information("Hello World!");
});
Deve ser executa a tarefa “Restore-Application
”, que aplica o restore na aplicação:
Task("Restore-Application")
.Does(() =>
{
DotNetCoreRestore(projectFile);
});
Pode-se cascatear uma tarefa após a outra, quantas verses for necessário:
var target = Argument("target", "Default");
var projectFile = "./ExemploCake.csproj";
Task("Default")
.IsDependentOn("Run-Application")
.Does(() =>
{
Information("Hello World!");
});
Task("Restore-Application")
.Does(() =>
{
DotNetCoreRestore(projectFile);
});
Task("Run-Application")
.IsDependentOn("Restore-Application")
.Does(() =>
{
DotNetCoreRun(projectFile);
});
RunTarget(target);
Conclusão
Agora que a configuração do Cake está definida e que já temos uma estrutura básica, ele pode ser expandido com adição de novas tarefas, como aplicação de teste e ou commit dos códigos alterados.
Curso C# (C Sharp) Avançado
Conhecer o cursoCaso tenha gostado da ferramenta, você pode ver mais funcionalidades dela na sua ótima documentação.