跳到主要內容

DotNet Core 專案部署腳本

DotNet core SDK

首先在 Server 上準備編譯環境


Dockerfile



#2.2 3.0 3.1
FROM mcr.microsoft.com/dotnet/core/sdk:3.1
RUN mkdir /web
WORKDIR /web


build docker image shell script



docker build -t dotnetcoresdk:3.1 .



start docker container shell script



docker run -it -d \
--name dotnet-core-sdk-3.1 \
-v /opt/web:/web \
dotnetcoresdk:3.1




Jenkins

Execute shell script on remote hosting using ssh



#切換至專案目錄
cd /opt/web/project/path

#取得最新版本
git pull

#切換至專案目錄 && 刷新 Dotnet Library
docker exec -i dotnet-core-sdk-3.1 bash -c "cd project/path && dotnet restore"

#切換至專案目錄 && 刪除上一次編譯的檔案 && 編譯
docker exec -i dotnet-core-sdk-3.1 bash -c "cd project/path && rm -rf  bin/Release && dotnet publish -c Release"

#docker-compose.yml 參 DotNet core Runtime Section
#!--rmi all 將原本執行的容器關閉並移除Image
docker-compose down --rmi all

#將新版程式包入 Image 並開始容器
docker-compose up -d




DotNet core Runtime

專案中包含 Dockerfile & docker-compose.yml


docker-compose.yml



version: '3' # 目前使用的版本,可以參考官網
services:
  dotnetproject:
    build:
      context: . 
      dockerfile: ./Dockerfile
    image: ${company name}/${project name}:${version}
    ports:
      - 80:80
    container_name: ${prefix}-${project name}-${type}
    restart: always


Dockerfile



#Dotnet Core Runtime version 2.2 3.0 3.1
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1

#建立工作目錄夾 Web
RUN mkdir /web 

#將編譯好的程式打包進 docker image
ADD ./bin/Release/netcoreapp3.1/publish/ /web 

WORKDIR /web 

#加入環境變數
ENV ASPNETCORE_ENVIRONMENT=Development

#設定容器起來時執行
ENTRYPOINT [ "dotnet", "dotnetproject.dll"]



留言

這個網誌中的熱門文章

Grafana Dashboard 建立

建立自己的 Dashboard # 由於 intelligent sense 相當不錯,輸入關鍵字他會帶出 metric label # 另外可參考 https://prometheus.io/docs/prometheus/latest/querying/basics/ Prometheus Query # 或是直接拿其他已建立的Dashboard 可複製到新的 Dashboard ex: node_memory_MemTotal_bytes # 取伺服器記憶體容量資料 # 過濾條件在{}加入 ex: node_memory_MemTotal_bytes{instance="${server 1}:9100"} # 要取特定伺服器資料 # Setting 中設定 Variables ex: node_memory_MemTotal_bytes{instance=~"$node"} # 變數名稱 node 建立 Alert .Visualization 必須是Graph

FluentD 實作 Nginx Access Log

實作 Nginx Access Log 透過 FluentD 收集 /var/log/nginx/nginx_web.access.log 日誌 過濾不必要的紀錄 輸出到MongoDB & Elasticsearch 延伸閱讀 FluentD 參數說明 FluentD 實作 Nginx Access Log 補充 fluent.conf # workers parameter for specifying the number of workers <system> workers 1 </system> <worker 0> <source> @type tail path /var/log/nginx/nginx_web.access.log pos_file /var/log/td-agent/nginx_web.access.log.pos tag nginx.web.access format /^(?<remote>[^ ]*) (?<host>[^ ]*) (?<user>[^ ]*) \[(?<logtime>[^\]]*)\] "(?<method>\S+)(?: +(?<path>[^\"]*) +\S*)?" (?<code>[^ ]*) (?<size>[^ ]*)(?: "(?<referer>[^\"]*)" "(?<agent>[^\"]*)")(?: "(?<custom_field1>[^\"]*)" "(?< custom_field2>[^\"]*)" "(?< custom_field3>[^\"]*)")?$/ time_format %d/%b/%Y:%H:%M:%S %z </source> # 濾掉不必要的存取紀錄 <fil...

FluentD 實作 Error Log

FluentD 實作 Error Log 本篇將介紹使用 DotNet 專案 log4net 套件,紀錄的 log 針對 Error Level 的訊息透過FluentD 提取出來 在紀錄中 增加 trace ID 設入 MongoDB , 及加入 Slack 通知 延伸閱讀 FluentD 參數說明 FluentD 實作 Nginx Access Log FluentD 實作 Nginx Access Log 補充 log4net <?xml version="1.0" encoding="utf-8" ?> <configuration> <log4net> <appender name="All" type="log4net.Appender.RollingFileAppender"> <file value="/var/log/my.log" /> <appendToFile value="true" /> <rollingStyle value="Size" /> <datePattern value="yyyy-MM-dd" /> <maximumFileSize value="5MB" /> <maxSizeRollBackups value="10" /> <staticLogFileName value="true" /> <PreserveLogFileNameExtension value="true" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="[%date] [...