1. 需要搭建一个私有的Docker仓库,以便安全的存储镜像
2. 需要一套自动化发布方案,实现代码到应用部署的自动化流程
大致流程如下
在java世界中有很多文章介绍了Docker+Jenkin的自动化部署方式,这次来看看如何用这一套工具实现.Net 应用的发布。
编写DockerFile
以Soa项目为例MatoApps/Soa: 一个轻量级的微服务库,基于.Net 6 + Abp框架 可快速地将现有项目改造成为面向服务体系结构,实现模块间松耦合。 (github.com)
Soa/sample/MainHost/Soa.GatewaySample.Web.Host/Dockerfile
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base WORKDIR /app EXPOSE 80 EXPOSE 443 EXPOSE 44311 FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build WORKDIR /src COPY ["sample/MainHost/Soa.GatewaySample.Web.Host/Soa.GatewaySample.Web.Host.csproj", "sample/MainHost/Soa.GatewaySample.Web.Host/"] COPY ["sample/MainHost/Soa.GatewaySample.Web.Core/Soa.GatewaySample.Web.Core.csproj", "sample/MainHost/Soa.GatewaySample.Web.Core/"] COPY ["sample/MainHost/Soa.GatewaySample.Application/Soa.GatewaySample.Application.csproj", "sample/MainHost/Soa.GatewaySample.Application/"] COPY ["sample/MainHost/Soa.GatewaySample.Core/Soa.GatewaySample.Core.csproj", "sample/MainHost/Soa.GatewaySample.Core/"] COPY ["sample/Services.Abstract/Soa.Sample.IService2/Soa.Sample.IService2.csproj", "sample/Services.Abstract/Soa.Sample.IService2/"] COPY ["src/Soa/Soa.csproj", "src/Soa/"] COPY ["sample/Services.Abstract/Soa.Sample.IAuthorizedService/Soa.Sample.IAuthorizedService.csproj", "sample/Services.Abstract/Soa.Sample.IAuthorizedService/"] COPY ["sample/Services.Abstract/Soa.Sample.IService1/Soa.Sample.IService1.csproj", "sample/Services.Abstract/Soa.Sample.IService1/"] COPY ["sample/MainHost/Soa.GatewaySample.EntityFrameworkCore/Soa.GatewaySample.EntityFrameworkCore.csproj", "sample/MainHost/Soa.GatewaySample.EntityFrameworkCore/"] COPY ["src/Soa.Client/Soa.Client.csproj", "src/Soa.Client/"] RUN dotnet restore "sample/MainHost/Soa.GatewaySample.Web.Host/Soa.GatewaySample.Web.Host.csproj" COPY . . WORKDIR "/src/sample/MainHost/Soa.GatewaySample.Web.Host" RUN dotnet build "Soa.GatewaySample.Web.Host.csproj" -c Release -o /app/build FROM build AS publish RUN dotnet publish "Soa.GatewaySample.Web.Host.csproj" -c Release -o /app/publish FROM base AS final WORKDIR /app COPY --from=publish /app/publish . ENTRYPOINT ["dotnet", "Soa.GatewaySample.Web.Host.dll"]