Linux下自動化部署ASP.NET CORE 3.1(Docker+Jenkins+Nginx)

来源:https://www.cnblogs.com/zhoumeng0736/archive/2020/01/04/12149856.html
-Advertisement-
Play Games

1、先配置好Docker阿裡雲加速,可以使用阿裡雲容器服務 (可自己在阿裡雲申請,要不然安裝東西直接很慢)註意:https://XXXX.mirror.aliyuncs.com為阿裡雲加速服務分配地址 2、安裝Docker 使用腳本自動安裝 3、安裝JenKins創建jenkins工作目錄 拉取je ...


1、先配置好Docker阿裡雲加速,可以使用阿裡雲容器服務 (可自己在阿裡雲申請,要不然安裝東西直接很慢)
註意:https://XXXX.mirror.aliyuncs.com為阿裡雲加速服務分配地址

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://XXXX.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

  

2、安裝Docker
使用腳本自動安裝

$ curl -fsSL get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh --mirror Aliyun

  

3、安裝JenKins
創建jenkins工作目錄

mkdir /usr/local/jenkins

  

拉取jenkins鏡像

docker pull jenkins/jenkins:lts

  

修改jenkins目錄和docker目錄許可權,這裡1000是容器中Jenkins 的用戶 uid

chown -R 1000:1000 /usr/local/jenkins
sudo chown -R 1000:1000 /var/run/docker.sock

docker run -itd -p 8080:8080 -p 50000:50000 --name jenkins --privileged=true -v /usr/local/jenkins:/var/jenkins_home -v /usr/bin/docker:/bin/docker -v /var/run/docker.sock:/var/run/docker.sock jenkins/jenkins:lts 

  

參數解釋:
-p 8080:8080 -p 50000:50000 --映射jenkins埠
--name jenkins --容器名稱自己命名
privileged=true --授予容器管理員許可權
-v /usr/local/jenkins:/var/jenkins_home --映射jenkins目錄
-v /usr/bin/docker:/bin/docker --映射docke目錄 到時候需要在容器里執行docker命令
-v /var/run/docker.sock:/var/run/docker.sock --映射docker執行命令 到時候需要容器里執行docker命令。

配置JenKins
查看容器啟動成功後,我們可以通過地址+埠訪問剛剛運行的Jenkins
例如http://IP地址:8080
安裝成功訪問後會如下圖所示。

 

 

 

提示首次訪問需要密碼,我們通過剛剛映射的Jenkins目錄里查看這個預設密碼。
預設密碼路徑:/usr/local/jenkins/secrets/ (註意前面usr/local/jenkins路徑就是剛剛自己映射的目錄)

 

 

 

 

 

 安裝完成後創建一個用戶名和密碼,即可完成安裝進入首頁。

 

 

 

3. 創建項目

1、源代碼編譯發佈工程

源代碼發佈工程即將源代碼提交到git伺服器,jenkins通過git拉取最新的源代碼,並通過Dockerfile里的配置進行編譯發佈過程。然後通過Docker構建此鏡像並運行到容器。

創建一個.Net Core Web項目。

 

創建項目的時候可以選擇啟用Docker支持。

 

 預設的Dockerfile是有幫我們進行代碼編譯併發布動作的。所以預設的Dockerfile文件是適合和代碼一起提交到伺服器然後使用Docker進行構建鏡像。

 項目創建完成後隨代碼一起提交到git伺服器。(svn等也都可以)

git項目目錄,註意將Dockerfile複製到根目錄。由於到時候構建鏡像的時候就是從根目錄執行的。

2、已編譯的Release工程

已編譯的Release工程,此種方式適合git或svn在區域網的;又不希望源代碼不暴露到外網的需要。此種方式是將項目工程進行進行發佈打包操作。例如java常見的打包成一個war包文件。.Net 就是生成對應的DLL 文件。

項目在發佈之前我們對項目的Dockerfile文件屬性做個更改,以便在發佈時將此文件複製到發佈時的目錄。

將發佈文件發佈到自己的git(或svn)目錄,如下圖所示的,一定要包含Dockerfile文件。發佈後的文件,可以根據自己需要將沒有更新DLL或者appsetting.json等文件剔除掉。只保留本次要更新的文件即可。

修改Dockerfile文件,因為預設的Dockerfile文件是包含編譯發佈的命令,所以這裡要將這些相關命令操作刪除掉;保留如下命令配置即可。

 

 保存然後提交到所有文件到git伺服器。

提交後的git目錄。

建議:無論是代碼編譯發佈工程還是已編譯的Release工程,第一次使用Docker部署時最好先自己手動將這些文件拷貝到伺服器,並手動構建對象並運行容器看是否成功;能否訪問網站。也就是先不用Jenkins將這些流程自己手動走一遍,確保一些目錄包括Dockerfile等都是配置正確的。

如只想將發佈文件提交到git,可以下載git桌面版本,在本地新建項目,同步到git線上即可;

 

4.  創建JenKins任務

項目工程創建完成並提交到git伺服器後,開始在Jenkins裡面創建任務。

 

 

 輸入項目描述,源代碼管理選擇自己對應的即可。

 

 

 我這裡選擇的git。第一次添加項目時需要添加一種授權方式點擊右邊添加按鈕即可。

 

 

 選擇添加授權方式 常用的就是用戶名加密碼或者SSH方式。

 

 

 下一步設置構建環境

 

 

 設置觸發器,這裡主要是設置自動觸發條件,有定時構建、遠程觸發構建、輪詢SCM。

這裡只設置輪詢SCM形式的,很簡單的方式。意思是在指定間隔時間內會去輪詢git或svn中版本是否有變化。如果有就立即構建該項目。其實就是做到只要代碼提交了 則立刻就能自動構建項目進行發佈;不在需要其他任何操作了。

 

 

 選擇構建—>執行shell;當然我們這裡是linux伺服器所有多數選擇執行shell。

 

 

 添加shell 命令

#!/bin/bash
# 獲取短版本號
GITHASH=`git rev-parse --short HEAD`
docker stop webtest
docker rm webtest
echo ---------------Building Docker Image...------------------
docker build -t webtest:$GITHASH .
docker tag webtest:$GITHASH webtest:latest
echo ---------------Launching Container...------------------
docker run --name webtest -d -p 8005:80 webtest:latest 

應用--保存

在構建開始前,請確認已安裝ASP.NET Core Runtime與.NET Core SDK

docker pull mcr.microsoft.com/dotnet/core/aspnet:3.1

docker pull mcr.microsoft.com/dotnet/core/sdk:3.1

請先提前安裝,否則構建時可能會因無法安裝而超時

自動開始構建了 註意jenkins這裡時間是預設是utc時間。utc時間轉換我們北京時間是要+8小時的。

藍色圖標代表構建成功,如果失敗會是紅色

查看控制台輸出信息,尤其構建失敗時能夠從裡面獲取到失敗原因等。

 

 

構建失敗情況

1、ASPNETCORE項目發佈中Dockfile文件中配置項沒有修改

 

 

2、Docker命令不存在,目錄許可權沒有設置

 

 3、構建時超時,aspnetcore運行時沒有安裝

 

 nginx安裝

docker pull nginx:latest

docker run --name nginx-test -p 8080:80 -d nginx

  

參數說明:

--name nginx-test:容器名稱。

-p 8080:80: 埠進行映射,將本地 8080 埠映射到容器內部的 80 埠。

-d nginx: 設置容器在在後臺一直運行。

 

nginx 代理設置

docker ps -a  獲取nginx容器ID

docker exec -it 容器ID /bin/bash 進入容器

因為容器沒有安裝VIM,先安裝VIM

apt-get update && apt-get install vim -y

進入/etc/nginx/conf.d

新建文件

vim xxxx.conf

server {
    listen        80;
    server_name   example.com *.example.com;
    location / {
        proxy_pass         http://localhost:5000;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection keep-alive;
        proxy_set_header   Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
    }
}

可參考

https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-3.1

nginx -t  配置文件檢測

nginx -s reload 更新配置文件

最後成果:

 


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

-Advertisement-
Play Games
更多相關文章
  • 不知不覺,一年一度的春運搶票大幕已經拉開,想快速搶到回家的車票嗎?作為程式員,這些技術手段,你一定要知道。 為了讓大家更快捷更便利的搶火車票,各種各樣的搶票軟體應需而生,這類軟體大部分都是付費搶票的機制。 作為程式員,如何用技術手段搶到回家的票?來看看用 Python 寫的搶票腳本。 手把手教你用 ...
  • float和double都是C++中的浮點型數據類型,三者的區別是:1、精度是不同的。float類型是單精度浮點數,double類型是雙精度浮點數。2、分配存儲空間。c++編譯器為flaot類型分配4位元組,為double類型分配8位元組。3、有效位的個數是不同的。float可以提供6位有效數字,dou ...
  • 什麼是JVM JVM是Java Virtual Machine(Java虛擬機)的縮寫,是一個虛構出來的電腦,它屏蔽了與具體操作系統平臺相關的信息,使得Java程式只需生成在Java虛擬機上運行的目標代碼(位元組碼,ByteCode), 就可以在多種平臺上不加修改地運行。這背後其實就是JVM把位元組碼 ...
  • 1.讀入string 需包含頭文件:iostream(iostream中包含string)。 #include <iostream> 方法: 1.讀到空格、tab、回車中任意一個結束:直接cin。 string a; cin >> a; 2.讀一行:getline。 string a; getlin ...
  • 在PHP中會話處理是一個很重要的概念,它允許用戶信息在網站或應用程式的所有頁面上保持不變。下麵本篇文章就來帶大家學習一下PHP中會話處理的基礎知識,希望對大家有所幫助。 PHP中什麼是會話(session)? 會話(session)是一種在不同網頁上保留信息的機制,用於在用戶瀏覽網站或應用時識別用戶 ...
  • 本章將和大家簡單分享下如何使用NuGet將我們的ASP.NET Core類庫打包並將程式包(類庫)發佈到NuGet平臺上進行管理。 ...
  • 本筆記摘抄自:https://www.cnblogs.com/PatrickLiu/p/7551373.html,記錄一下學習過程以備後續查用。 一、引言 簡單工廠模式並不屬於GoF23裡面的設計模式,其實它屬於一個過渡的模式,這個模式是為了引出下一篇要講的模式:工廠模式。 二、簡單工廠模式的介紹 ...
  • 1. 寫在前面 一直從事WPF的相關開發工作,有時為了嘗試或演示某些僅僅基於XAML的效果時,但又不想大動干戈打開VS去創建項目,所以一個輕便簡單,集編輯與預覽於一身的XAML編輯器就顯得格外重要。 Kaxaml,集編輯與預覽,過去一直在使用,但苦於不知何原因,最近頻頻崩潰,雖然開源有代碼可循,但也 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...