升级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…

[转]android 获取手机GSM/CDMA信号信息

本文转自:http://software.intel.com/zh-cn/blogs/2011/12/16/android-gsmcdma/ 在Android中我们常用的轻松获取WIFI信号列表,那如何获取CDMA或者GSM的手机信号呢?系统提供了TelephonyManager类,此类非常丰富,基本你所…

数码管流动显示(自己的单片机)

/********************************************************************************** * 标题: 试验数码管上显示数字( 单片机直接实现位选 共阴极) * * * * …

Hibernate懒加载

在Hibernate框架中,当我们要访问的数据量过大时,明显用缓存不太合适, 因为内存容量有限 ,为了减少并发量,减少系统资源的消耗,这时Hibernate用懒加载机制来弥补这种缺陷,但是这只是弥补而不是用…

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

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

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

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

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

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

研究生计划-心得征程

以前定过一个计划,现在觉得有必要在重新规划一次,毕竟见识和认识有深了 1、编译原理,前些天是把数据结构写完了,编译原理也一直没看,所以下一步深入学习编译原理 2、学习PHP框架,像wordpress和yii,PHP也算入…

java launcher 下载_Java Launcher下载并安装

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

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

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

值得永久收藏的 C# 设计模式套路(二)

设计模式套路,第二弹。在第一篇中,主要写了创造模式相关的几种套路。如果你是刚看到这个文章,建议你先去看看第一篇 传送门。这一篇,我们说说结构模式相关的套路。结构模式,主要作用是将类型、对象和其它内容放在一起&…

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指定管理员图…

sql查询从m到n的这几条记录

查询从m到n的这几条记录 m-ngoselect top (n-m1) * from stu where id not in (select top (m-1) ID from stu ) --51-100select top 50 * from stu where id not in (select top 50 ID from stu )转载于:https://www.cnblogs.com/kuang/archive/2012/07/19/2599344.html

enmu枚举类型

在实际问题中,有些变量的取值被限定在一个有限的范围内。例如,一个星期内只有七天,一年只有十二个月,一个班每周有六门课程等等。如果把这些量说明为整型,字符型或其它类型显然是不妥当的。为此,C语言提供了…

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 家庭版和专业版等此前为…

完全卸载mysql数据库图文教程

见:http://jingyan.baidu.com/article/f96699bbaa8fc1894f3c1b5a.html

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

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

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

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