手机版

核心詹金斯Docker在Asp.net实施一键部署

时间:2021-08-27 来源:互联网 编辑:宝哥软件园 浏览:

写在前面

前段时间,我尝试用Jenkins在IIS上自动部署ASP.NET核心程序。一般的过程是詹金斯从git获取代码

起初,詹金斯被放在Ubuntu的Docker中,但由于Powershell的执行,詹金斯被转移到了windows。因为我们网站的部署需要停止IIS站点,所以需要Powershell远程操作服务器(上传文件、停止站点、启动站点),并成功使用WinRM Powershell脚本实现上述功能。但是在实际使用中发现,脚本偶尔会以假状态停止站点,拷贝文件总是因为占用而失败,所以只能手动停止站点,无法达到一键目的,所以使用Docker进行镜像。

码头工人图像

那个。net Core大力支持Docker。在核心之前,我特别羡慕自己在Docker中使用一些工具的体验——工具可以一行指令自动、安全、完整,不需要费力配置环境,对系统的入侵也很少。所以,Core出来后,我一直尝试在Docker中运行Core程序,但是一直不敢去正规的环境。现在,当我遇到自动部署的问题时,我计划从测试环境开始,逐步将Docker环境应用到正式环境中。大致过程如下:

詹金斯装置

Docker安装的Jenkins可以直接在store.docker.com上搜索Jenkins的图像,然后运行容器。唯一需要注意的是让容器中的Jenkins共享主机的Docker环境。命令如下

复制代码如下: docker run-memory 1.5g-name container name-p 18181:8080-p 50000336050000-uroot-d-envjava _ opts='-xms 256m-xmx 3360 MaxNewSize=256m '-v/var/run/docker . sock 3360/var/run/docker . sock-v/usr/bin/docker 33336

如下-v用于指定主机的文件/文件夹挂载在主机的指定路径上,主要用于挂载主机的Docker环境。当容器启动时,我们可以使用命令

在容器中输入docker xec-it container id/bin/bash,并执行docker ps命令,看看是否能成功执行。

詹金斯乔布斯

在容器运行良好并完成一些初始化工作后,我们可以开始构建部署作业

在源代码控制中配置我们的Git的地址

然后,构建命令直接使用执行Shell

#!/bin/bash#获取短版本号以使用Image git hash=` git rev-parse-short head ` docker build-t { Imagename } : $ git hash-f { docker file-pwd } {映像的初始目录}的版本号。这里我们正在建立我们的形象。

然后,下一步是将当前构建的image推送到远程仓库,然后执行到构建后要发布的服务器的远程连接,然后根据版本号获取要部署的Image并运行。因为我目前正在测试环境,所以我将直接在本地运行映像。

Docker stop {containername} #停止原容器docker rm {containername} #删除原Docker run-p 9526:80-d-e aspnet core _ environment=' development '-v/path/path/logs :/app/app _ data/logs-重启始终名称{ container name } { imagename } : $ git hash,基本实现一键部署。当然,还有很多地方需要优化。接下来,如果我在使用中遇到任何问题或者你有一些问题,我们会解决的。

写在最后

构建

当ASP.NET核心2.1版本的映像首次构建时,dotnet sdk在运行时找不到。最后,只有一层文件被添加到DockerFile中,如下所示

来自Microsoft/dot net :2.1-SDK AS BuildWorkDir/app #拷贝所有文件到环境中,并进行恢复、构建和释放拷贝RUN dotnet restore un dotnet buildWORKDIR/app/src/Path RUN dotnet publish-c Release-o out FROM Microsoft/dotnet :2.1-aspnetcore-runtime AS runtimeWORKDIR/appCOPY-FROM=build/app/src/Path/out ./把发布好的文件拷贝到镜像中copy-from=build/app/src/Path/bin/Debug/netapp core app 2.1/XXX。XML ./#把时髦的使用的可扩展标记语言拷贝到目录中EXPOSE 80 run ln-SF/usr/share/zoneinfo/Asia/Shanghai/etc/local time #时区的本地化RUN echo ' Asia/Shanghai '/etc/time zone entry point[' dotnet ',' project.dll'] #启动程序这种方式有个问题就是会有一些无用的形象分享的指令来进行清除

docker PS-a | grep '已排除' | awk ' { print $ 1 } ' | xargs docker stop #停掉状态为退出的容器docker PS-a | grep '已排除' | awk ' { print $ 1 } ' | xargs docker RM #删除状态为退出的容器docker images | grep none | awk " { print $ 3 } " | xargs docker RMI #删除标签为没有人的镜像docker RMI $(docker images | grep imagename | awk " { print $ 3 } " #删除镜像名称为imagename的镜像(只能针对没有被用的图像)以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

版权声明:核心詹金斯Docker在Asp.net实施一键部署是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。