Jenkins~配合Docker及dotnetCore进行生产和测试环境的灵活部署
首先要清楚本文是讲dotnetcore项目在生产和测试环境部署的,这在过去的frameworks项目里,我们可以通过设置web.config的环境变量,然后再发布时指定具体的变量,去实现生产环境和测试环境的发布,发布之后,每个环境有自己的配置文件,frameworks会更新环境把web.config进行合并,而在dotnetcore项目里,这种方法不适用了,所以需要在这里再总结一下了。
环境说明
- jenkins自动部署
- docker,docker-swarm集群
- dotnet core api项目
要实现功能
- 将调试,测试,生产等环境的配置信息提前配置好,不需要上线后在去修改它,实现自动化发布和部署
- dotnet core项目配置自己的appsettings.development.json和appsettings.production.json文件
- 运行容器前需要设置环境变量,dockerfile打到镜像也行,docker service启动时加载也可以
实现部署
jenkins调用sh脚本添加环境参数
#!/bin/sh set -xe cd ${WORKSPACE}/deploy/ /bin/bash publish.sh /bin/bash build.sh "Production"
build.sh脚本添加了描述环境的输入参数
#!/bin/sh set -ex export IMAGE_NAME=svt/sms export Registry_Url="ciregistry.i-counting.cn:8443" #输入参数source,目前支持Development外测和Production生产环境两个值 docker build --no-cache --pull -t $IMAGE_NAME --build-arg source=$1 ./ docker tag $IMAGE_NAME $Registry_Url/$IMAGE_NAME docker push $Registry_Url/$IMAGE_NAME
Dockerfile里添加了设置环境变量的代码
FROM microsoft/aspnetcore:2.0 ARG source run echo $source COPY sources.list /etc/apt/sources.list RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone RUN apt-get update && apt-get -y install libgdiplus && apt-get clean ENV ASPNETCORE_ENVIRONMENT=$source WORKDIR /app EXPOSE 80 COPY obj/Docker/publish . ENTRYPOINT ["dotnet", "Validate.dll"]
aspnetcore的项目里添加了Development和Production两种配置的appsettings.json

最后就是代码获取配置时,一定要加上环境参数
config = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile(file, optional: true, reloadOnChange: true) .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) .Build();
好了,今天咱们主要实现的是比较实用的按环境去部署项目的方法!
希望本文章对各位有所帮助!
合集:
DotNetCore
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
2016-09-29 WebApi系列~StringContent与FormUrlEncodedContent
2014-09-29 基础才是重中之重~这时应该用泛型方法了
2013-09-29 DDD~DDD从零起步架构说明