Jenkins~配合Docker及(ji)dotnetCore進行生產和測(ce)試環境的靈活部署
首先(xian)要清楚本文(wen)是(shi)講dotnetcore項(xiang)(xiang)目(mu)在生產和(he)測試(shi)環(huan)(huan)境(jing)部署的(de),這在過(guo)去的(de)frameworks項(xiang)(xiang)目(mu)里,我們可以(yi)通過(guo)設置(zhi)web.config的(de)環(huan)(huan)境(jing)變(bian)量(liang),然后(hou)再發布時指定具體的(de)變(bian)量(liang),去實現(xian)生產環(huan)(huan)境(jing)和(he)測試(shi)環(huan)(huan)境(jing)的(de)發布,發布之后(hou),每個環(huan)(huan)境(jing)有自己的(de)配置(zhi)文(wen)件,frameworks會更新環(huan)(huan)境(jing)把web.config進行合并,而在dotnetcore項(xiang)(xiang)目(mu)里,這種(zhong)方法(fa)不適用了,所以(yi)需(xu)要在這里再總(zong)結(jie)一下(xia)了。
環境說明
- 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" #輸入參(can)數source,目前支持(chi)Development外(wai)測和Production生(sheng)產環境兩個(ge)值 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();
好了,今天咱(zan)們(men)主要實現的是比較實用的按環境去部署項目的方(fang)法!
希望本文章對各位(wei)有所幫助!