本地Docker Jenkins構建dotnet core web應用到Linux伺服器 Docker上

来源:https://www.cnblogs.com/xiao24/archive/2019/12/08/docker_jenkins_dotnetcore3.html
-Advertisement-
Play Games

1、準備工作 環境 本地: 、`Docker` 代碼倉庫: 伺服器: 、`Docker` 前提準備 1. 創建個有 文件的 項目 新建一個dotnet 3.0的web項目,在項目文件夾添加Dockerfile文件,內容如下: 2. 準備git倉庫,將項目的代碼上傳上去 3. 構建有 的`jenkin ...


1、準備工作

環境

  • 本地: WindowsDocker
  • 代碼倉庫:Git
  • 伺服器:LinuxDocker

前提準備

  1. 創建個有dockerfile文件的dotnet core 3 web項目
    新建一個dotnet 3.0的web項目,在項目文件夾添加Dockerfile文件,內容如下:

    FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
    WORKDIR /app
    EXPOSE 80
    COPY . .
    ENTRYPOINT ["dotnet", "WebApplication.dll"]
  2. 準備git倉庫,將項目的代碼上傳上去
  3. 構建有dotnet core 3.0 環境jenkins

    FROM jenkins/jenkins:lts
    # 切換root用戶安裝東西
    USER root
    # Show distro information!
    RUN uname -a && cat /etc/*release
    RUN apt-get update
    RUN apt-get install -y curl libunwind8 gettext apt-transport-https
    RUN curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
    RUN mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg
    RUN sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-debian-stretch-prod stretch main" > /etc/apt/sources.list.d/dotnetdev.list'
    RUN apt-get update
    RUN apt-get install -y dotnet-sdk-3.1
    # 切換回來jenkins用戶
    USER jenkins

因為jenkins裡面是沒有dotnetcore環境的,所以需要本地創建個支持dotnetcore環境的。
找個地方新建文件夾,創建dockerfile文件,內容如上。

  1. build鏡像並運行容器

    docker build . -t jenkins_dotnet

    這裡等待時間會比較長~

    # 運行剛剛構建好的容器
    docker run -d  --name jenkins -p 8080:8080 jenkins_dotnet
  2. 打開jenkins,安裝推薦插件
    打開 localhost:8080 ,可以看到

    docker exec -it jenkins bash
    dotnet --version
    cat /var/jenkins_home/secrets/initialAdminPassword

    把密碼複製出來登錄,點擊左邊按鈕安裝推薦插件

    這裡時間也會比較長,如果有部分安裝失敗了,等剩餘的安裝完後點擊重試即可,如果伺服器上還沒有docker,現在可以去裝下,裝了的也可以連上伺服器,去執行docker pull mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim拉取下dotnet core 3.1的鏡像,等會創建鏡像的時候就會快一點啦

    插件安裝完後,會有一些創建管理員和地址配置,搞一下吧。

    如果有插件安裝失敗,點過重試安裝插件的,現在需要docker restart jenkins重啟下應用,然後重新打開localhost:8080使用創建的管理員登錄。

2、搞好了,開始幹活

哦,還有些需要安裝的插件 =.=||

需要安裝的插件:

  • SCP publisher
  • Publish Over SSH
  • Environment Injector

進入 系統管理>插件管理->可選插件->輸入插件名稱->勾選需要插件->點擊安裝

安裝完後,設置下這些插件,進入系統管理->系統配置,

  1. SCP publisher設置
    Ctrl + F 搜下 SCP找到SCP repository hosts-SCP sites設置位置,點新增
    HostName: 伺服器IP地址
    Port:埠,預設22、
    Root Repository Path:文件存放目錄
    User Name:登錄用戶名
    Password/Passphrase:密碼

  2. Publish Over SSH 設置
    Ctrl + F 搜下 SCP找到SCP repository hosts-SSH Server設置位置,點新增再點高級勾選上 Use password authentication, or use a different key
    Name:名稱
    Hostname:伺服器IP地址
    Username:登錄用戶名
    Remote Directory:遠程目錄
    Passphrase / Password:密碼
    Port:連接埠(預設22)

配置完後別忘記點保存。

創建構建任務

點擊新建任務, 選擇構建一個自由風格的軟體項目

  1. 源碼管理設置
    選擇Git,在Repository URL填入Git倉庫地址

  2. 觸發構建器
    可以配置一些定時構建等,我這裡只是測試所以沒有選擇觸發器。

  3. 構建環境
    1. 勾選Delete workspace before build starts
    2. 勾選Inject environment variables to the build process,存放構建是需要用到的環境變數
  4. 構建- 添加執行shell步驟
    增加構建步驟-執行shell,腳本如下:

    #切換目錄
    cd ./WebApplication
    #還原nuget包
    dotnet restore
    #編譯
    dotnet build
    #刪除之前發佈文件
    cd ./bin
    rm -rf web-publish
    rm -f web-publish.tar
    cd ..
    #發佈
    dotnet publish -o ./bin/web-publish
    #刪除配置文件
    cd ./bin/web-publish
    cp ../../Dockerfile .
    rm -rf config
    cd ..
    #壓縮
    tar -cvf web-publish.tar web-publish 
  5. 構建後步驟
    1. 上傳文件到伺服器
      增加構建後操作步驟-選擇Publish artifacts to SCP Repository ,填入需要上傳的壓縮文件

      這裡文件目錄的基礎目錄是workspace,如果不知道具體的地址,可以先不創建構建後步驟保存下,然後點擊立即構建,等待成功後,點擊工作空間看下文件路徑是怎樣的,比如我的是這樣的:

      得到壓縮文件目錄是WebApplication/bin/web-publish.tar

    2. 添加 伺服器上要執行的shll命令 步驟

    增加構建後操作步驟- 選擇 Send build artifacts over SSH

    這裡要新增兩個Transfers Set,在第一個TransfersExec command輸入創建鏡像腳本:

    # 工作目錄
    WORK_DIR="/root/publish/WebApplication";
    cd ${WORK_DIR}
    # 刪除原有發佈文件夾
    rm -rf web-publish;
    # 解壓
    tar -xvf web-publish.tar;
    #刪除文件壓縮包
    rm -f web-publish.tar;
    #切換生成目錄
    cd web-publish/
    #備份鏡像
    #停止容器
    docker stop ${DOCKER_CONTAINER_NAME};
    #刪除容器
    docker rm ${DOCKER_CONTAINER_NAME};
    #刪除鏡像
    docker rmi $(docker images | grep ${DOCKER_IMAGE_NAME});
    #創建鏡像
    docker build -t ${DOCKER_IMAGE_NAME} ./;

    在第二個TransfersExec command,輸入運行容器命令:

    # 運行容器
    docker run -d -p 8001:80 --name  ${DOCKER_CONTAINER_NAME}  ${DOCKER_IMAGE_NAME}

    到這裡所有的設置都已經搞好啦,別忘記點擊保存,點擊立即構建 測試一下吧~

成果展示

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

-Advertisement-
Play Games
更多相關文章
  • 人生從來沒有固定的路線,決定你能夠走多遠的,並不是年齡,而是你的努力程度。無論到了什麼時候,只要你還有心情對著糟糕的生活揮拳宣戰,都不算太晚。遲做,總比不做好! ...
  • # 集美大學各省錄取分數分析(學號尾數為2,3同學完成) # 分析文件‘集美大學各省錄取分數.xlsx’,完成: # 1)集美大學2015-2018年間不同省份在本一批的平均分數,柱狀圖展示排名前10的省份, # 2)分析福建省這3年各批次成績情況,使用折線圖展示結果,並預測2019年錄取成績(數據... ...
  • 本文中 $n$ 代表著待排序序列的長度。 演算法是否穩定:若 $a_i = a_j \ , \ i 1; merge(l,mid),merge(mid+1,r); mergesort(l,r,mid);return;//遞歸,先給小區間排序後大區間。 } merge(1,n); 上張圖理解一下: 可用 ...
  • 前一陣子在寫 CPU,導致一直沒有什麼時間去做其他的事情,現在好不容易做完閑下來了,我又可以水文章了哈哈哈哈哈。 有關 FP 的類型部分我打算放到明年再講,因為現有的 C# 雖然有一個 pattern matching expressions,但是沒有 discriminated unions 和  ...
  • 前言 雖然說學習新的開發框架是一項巨大的投資,但是作為一個開發人員,不斷學習新的技術並快速上手是我們應該掌握的技能,甚至是一個.NET Framework開發人員,學習.NET Core 新框架可以更快速掌握其中的編寫,構建,測試,部署和維護應用程式。 您現有的.NET Framework應用程式可 ...
  • 我們可以使有dotnetcore跨平臺的特性,優雅的實現在dotnetcore執行shell (bash). 代碼如下:using System;using System.Collections.Generic;using System.Text;namespace hshoc{ using Sys... ...
  • [toc] 控制台視窗是一種簡單的命令提示視窗,允許程式顯示文本並從鍵盤接受輸人。 使用 方法獲取輸入,使用 方法輸出。 從控制台獲取輸入 可用 方法獲取控制台輸入的文本。程式執行到這一行代碼時,它將暫停程式執行並等待用戶輸入。用戶輸入內容後(也可以不輸入)按回車鍵,程式將繼續執行。 方法的輸出,也 ...
  • [toc] 程式離不開數據。把數字、字母和文字輸入電腦,就是希望它利用這些數據完成某些任務。例如,需要計算雙十一怎麼買才最省錢或者顯示購物車裡面的商品列表。 C 語言必須允許程式存儲和讀取數據,才能進行各種複雜的計算,而這正是通過變數實現的。 變數的聲明 上面這行代碼叫作聲明變數(declarat ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...