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

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

上一篇自動化測試,全面且詳細的介紹了從零開始到發佈版本的步驟,這是傳統的方式,本次為大家帶來的是如何在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的全部內容,看完點贊,保持好習慣!


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

更多相關文章
  • 一.前言 從這個簡單程式的輸出結果,你想到了什麼?是不是與你心中想的結果不一致?是不是覺得輸出的結果應該為:i is 1,o is 8,o2 is 8 二.程式執行前 圖 2 我們都知道,每一個方法在執行前,操作系統會給方法內每個變數分配記憶體空間。從圖2中就可以看出,在執行前各變數(i,o,o2)已 ...
  • 在一般的前後端分離的web系統開發中,在服務端除了對用戶數據的緩存之外,往往在某些介面上,還涉及到對用戶許可權的限制,有的介面只能讓具有特定許可權的人員才可以訪問。 這樣以來就可以加強系統的安全性,在前面章節中簡單講了 MemoryCache與redis緩存的使用 ,方便將用戶數據緩存到伺服器上在需要的 ...
  • Gtksharp編譯時提示下載gtk文件問題 1、昨天晚上新建gtksharp項目之後,安裝gtksharp之後,編譯時無法成功,提示無法下載gtk 3.24.zip 2、記得前幾天,另一個項目可以生成的。就打開老項目、運行、編譯成功。那會不會是今天寫的代碼導致的,註釋之後編譯還是失敗。沒辦法重新新 ...
  • 前言: 在使用百度編輯器UEditor的時候,如何將圖片保存到伺服器,我剛開始以為是要自己寫上傳文件的方法,後來發現只需要配置一下即可,如果你也正在使用百度富文本編輯器UEditor的話,這篇文章將非常適合你 我使用的C# 1、首先從官網下載插件,一般都是UTF-8格式的,我直接下載了asp版本的: ...
  • 一、簡介 方法重載指的就是方法名稱相同,但是參數不同。 參數不同,分為兩種情況: 如果參數的個數相同,那麼參數的類型就不能相同。 如果參數的類型類型相同,那麼參數的個數不能相同。 註意:方法的重載跟返回值沒有關係 二、舉例 如圖所示,我們經常用到控制台輸出的Console.WriteLine();W ...
一周排行
  • static void Main(string[] args) { string url = "https://go.microsoft.com/fwlink/?linkid=2108895&clcid=0x409"; DownloadBigFile(new Uri(url), "ssms.... ...
  • 1. 使用ASP.NET Core 3.x 構建 RESTful API - 1.準備工作 什麼是REST 什麼是REST REST一詞最早是在2000年,由Roy Fielding在他的博士論文《Architectural Styles and the Design of Network-base ...
  • wpf 兩個自定義控制項 一個是IP控制項,一個滑動條。先看下效果圖 IPControl 1、實際工作中有時需要設置IP信息,就想著做一個ip控制項。效果沒有window自帶的好,需要通過tab切換。但也能滿足使用。廢話不多說直接上代碼 IPControl.xaml IPControl.xaml.cs 2 ...
  • 近期和幾位做嵌入式開發的朋友閑聊過程中,一位朋友抱怨到:這C#太難用了,我想在N個窗體(或者是N個用戶組件之間)傳遞值都搞不定,非得要定義一個全局變數來存儲,然後用定時器來刷新值,太Low了。我急切的回答道:這很簡單,不就是委托的事嘛。那你來一個示例啊:朋友道。此為這篇博客的起因,所以此篇博客對於有 ...
  • 在面對對象編程中,類的三大特性分別為封裝,繼承,多態。其中多態的具體實現,依賴於三個方法,也就是虛方法,抽象類和介面。 多態的具體作用是什麼呢?或者說多態的存在有什麼意義呢?多態的存在有效的降低了程式的耦合度,在使用的時候,不僅可以表現大家都有的共性,還能在必要的時候突出一些特殊的的個性。 那麼如何 ...
  • [toc] 前言 在之前已經提到過,公用類庫Util已經開源,目的一是為了簡化開發的工作量,畢竟有些常規的功能類庫重覆率還是挺高的,二是為了一起探討學習軟體開發,用的人越多問題也就會越多,解決的問題越多功能也就越完善, 倉庫地址: "April.Util_github" , "April.Util_ ...
  • 【ASP.NET Core學習】在ASP.NET Core 種使用Entity Framework Core介紹,包括如何添加Entity Framwork Core,創建模型和遷移到資料庫,查詢數據,保存數據,使用事務,處理併發衝突 ...
  • 環境:MacOS 10.13 MAMAP Prophp 7.0.33 + xdebugVisual Studio Code前言我所理解的 POP Chain:利用魔術方法並巧妙構造特殊屬性調用一系列函數或類方法以執行某種敏感操作的調用堆棧反序列化常用魔法函數前言我所理解的 POP Chain:利用魔 ...
  • 當創建隊列jobs、監聽器或訂閱伺服器以推送到隊列中時,您可能會開始認為,一旦分派,隊列工作器決定如何處理您的邏輯就完全由您自己決定了。 嗯……並不是說你不能從作業內部與隊列工作器交互,但是通常情況下,哪怕你做了,也是沒必要的。 這個神奇的騷操作的出現是因為“InteractsWithQueue”這 ...
  • 在說正題之前先解釋一下交換機模式是個籠統的稱呼,它不是一個單獨的模式(包括了訂閱模式,路由模式和主題模式),交換機模式是一個比較常用的模式,主要是為了實現數據的同步。 首先,說一下訂閱模式,就和字面上的意思差不多主要就是一個生產者,多個消費者,同一個消息被多個消費者獲取,先看一下官網的圖示 整體執行 ...
x