使用第三方容器服务,自动化部署.Net Core
1.为什么用第三方,而不自建,有哪些第三方,最后实现的效果
a.尝试过自建,并成功了,但是很麻烦,要敲一堆命令,无法达到全自动化部署的要求。
b.自建,就算用第三方的镜像包,感觉下载还是不快,不知道为什么。
哪些:各大云服务好像都已经有了,因为我用的码云做的项目托管,支持码云或者自定义git地址的,只有华为云和daocloud,最后选择的是daocloud。
效果:配置好后,只用选择手动触发,填入分支(如:master),然后几分钟后,2台正式服务器,1台测试服务器,自动部署成功,全程不用动其他位置。
2.第一步接入私有的git地址
(源码安全问题不在讨论范围之内)
注意,因为是私有项目,请使用ssh协议的地址,如:git@gitee.com:xxx/xxx.git
添加好这些数据后保存。
在项目列表中,就可以看见你添加的数据了
点击查看详情
选择流程定义->使用Submodules->复制图中的SSH Keys
去到私有项目中添加公钥,复制进去就行了。这样,就完成了。
3.构建镜像
首先,你需要编写dockerfile,当然.net core很简单,直接使用vs 2017添加docker支持就行了。
添加完毕后
点击默认构建任务
填对对应的dockerfile的路径(如果实在填不对,可以复制dockerfile出来,然后使用云端dockerfile)
这是我的dockerfile
FROM microsoft/aspnetcore:2.0 AS base WORKDIR /app EXPOSE 80 #设置时区 RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime RUN echo 'Asia/Shanghai' >/etc/timezone FROM microsoft/aspnetcore-build:2.0 AS build WORKDIR /src COPY *.sln ./ COPY Edu.Api/Edu.Api.csproj Edu.Api/ COPY Edu.Application.Model/Edu.Application.Model.csproj Edu.Application.Model/ COPY Edu.Domain/Edu.Domain.csproj Edu.Domain/ COPY EStart.Infrastructure/EStart.Infrastructure.csproj EStart.Infrastructure/ COPY Edu.Application/Edu.Application.csproj Edu.Application/ COPY EStart.DataBase.EF/EStart.DataBase.EF.csproj EStart.DataBase.EF/ COPY EStart.Interface/EStart.Interface.csproj EStart.Interface/ COPY EStart.DataBase.Event.Domian/EStart.DataBase.Event.Domian.csproj EStart.DataBase.Event.Domian/ COPY Edu.BootStrapper/Edu.BootStrapper.csproj Edu.BootStrapper/ RUN dotnet restore COPY . . WORKDIR /src/Edu.Api RUN dotnet build -c Release -o /app FROM build AS publish RUN dotnet publish -c Release -o /app FROM base AS final WORKDIR /app COPY --from=publish /app . ENTRYPOINT ["dotnet", "Edu.Api.dll"]
给大家参考一下。
然后选择右上角的手动触发,填入Git分支的名字,如master,执行就行了。
这个就是执行成功的样子,如果报错,自行查看日志。
4.部署镜像,使用daocloud添加主机后部署
首先,如果你觉得安全性有问题,那么,可以找到镜像仓库,有仓库镜像的地址
使用这种方式拉取镜像部署。
当然,我们选择的是直接讲主机连接上daocloud使用。
添加主机的方式,在集群里添加,我这里就不做演示了。
首先:部署最新版本
容器端口默认80不变,主机端口填写你要访问的端口,因为我的是无状态服务,所以不用添加Volumes,自定义变量说一下,正式环境什么都不用填
测试环境需要填写环境变量
ASPNETCORE_ENVIRONMENT Deveplopment
然后立即部署,即可。当然,服务器先要安装docker
使用第三方镜像加速:
curl -sSL https://get.daocloud.io/docker | sh
然后访问对应的外网+端口即可
然后打开每次镜像更新就自动部署
这是目前项目的部署情况,2台API服务做了负载均衡(nginx),一台测试服务,每次更新最新代码,填完master,自动发布到这3台服务器。非常方便
End:感想
从公司说要重写原有的系统,到技术选型(前:react,后:.net core),然后4个人(2前2后)编码,旧数据导入,内测,到现在上线,从头到尾,一步一个脚印的完成了开发目标。收获满满。总算可以松一口气了