Vamos direto ao ponto: A intenção desse post é apresentar como migrar seus projetos do .NET Core 2.0-preview2 pra o .NET Core 2.0 RTM. Sim, esse é um tutorial, e visa apresentar o que é necessário para fazê-lo.
O .NET Core 2 foi anunciado no dia 14 de agosto e para quem estava usando o 2.0-preview2 algumas coisas simplesmente pararam de funcionar do dia para a noite.
Essa quebra que fez as coisas pararem está relacionada às imagens do Docker com as tags 2.0 que antes estavam com o preview2, passaram a ser compiladas com a versão RTM. Naquele momento para que as coisas continuassem funcionando era necessário utilizar as imagens com o sufixo “-preview2”, o que não era necessário até então.
Update do Visual Studio
Como eu já estava usando o Visual Studio Enterprise 2017 Preview, comecei pelo update para a versão 15.3.1 Preview 1.0, disponível para download a partir do Visual Studio Installer.
Aproveitei para fazer um reset factory reset no meu docker for windows, já que havia muito lixo, tanto em configurações, afinal de testes e aprendizado vivemos! Em seguida fiz o download das imagens-base para otimizar o tempo de build. Tenho alguns scripts rodando nos servidores de build e um deles faz download das imagens-base que uso nos meus projetos diariamente, assim garanto que a cada novo build, dificilmente vou ter de esperar esse download, compartilho abaixo meu docker-pull diário:
docker images docker pull microsoft/aspnetcore-build:2.0 docker pull microsoft/aspnetcore:2.0 docker pull microsoft/aspnetcore-build:2.0.0-preview2 docker pull microsoft/aspnetcore:2.0.0-preview2 docker pull microsoft/dotnet:2.0-sdk docker pull microsoft/dotnet:2.0-runtime docker pull node:8 docker pull node:8-alpine docker pull openjdk:8-alpine docker pull php:7-apache docker pull ubuntu:17.10 docker pull ubuntu:17.04 docker pull ubuntu:16.04 docker pull ubuntu:14.04 docker pull debian:jessie docker pull debian:jessie-backports docker pull debian:jessie-slim docker pull debian:stretch docker pull debian:stretch-backports docker pull debian:stretch-slim docker images
Basicamente tudo o que eu uso no dia-a-dia se baseia em alguma dessas imagens, ou precisa delas para ser gerado. Você não precisa fazer isso, mas ajuda já ter as imagens aspnetcore-build:2.0, aspnetcore:2.0, dotnet:2.0-sdk e dotnet:2.0-runtime. Escolha o par que melhor se encaixa no que você está desenvolvendo. São pares compostos por build/sdk e runtime.
Instalação do .NET Core 2
Você vai precisar fazer download do novo sdk, disponível no site do .Net Core a versão atual do instalador é dotnet-sdk-2.0.0-win-gs-x64.exe.
Rodei dotnet –version antes e depois da instalação para garantir que meu ambiente estava ok, e segue o resultado:
$ dotnet --version 2.0.0-preview2-006497 $ dotnet --version 2.0.0
Ao final da instalação você recebe um aviso com alguns links interessantes, resolvi copiar para que possam ir às documentações listadas antes de instalar.
This product collects usage data • More information and opt-out https://aka.ms/dotnet-cli-telemetry Resources • Core Documentation https://aka.ms/dotnet-docs • SDK Documentation https://aka.ms/dotnet-cli-docs • Release Notes https://aka.ms/20-p2-rel-notes • Tutorials https://aka.ms/dotnet-tutorials
A instalação realiza o setup do SDK, Runtime e Runtime Package Store.
Atualizando o projeto
Ao abrir o sua solution você precisará realizar o update das dependências de 2.0.0-preview2-final para 2.0.0. Isso é o suficiente!
Bom, o último passo foi atualizar as imagens-base utilizadas para o deploy com docker.
- FROM microsoft/aspnetcore-build: AS aspnet-build + FROM microsoft/aspnetcore-build:2.0 AS aspnet-build WORKDIR /app COPY ./ci.sln /app/ COPY ./enginex.copilot.api/ /app/enginex.copilot.api/ RUN dotnet restore ./ci.sln && dotnet publish ./ci.sln -o /publish-output FROM node:8-alpine AS angular-build WORKDIR /home RUN npm install -g @angular/cli typescript webpack typings tslint COPY ./enginex.copilot.ui/package.json ./ COPY ./enginex.copilot.ui/package-lock.json ./ RUN npm install COPY ./enginex.copilot.ui/ ./ RUN ng build --target production --aot --output-path /publish-output - FROM microsoft/aspnetcore:2.0.0-preview2 + FROM microsoft/aspnetcore:2.0 WORKDIR /app COPY --from=aspnet-build /publish-output ./ COPY --from=angular-build /publish-output ./wwwroot EXPOSE 7777 ENTRYPOINT ["dotnet", "Enginex.Copilot.Api.dll"]
A propósito esse dockerfile é motivo de um post inteiro. Esse é um build de produção de um produto que estou desenvolvendo, dedicado à gestão de Docker e Load Balancer. Como o front é Angular 4, aproveitei para embarcá-lo junto com a app MVC, mas isso só acontece fora do ambiente de desenvolvimento, assim evito ter a necessidade de entregar 2 containers para a aplicação. O resultado é fantástico, pois simplifica o deploy, já que ASP.NET Core suporta arquivos estáticos, o necessário para hospedar minha app angular junto com a API. Vale lembrar que esse é um produto de gestão, então quanto menor a quantidade de containers para que ele rode, melhor, pois facilita o deploy. Isso não é verdade quando precisamos escalar API’s e então nesse caso seria mais prudente isolar front e api para que seja possível escalar individualmente cada elemento da arquitetura.
[dt_quote type=”blockquote” font_size=”big” animation=”none” background=”plain”]
Atenção
As imagens docker com tag 2.0 e 2.0.0 mudaram. Antes do lançamento do .NET Core 2 RTM, as imagens com essas tags eram destinadas ao 2.0.0-Preview 2, assim que lançaram a versão final, essas tags deram lugar à versão final. Isso significa que há grande probabilidade de que seu host docker esteja com imagens antigas. Remova-as (para que seja baixadas novamente na medida que for necessário) ou faça pull destas imagens. A título de curiosidade essas imagens têm sido atualizadas quase todos os dias.
Desde o dia 14, quando passei a automatizar e monitorar essas imagens as atualizações têm sido diárias de segunda a sexta.
[/dt_quote]
Quer saber mais sobre .NET Core 2.0? Tem evento online hoje!
Hoje eu, Renato Groff e André Secco vamos falar sobre o lançamento do .NET Core 2 no Coding Night no Mesa Redonda #5 – .NET Core/Standard 2.0.
Como sempre, transmitido ao vivo, pelo Youtube 22 horas!
https://www.facebook.com/events/465771167138709/
Então está combinado, nos vemos hoje no Coding Night, se quiser, pode deixar um comentário, para tirar dúvidas ou expressar sua opinião mesmo.
0 comentários