升级Jenkins镜像,支持.NET6.0

1e86225bc7971074f36922c875938fca.png

(寒天催日短,风浪与云平)

书接上文,上回咱们说到了《【Blog.Core开源】完成升级.NET 6.0》,只是代码层面的升级,今天趁着周末正好把生产环境也升级下(大家可以酌情升级哟)。过程很简单,自从用了容器化,再配上CI/CD,发布升级什么的都不是问题了,顺便也把我自定义的Jenkins升级下。

Github上已经把6.0合并到了master分支,5.0已经归档了,因为还有很多小伙伴还在用5.0的嘛,目前这个分支还在维护中,等到2022年,就不维护5.0了。

d018ee5e15bb8bcb7446d350a2eda430.png

目前主要使用Docker来构建镜像,常见的主要是两种解决方案,两种方案又对应不同的操作。

8f840c51619595b828299df98603fccf.png

方式一、外部编译

很久之前在使用Jenkins的时候,采用的是编译项目和构建镜像分开的两步,在Dockerfile中,只是Copy在Jenkins里发布好的可执行文件,这种在外部编译的方案也慢慢的被放弃了:

24dbd61fc2f3954dc526a086ca58743f.png

与之对应的Dockerfile是这样的:

FROM mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone
WORKDIR /app
COPY . . 
EXPOSE 9291 
ENTRYPOINT ["dotnet", "Blog.Core.Api.dll","-b","0.0.0.0"]

这种方案有个弊端,就是在升级我们应用服务的时候,也需要配套升级Jenkins,因为需要对应的SDK嘛是吧,所以我也为了满足一部分在使用这种方式的小伙伴,升级了下我自己的Jenkins镜像,自己拉取下来,run一下就行,目前这个镜像里包含了.NET3.1/5.0/6.0的SDK,还有前端的NPM/CNPM命令。

b1764b26eee0a15398bd12ed30b2ff1e.png

这个镜像我之前是放到DockerHub的,但是有小伙伴反馈需要翻墙,拉取很慢,所以我以后都统一放到阿里云仓库吧。

ef216f431d4a6118fd60904b376e6bba.png

相应的Dockerfile我已经上传到了Github:
https://github.com/anjoy8/devops

为了将敏捷开发中,一些资料和总结的方案给记录下来,供大家来学习和使用,如果有比较爱好开源的小伙伴,也可以把上云的一些配置和工具什么的提交上来,一起学习。

可以直接执行命令,就可以运行容器了:

docker run -u root --rm -d -p 3000:8080 \
--name jenkins \
-v /etc/localtime:/etc/localtime \
-v /usr/bin/docker:/usr/bin/docker \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /home/dockerVolumes2/jenkins_home:/var/jenkins_home \
registry.cn-hangzhou.aliyuncs.com/bcvp/jenkins_with_dntcore3.1_5.0_6.0-cnpm_by_docker:latest

可以配置挂载,这样之前的所有配置和数据都会保留的,我每次升级都指定这个挂载,实现无缝更新。

这就是第一种方案,但是这种方案有些麻烦毕竟,目前更流行的就是发布和构建都在Dockerfile一起的。

6141d925992a791d1668a0f9bdc551ac.png

方式二、编译和构建一起

先展示下代码是这样的,这也是官方给的:

FROM mcr.microsoft.com/dotnet/aspnet:6.0-bullseye-slim AS base
WORKDIR /app
EXPOSE 80FROM mcr.microsoft.com/dotnet/sdk:6.0-bullseye-slim AS build
WORKDIR /src
COPY ["Blog.Core.Api/Blog.Core.Api.csproj", "Blog.Core.Api/"]
COPY ["Blog.Core.Extensions/Blog.Core.Extensions.csproj", "Blog.Core.Extensions/"]
COPY ["Blog.Core.Tasks/Blog.Core.Tasks.csproj", "Blog.Core.Tasks/"]
COPY ["Blog.Core.IServices/Blog.Core.IServices.csproj", "Blog.Core.IServices/"]
COPY ["Blog.Core.Model/Blog.Core.Model.csproj", "Blog.Core.Model/"]
COPY ["Blog.Core.Common/Blog.Core.Common.csproj", "Blog.Core.Common/"]
COPY ["Blog.Core.Services/Blog.Core.Services.csproj", "Blog.Core.Services/"]
COPY ["Blog.Core.Repository/Blog.Core.Repository.csproj", "Blog.Core.Repository/"]
COPY ["Blog.Core.EventBus/Blog.Core.EventBus.csproj", "Blog.Core.EventBus/"]
RUN dotnet restore "Blog.Core.Api/Blog.Core.Api.csproj"
COPY . .
WORKDIR "/src/Blog.Core.Api"
RUN dotnet build "Blog.Core.Api.csproj" -c Release -o /app/buildFROM build AS publish
RUN dotnet publish "Blog.Core.Api.csproj" -c Release -o /app/publishFROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
EXPOSE 9291 
ENTRYPOINT ["dotnet", "Blog.Core.Api.dll"]

这种方式是在容器内部进行项目还原,编译和打包操作,然后执行镜像的构建。好处很明显,不依赖于外部环境,只要保证有Dokcer环境,就能拉取源镜像SDK,所以也就不需要升级上边说的Jenkins了。

所以我现在都是采用这种模式。

PS:这里有个小问题,感兴趣的可以了解下,为什么Dockerfile要用EXPOSE来暴露端口,虽然最终起作用的是项目真正的监听端口,比如asp.netcore的5000。

b7fbfd9c98ff2c42fc74539e8ebdb518.png

最终效果预览

代码提交后,直接在Jenkins发版,可以看到详细的构建过程.

3c3f782f2ce0803e03f4879c7f2c124a.png

可以看到已经发布成功了,效果没啥问题:

d92300e887be6335a1319d9597733b2d.png

打完收工,我的个人建议是,除非公司有要求,不然的话,还是升级下比较好的,整体很流畅,项目也无感知。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/295360.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

女朋友来大姨妈怎么办?

1 医生的工伤怎么算?(素材来源网络,侵删)▼2 大风车呀吱悠悠的转!(via:草多南)▼3 买了个丑酸奶!▼4 和老爸讨论谈恋爱(via:张子乐_&#xff0…

迪拜“烧掉800亿”造了座烂尾岛,奇葩建筑惊呆网友:有钱人的世界,我不懂!

全世界只有3.14 % 的人关注了爆炸吧知识来源:普象工业设计小站天呐!最新消息阿布扎比酋长国又发现220亿桶非常规可采石油让原本富有的国家更加钱上有钱尤其是它的兄弟国——迪拜简直“豪”无人性耗资800亿美元的“世界岛”惨成全球最大烂尾项目竟没有表示…

英特尔收购威盛X86业务 兆芯何去何从

日前,英特尔公司以1.25亿美元收购威盛麾下Centaur 公司的x86业务。Centaur 是威盛的一家子公司,20多年前,威盛依靠数笔收购获得了x86授权,开发了数款X86芯片,由于性能与英特尔和AMD差距太大,威盛的X86 CPU在…

.net中的mapinfo开发:准备(一)

最近开发一个项目,用到了mapinfo的开发,所以想把自己研究的一些东西记录下来,一则供自己使用,二则供一些同道中的朋友参考,有什么不当之处,请提示,再做修改。 首先要了解一下mapinfo的基本概念&…

java launcher 下载_Java Launcher下载并安装

通过双击资源管理器中的类文件来运行Java程序,并创建一个EXE和可执行的JAR文件Java启动器通过双击类文件来运行Java应用程序和小程序. 通过右键单击以图形格式查看类源代码和类层次结构;显示jar和zip文件的内容java下载安装,而不是通过右键单…

自带数据线的迷你数显充电宝,好用到哭

▲ 点击查看无论是付钱办事坐车,还是游戏追剧闲聊,有个手机就够了啊~这也就导致了,出门最怕的不是没带钱,而是带了手机却没电了。手机没电!这简直能要了老命啊!幸好有充电宝“续命”!但每回在打…

VmWare5.5主机Citrix桌面实施方案(二)

三、配置数据库服务器安装数据库服务器分别在三台机器上安装SQL2008运行安装程序图示3.1点击确定继续图示3.2使用全新安装图示3.3图示3.4输入密钥继续图示3.5接受条款图示3.6进行安装图示3.7图示3.8图示3.9图示3.10图示3.11图示3.12图示3.13指定启动SQL账户图示3.14指定管理员图…

java定义接口_一文知道Java中接口的定义

使用interface来定义一个接口。接口定义同类的定义类似,也是分为接口的声明和接口体,其中接口体由常量定义和方法定义两部分组成。定义接口的基本格式如下:方法:接口中的方法只有定义而没有被实现。1.接口是一组行为的规范、定义&…

告诉你一个可怕的数学事实:公路越多,城市越堵!

全世界只有3.14 % 的人关注了爆炸吧知识生活依旧美好上周,刘强西带着小天到附近的清扬山放松一下。然而,从京西大旅馆有两条路可以到清扬山。一条是金龙大道,前半程走完需要20分钟,但可怕的是路窄,车辆一多就慢&#x…

官方精简版!Windows 10 LTSC 2021 正式发布

微软现已正式发布 Windows 10 企业版 LTSC 2021。LTSC 全称为 the Long-Term Servicing Channel,即长期服务频道。使用 LTSC 服务模型,Windows 10 电脑可以延迟接收功能更新,功能更新每 2-3 年(Windows 10 家庭版和专业版等此前为…

不喜欢写测试的朋友看过来,与你分享写测试的经验 做一个爱写测试的程序员...

自从掌握了单元测试的要领之后,经常写测试,做测试,也非常喜欢做单元测试。我的文章《数据采集:完美下载淘宝Ip数据库 简单的程序节省60元人民币而不必购买数据库》中的代码,也是个测试方法,源代码在QQ群中公…

Struts2内置拦截器和自定义拦截器

内置拦截器 Struts2中内置类许多的拦截器,它们提供了许多Struts2的核心功能和可选的高级特性。这些内置的拦截器在struts-default.xml中配置。只有配置了拦截器,拦截器才可以正常的工作和运行。Struts 2已经为您提供丰富多样的,功能齐全的拦截…

基于eclipse RCP的文件夹管理工具

总的来说, Windows7的文件夹浏览器已经提供了很好的功能, 但是也有一些鞭长莫及的地方,比如: 无法搜索指定文件夹里面某些文件夹的文件我将经常使用的图标资源分成几个目录存放于一个文件夹中, 这些资源风格不同,来源也不同. 有些是来自开源项目的, 有些是来自iconfinder, 还有…

.NET 6新特性试用 | 异步流

前言IAsyncEnumerable<T>支持返回异步迭代的枚举器&#xff0c;但在.NET 6之前&#xff0c;即使在API中使用了IAsyncEnumerable<T>&#xff0c;它还是使用同步方式输出&#xff0c;首先将结果缓冲到内存中&#xff0c;然后再写入响应中&#xff1a;[HttpGet] publi…

今日份凡尔赛培训满分了没?

1 今日份凡尔赛培训又精进了&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼2 西班牙修复失败的雕像▼3 这裤子长的过分了&#xff01;▼4 一般人肯定问不出的问题▼5 令人无语的重婚案&#xff08;via.头条新闻&#xff09;▼6 孩子你太精了些▼7 哦吼&#xf…

WEB服务器 - Apache、Nnginx、Lighttpd的比较和择优(转)

Apache服务器和nginx的优缺点&#xff1a; 我们之前大量使用Apache来作为HTTPServer。 Apache具有很优秀的性能&#xff0c;而且通过模块可以提供各种丰富的功能。 优点&#xff1a; 首先Apache对客户端的响应是支持并发的 &#xff0c;运行httpd这个daemon进程之后&#x…

万万没想到,一个 MongoDB.Driver 的 bug 导致 .NET5 程序死锁!

一&#xff1a;背景 1. 讲故事这个月初&#xff0c;星球里的一位朋友找到我&#xff0c;说他的程序出现了死锁&#xff0c;怀疑是自己的某些写法导致mongodb出现了如此尴尬的情况&#xff0c;截图如下&#xff1a;说实话&#xff0c;看过这么多dump&#xff0c;还是第一次遇到真…

有生之年必看!原来历史还可以这样震撼,看完我惊呆了...

▲点击查看哈佛大学本杰明教授曾说&#xff1a;“越是到了高等教育的阶段&#xff0c;人们就越重视从历史中总结经验&#xff0c;尤其是精英阶段。很多人都想好好读读历史&#xff0c;但是一直以来&#xff0c;读历史都有一个问题&#xff1a;看着满满都是字的大部头&#xff0…

.NET6 新功能和新生态

微软中国MSDN 点击上方蓝字关注我们.NET 6正式推出已有一周多的时间&#xff0c;不少小伙伴已经安装好开始尝鲜了。围绕着.NET 6&#xff0c;开发者大佬们已经为大家讲解了不少新功能和新生态。但是&#xff01;我们这里还有更多你可能感兴趣的最新消息&#xff0c;今天就让我…

公厕的门下面为什么都要空一截?难道是为了和别人分享我中午吃的两碗螺狮粉?

全世界只有3.14 % 的人关注了爆炸吧知识何人在此肆意飞翔昨天晚上的这个时候&#xff0c;超模君还在苦逼的加班。好不容易码完了最后一个字&#xff0c;想着先去厕所解决一下人生大事&#xff0c;再回来发布推文。随着一坨污秽倾泻而出&#xff0c;超模君再一次感受到无shi一身…