升级Jenkins镜像,支持.NET6.0
(寒天催日短,風浪與云平)
書接上文,上回咱們說到了《【Blog.Core開源】完成升級.NET 6.0》,只是代碼層面的升級,今天趁著周末正好把生產(chǎn)環(huán)境也升級下(大家可以酌情升級喲)。過程很簡單,自從用了容器化,再配上CI/CD,發(fā)布升級什么的都不是問題了,順便也把我自定義的Jenkins升級下。
Github上已經(jīng)把6.0合并到了master分支,5.0已經(jīng)歸檔了,因為還有很多小伙伴還在用5.0的嘛,目前這個分支還在維護中,等到2022年,就不維護5.0了。
目前主要使用Docker來構建鏡像,常見的主要是兩種解決方案,兩種方案又對應不同的操作。
方式一、外部編譯
很久之前在使用Jenkins的時候,采用的是編譯項目和構建鏡像分開的兩步,在Dockerfile中,只是Copy在Jenkins里發(fā)布好的可執(zhí)行文件,這種在外部編譯的方案也慢慢的被放棄了:
與之對應的Dockerfile是這樣的:
這種方案有個弊端,就是在升級我們應用服務的時候,也需要配套升級Jenkins,因為需要對應的SDK嘛是吧,所以我也為了滿足一部分在使用這種方式的小伙伴,升級了下我自己的Jenkins鏡像,自己拉取下來,run一下就行,目前這個鏡像里包含了.NET3.1/5.0/6.0的SDK,還有前端的NPM/CNPM命令。
這個鏡像我之前是放到DockerHub的,但是有小伙伴反饋需要翻墻,拉取很慢,所以我以后都統(tǒng)一放到阿里云倉庫吧。
相應的Dockerfile我已經(jīng)上傳到了Github:
https://github.com/anjoy8/devops
為了將敏捷開發(fā)中,一些資料和總結的方案給記錄下來,供大家來學習和使用,如果有比較愛好開源的小伙伴,也可以把上云的一些配置和工具什么的提交上來,一起學習。
可以直接執(zhí)行命令,就可以運行容器了:
可以配置掛載,這樣之前的所有配置和數(shù)據(jù)都會保留的,我每次升級都指定這個掛載,實現(xiàn)無縫更新。
這就是第一種方案,但是這種方案有些麻煩畢竟,目前更流行的就是發(fā)布和構建都在Dockerfile一起的。
方式二、編譯和構建一起
先展示下代碼是這樣的,這也是官方給的:
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"]這種方式是在容器內(nèi)部進行項目還原,編譯和打包操作,然后執(zhí)行鏡像的構建。好處很明顯,不依賴于外部環(huán)境,只要保證有Dokcer環(huán)境,就能拉取源鏡像SDK,所以也就不需要升級上邊說的Jenkins了。
所以我現(xiàn)在都是采用這種模式。
PS:這里有個小問題,感興趣的可以了解下,為什么Dockerfile要用EXPOSE來暴露端口,雖然最終起作用的是項目真正的監(jiān)聽端口,比如asp.netcore的5000。
最終效果預覽
代碼提交后,直接在Jenkins發(fā)版,可以看到詳細的構建過程.
可以看到已經(jīng)發(fā)布成功了,效果沒啥問題:
打完收工,我的個人建議是,除非公司有要求,不然的話,還是升級下比較好的,整體很流暢,項目也無感知。
總結
以上是生活随笔為你收集整理的升级Jenkins镜像,支持.NET6.0的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WPF 模仿IconPacks库写图标按
- 下一篇: .NET 6新特性试用 | 异步流