超簡單讓.NET Core開發者快速擁有CI/CD的能力-Docker版本

来源:https://www.cnblogs.com/viter/archive/2019/11/08/11815347.html
-Advertisement-
Play Games

上一篇自動化測試,全面且詳細的介紹了從零開始到發佈版本的步驟,這是傳統的方式,本次為大家帶來的是如何在5分鐘內使用上docker進行CI/CD,畢竟現在的容器化如火如荼,本示例是基於CentOS-7系統,在示例中, jenkins 和部署 .NET Core 應用程式,都使用 docker 來完成。 ...


超簡單讓.NET Core開發者快速擁有CI/CD的能力-Docker版本

前言

上一篇自動化測試,全面且詳細的介紹了從零開始到發佈版本的步驟,這是傳統的方式,本次為大家帶來的是如何在5分鐘內使用上docker進行CI/CD,畢竟現在的容器化如火如荼,本示例是基於CentOS-7系統,在示例中, jenkins 和部署 .NET Core 應用程式,都使用 docker 來完成。

首先是安裝docker

在伺服器上執行下麵的命令,安裝 docker

yum install docker

安裝完成後,執行命令 docker --version ,輸出版本號證明安裝成功。

Docker version 19.03.4, build 9013bf583a

拉取並部署jenkins

緊接著,馬上拉取 jenkins 的鏡像

docker pull jenkins/jenkins

拉取成功後,執行容器部署,輸入下麵的命令

docker run --name myjenkins \
           -u root \
           -d \
           --rm \
           -v /var/run/docker.sock:/var/run/docker.sock \
           -v /usr/bin/docker:/usr/bin/docker \
           -v /var/jenkins_home:/var/jenkins_home \
           -p 8080:8080 -p 50000:50000 \
           jenkins/jenkins:lts

部署完成後,可能你需要手動開啟防火牆埠 8080 後才可以在外部瀏覽器中訪問jenkins的站點

開啟防火牆埠8080

輸入下麵的命令,開啟8080埠

firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --reload

好了,現在我們可以通過下麵的地址訪問jenkins的web管理控制台了

http://{你的IP地址}:8080

如果你出現了下麵的圖,不要慌張,簡單執行下麵兩個步驟就可以解決問題了。

修改步驟

1、修改/var/jenkins_home/updates/default.json,搜索 google.com ,改為 baidu.com 就可以了
2、修改/var/jenkins_home/hudson.model.UpdateCenter.xml,這個文件是jenkins下載插件的預設源地址,將:https://updates.jenkins.io/update-center.json 中的 https 修改為 http,然後執行命令 docker restart myjenkins 重啟 jenkins 實例就可以了。

為.NET Core 編寫Dockerfile文件

Visual Studio 已經為我們集成了docker的支持,所以基本上我們是不需要編寫Dockerfile文件的,只要滑鼠右鍵點擊項目,添加docker支持即可

這裡我選擇Linux版本

生成的Dockerfile文件如下

FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 80

FROM microsoft/dotnet:2.2-sdk AS build
WORKDIR /src
COPY ["src/Ron.Blogs/Ron.Blogs.csproj", "src/Ron.Blogs/"]
RUN dotnet restore "src/Ron.Blogs/Ron.Blogs.csproj"
COPY . .
WORKDIR "/src/src/Ron.Blogs"
RUN dotnet build "Ron.Blogs.csproj" -c Release -o /app

FROM build AS publish
RUN dotnet publish "Ron.Blogs.csproj" -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "Ron.Blogs.dll"]

這裡生成的文件其實是有點小問題的,因為我們是在項目中生成的Dockerfile文件,而上面的腳本中,COPY 的命令執行的目錄卻是從 /src 開始,如果我們直接執行 docker build ,會提示找不到該項目文件 src/Ron.Blogs/Ron.Blogs.csproj,正確的解決方法是將Dockerfile文件移動到src同級目錄,即解決方案根目錄下,如下圖

開始構建容器化實例

因為我們將在容器中編譯.NET Core 程式,所以本地伺服器不需要安裝 .NET Core SDK。接下來的事情就變得非常簡單了,上jenkins去創建一個任務,然後作一些簡單的配置後就開始構建。

首先創建任務

配置git倉庫地址

配置執行shell命令

輸入下麵的腳本

docker build  -t blogs .
docker run --rm -d --name blogs -p 15002:80 blogs
echo "success"

就這樣,一個完整的流程走完了,現在訪問容器實例地址: http://172.16.1.202:15002/api/blog/detail/1

完美運行成功!

註意事項

上面的腳本在第一次運行的時候沒有問題,但是在第二次構建的時候,將會提示實例名稱 blogs 已存在,我們需要修改一下構建腳本,加入 docker stop blogs

docker build  -t blogs .
docker stop blogs
docker run --rm -d --name blogs -p 15002:80 blogs
echo "success"

結束語

上面就是本次的快速擁抱CI/CD的全部內容,看完點贊,保持好習慣!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • using System; namespace ConsoleApp3 { class Program { static void Main(string[] args) { Console.Write("你要輸入多少項?"); int a = Convert.ToInt32(Console.Rea ...
  • Aspose.PSD for .NET高級PSD文件格式操作API,沒有任何Adobe Photoshop依賴項。API允許創建或編輯Photoshop文件,並提供更新圖層屬性,添加水印,執行圖形操作或將一種文件格式轉換為另一種文件的功能。 近日,Aspose.PSD for .NET更新至最新版本 ...
  • 背景 ASP.NET Core 支持依賴關係註入 (DI) 軟體設計模式,並且預設註入了很多服務,具體可以參考 "官方文檔" , 相信只要使用過依賴註入框架的同學,都會對此有不同深入的理解,在此無需贅言。 然而,在引入 IOC 框架之後,對於之前常規的對於類的依賴(new Class)變成通過構造函 ...
  • 保留兩位小數點 由於簡單的原因大家直接看代碼塊。 執行結果如下: ...
  • using System; namespace class1 { class program { static void Main(string[] args) { Console.Write("請輸入a="); double a = double.Parse(Console.ReadLine()) ...
  • 1.查詢生命周期 在進入正題時候,我們先來瞭解EF Core查詢的生命周期。 1.1LINQ查詢會由Entity Framework Core處理並生成給資料庫提供程式可處理的表示形式(說白了就是生成給資料庫可識別數據形式)。 ●發送的查詢結果(查詢表示形式)會被緩存,以便每次執行查詢時無需進行1. ...
  • using System; namespace class1 { class program { static void Main(string[] args) { //值傳遞引用,實際參數不會變化 Console.Write("請輸入a="); double a = double.Parse(Co ...
  • 前言 上一篇我們主要介紹了並行編程相關的知識,這一節我們繼續介紹關於任務相關的知識。為了更好的控制並行操作,我們可以使用System.Threading.Tasks中的Task類。我們首先來瞭解是什麼是任務——任務表示將要完成的一個或某個工作單元,這個工作單元可以在單獨線程中運行,也可以使用同步方式 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...