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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
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:
1 2 3 4 5 |
$ 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.
1 2 3 4 5 6 7 8 |
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
- 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.
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.
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.