Como configurar o pipeline do gitlab auto devops usando dotnet core?
Já falei antes sobre o recurso Auto Devops do Gitlab. Mas não mencionei algumas restrições e como a magica funciona.No artigo anterior, abordei o pipeline do gitlab trabalhando com um cluster kubernetes. E como disse, é possível, fazendo uso apenas de um Dockerfile, ter sua aplicação fazendo o Build, Test e Deploy em um cluster Kubernetes.
Obviamente, não é uma magica e sua aplicação deve seguir alguns critérios para que essa facilidade se torne disponível. Como por exemplo: Dockerfile deve estar na raiz da sua aplicação, recurso auto devops deve estar ativo nas configurações do projeto e você precisa utilizar uma das linguagens suportadas pelo padrão. Isso já basta para que sua aplicação "magicamente", tenha o pipeline construído sem nenhum tipo de esforço adicional.
Certo, mas e quando minha linguagem não é suportada?
Como tudo é baseado em Dockerfile, podemos utilizar a imagem correta para fazer o trabalho por nós. No caso do dotnet core, teremos de utilizar duas imagens, uma para build e outra de runtime.
Já testei diversas imagens, a que mais utilizei, foram as versões 2.1 e 2.2.
Para montar o Dockerfile, vamos imaginar a seguinte estrutura de projeto Pokemon:
./src/api (sua aplicação aqui)
./src/api/nuget.config
./src/api/pokemon.csproj
./src/test (seus testes aqui)
./src/test/nuget.config
E o resultado do Dockerfile, é o seguinte:
FROM microsoft/dotnet:2.2-sdk-alpine AS build
WORKDIR /app
COPY ./src/ ./
RUN dotnet restore --configfile Api/nuget.config Api
RUN dotnet restore --configfile Test/nuget.config Test
RUN dotnet test test
RUN dotnet publish api -c production -o out
FROM microsoft/dotnet:2.2-aspnetcore-runtime-alpine
COPY --from=build /app/api/out ./app
WORKDIR /app
EXPOSE 5000
ENTRYPOINT [ "dotnet", "Pokemon.dll" ]
Curiosidade: Se fosse um projeto node, por exemplo. O simples fato de ter um projeto de teste, já seria o bastante para que (com o padrão herokuish) ocorresse a detecção do padrão do projeto e as coisas acontecessem sem ter de rodar os testes dentro do Dockerfile (claro que você pode criar um step de teste no gitlab, mas teria que customizar o auto DevOps).
Bom, creio que seja isso :)
Caso tenha dúvidas no seu projeto, basta postar no stackoverflow e mandar o link aqui nos comentários que tentarei te ajudar.
Ah, da uma lida nesse material:
- https://docs.gitlab.com/ee/topics/autodevops/#custom-helm-chart.
Você certamente vai precisar em algum momento :P
Abraços, boa sorte \o/