Dockerfile+Jenkinsfile+GitLab輕鬆實現.NetCore程式的CI&CD

来源:https://www.cnblogs.com/peyshine/archive/2020/05/26/12966816.html
-Advertisement-
Play Games

一.相關介紹 Dockerfile:關於Dockerfile的使用說明,我在文章《讓.NetCore程式跑在任何有docker的地方》中有說到,這裡不在贅述,需要的可以先看下,本文主要介紹Jenkinsfile結合dockerfile配合使用,自動構建.NetCore應用程式。 Jenkinsfil ...


一.相關介紹

Dockerfile:關於Dockerfile的使用說明,我在文章《讓.NetCore程式跑在任何有docker的地方》中有說到,這裡不在贅述,需要的可以先看下,本文主要介紹Jenkinsfile結合dockerfile配合使用,自動構建.NetCore應用程式。   Jenkinsfile :Jenkinsfile 是 Jenkins 2.x 或更高版本核心特性 Pipeline(流水線) 的腳本,或者說對於Jenkins 流水線的定義被寫在一個叫Jenkinsfile的文本文件中,該文件可以被提交到項目的源代碼的控制倉庫。這是"流水線即代碼"的基礎; 將CD 流水線作為應用程式的一部分,像其他代碼一樣進行版本化和審查。 創建 `Jenkinsfile`並提交它到源代碼控制中提供了以下幾個好處:
  • 自動地為所有分支創建流水線構建過程並拉取請求。
  • 在流水線上代碼複查/迭代 (以及剩餘的源代碼)。
  • 對流水線進行審計跟蹤。
  • 該流水線的真正的源代碼 , 可以被項目的多個成員查看和編輯。
Jenkinsfile 能使用兩種語法進行編寫,分別是“聲明式”和“腳本化”,二者語法都是 DSL(Domain-specific language) 語言,二者語法差不多,下麵我們具體看下    

.Jenkins和GitLab的安裝

工欲善其事,必先利其器 Jenkins的安裝可以看我之前的一篇文章:https://www.cnblogs.com/peyshine/p/12891935.html Gitlab的安裝推薦看下這篇文章:https://segmentfault.com/a/1190000021593151  

三.打通GitLab Webhooks與Jenkins流程

1.這裡先新建一個.net core應用程式,除了新增加了一個Jenkinsfile文件以外,其他沒有任何代碼的修改 註意,Jenkinsfile的J需要大寫,我測試了,小寫會提示找不到文件. Jenkinsfile中添加了幾行測試代碼:
pipeline{
    agent any
    stages {
        stage('Build') {
            steps{
                echo 'This is a build step' 
            }
        }
        stage('Test') {
            steps{
                echo 'This is a test step'  
            }
        }
        stage('Deploy') {
            steps{
                echo 'This is a deploy step'    
            }
        }
    }
}

然後將程式文件push到Gitlab上

  2.在Jenkins系統管理,系統配置中,在Gitlab處添加相關信息     下麵點擊添加憑據,類型選擇GitLab Api Token,由於這個Token需要由GitLab來提供,所以先到GitLab生成一個Api Token   3.生成Api Token     點擊創建之後,Token就生效了   將Api Token複製到Jenkins中,點擊添加 添加完成後,就可以在Credentials中選擇剛剛添加好的憑據 點擊保存,這樣系統配置中的Gitlab的全局配置就生效了   4.新建流水線任務測試 下麵打開Jenkins,新建一個流水線發佈任務,取名test,然後點擊確定. 勾選構建觸發器 由於我們需要達到的目的是在GitLab提交代碼,Jenkins可以自動構建相關任務,所以我們還需要配置一個觸發器。如圖,點擊下麵的"高級"按鈕 點擊“Generate”,生成一個SecretToken 然後再流水線Tab定義處,下拉選擇“Pipeline script from SCM”,SCM選擇Git,然後填寫代碼庫的地址和訪問用戶密碼,下麵腳本路徑有個Jenkinsfile,意思就是從我們提交到源代碼管理根目錄下麵的Jenkinsfile中讀取相關定義好的的流水線任務流程 點擊保存   在Gitlab如下圖地方進入,來配置web鉤子   將在Jenkin中截圖的一個url和生成的token分別填寫在下方,在觸發器的地方勾選上 Push events,然後點擊下方的“Add webhook” 按鈕。如果你還有其他事件發生時想觸發Jenkins的任務,也可以自行勾選上 添加完成後點擊測試 這個時候可以看到上方出現了成功的提示 而另一邊Jenkins中,正在執行任務,並且任務的執行是 GitLab有推送任務  完成之後,可以看到流水線任務流程圖 下麵通過代碼推送來測一下,我在跟目錄新建一個空的README.md文件,然後推送,推送完成後可以看到Jenkins開始執行第二次構建任務 至此,從GitLab提交代碼到Jenkins自動構建的整個流程已經完成了,細心的你會發現,只是流程跑通了,這個Jenkinsfile沒有實質性的內容,下麵進入Jenkinsfile  

四.接入Jenkinsfile,Dockerfile實現自動發佈

編寫Dockerfile如下:
FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
COPY *.csproj ./app/
WORKDIR /app
RUN dotnet restore

COPY . ./
RUN dotnet publish -o out /p:PublishWithAspNetCoreTargetManifest="false"

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS runtime
ENV ASPNETCORE_URLS http://+:80
WORKDIR /app
COPY --from=build /app/out ./
ENTRYPOINT ["dotnet", "WebApplication_Jenkinsfile.dll"]
  編寫Jenkinsfile如下:
pipeline{
    agent any
    stages {
        stage('Checkout') {
            steps{
            git credentialsId: '85ca7e47-532e-4901-9828-50a8da071d16', url: 'http://xxx.gitlab.com/webapplication_jenkinsfile.git', branch:'master'
                    echo '---This is a Checkout step---'                 
            }
        }
        stage('Build') {
            steps{
                    sh '''cd WebApplication_Jenkinsfile
            docker rmi -f docker_webapplication_test:1.0
            docker build -t docker_webapplication_test:1.0 .'''
            echo '---This is a Build step---'
            }
        }
        stage('Run') {
            steps{
            sh '''docker rm -f docker_webapplication_test
            docker run --name docker_webapplication_test -d -p 7489:80 docker_webapplication_test:1.0
            '''
                    echo '---This is a run step---'    
            }
        }
    }
}

說明:

stages 必須,包括順序執行的一個或多個stage命令,在pipeline內僅能使用一次,通常位於agent/options後面 steps 必須,steps位於stage指令塊內部,包括一個或多個step。僅有一個step的情況下可以忽略關鍵字step及其{} 這裡為了演示,只添加了幾個核心的步驟,可以根據需要自行添加自動測試,郵件提醒等額外步驟   流水線語法,可以參照下圖中的示例步驟點擊後,可以生成腳本信息,上面Jenkinsfile中的git credentialsId信息就是在這裡生成的   完成之後,將Jenkinsfile和Dockerfile推送到Gitlab,推送成功可以看到如下圖的Jenkins自動構建過程,並且遵照定義規範發佈了應用     如果需要查看日誌,或者在發佈失敗後查看失敗原因,可以通過下麵的 Console Output來查看 Console Output中的詳細日誌信息如下圖,可以看到構建過程是遵循在Dockerfile中的定義 docker 容器運行狀態檢查 自動部署效果截圖 五.結束總結 在定義web鉤子的時候,我勾選的是push events,所以每次有提交代碼到master,都會自動去走Jenkinsfile中的流水線任務,在實際生產中,如果不想這樣操作,可以將持續集成流水線與持續發佈流水線獨立開來 其實只需要前期一次將Jenkins和Gitlab觸發器打通之後,後面只需要在源代碼中維護Dockerfile和Jenkinsfile即可,這是比較優雅的一種CI、CD方式,動手試試吧!

 


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

-Advertisement-
Play Games
更多相關文章
  • 天下武功,唯快不破,雖然支持C/C++ 開發工具(俗稱:IDE)有很多,但是在團隊項目開發中使用最多的還是Visual Studio(簡稱VS),好用而且功能強大,畢竟親爸爸是微軟! 現在Visual Studio 已經更新到VS2019,VS 支持開發人員編寫跨平臺的應用程式,從 Windows ...
  • akka 2.6.x正式發佈以來已經有好一段時間了。核心變化是typed-actor的正式啟用,當然persistence,cluster等模塊也有較大變化。一開始從名稱估摸就是把傳統any類型的消息改成強類型消息,所以想拖一段時間看看到底能對我們現有基於akka-classic的應用軟體有什麼深層 ...
  • 由於開發中發現以前的Activex控制項功能不夠用,沒辦法需要下載源碼重新增加功能。。。。 這個項目最開始也不我寫的,而我也是個小白,花了半天改好了代碼,然後打包用了一天半。-0- 各種百度,各種找。。。。準備用 InstallShield 2015打包,結果怎麼下打包好了就提示啥啥啥試用版。。。。最 ...
  • 格式轉換convert:轉換圖像的模式transpose:轉換圖像的格式convert之前已經使用過了,這裡就簡單演示一下transpose的作用,transpose主要傳入一些Image中的常量: from PIL import Image# 打開圖像im = Image.open('nnz.jp ...
  • 關於組件 現在前端幾大輪子全面組件化。組件讓我們可以對常用的功能進行封裝,以便復用。組件這東西對於搞.NET的同學其實並不陌生,以前ASP.NET WebForm的用戶控制項其實也是一種組件。它封裝html代碼,封裝業務邏輯,對外提供屬性事件等信息,它完完全全就是個組件,只是用戶控制項跑在服務端,而現在 ...
  • VS這麼強大的IDE,功能很多,有時候想知道某些功能藏在哪,是挺難找的。但是可以根據關鍵字搜索這些功能的駐扎點,在右上角的搜索框(Ctrl+Q)。 比如想知道下麵的計算解決方案的代碼度量的操作位置。 按enter鍵也可以,點擊那個搜索小圖標也可以,既能搜代碼,也能搜IDE功能。 假如想知道vs的顏色 ...
  • 在.NET中,我們可以通過Task.WhenAll用來等待多個任務。任務完成之後,我們可以使用await等待他們來獲取結果。 Task<int> task1 = Task.Run(() => 1); Task<string> task2 = Task.Run(() => "hello"); awai ...
  • 當用戶嚮應用程式發出請求時,伺服器將解析該請求,生成響應,然後將結果發送給客戶端。用戶可能會在伺服器處理請求的時候中止請求。就比如說用戶跳轉到另一個頁面中獲取說關閉頁面。在這種情況下,我們希望停止所有正在進行的工作,以浪費不必要的資源。例如我們可能要取消SQL請求、http調用請求、CPU密集型操作 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...