Visual Studio容器專案工程化心得

頭號碼甲發表於2019-06-06

引言  

  關注博主的網友會看到我使用ASP.NET Core 容器化部署企業級專案的過程, 回想到開發過程中,鄙人有一些工程化心得, 分享給同學們。

 

專案工程化

  因為本專案涉及單元測試Project、容器化部署、本地化的sqlite資料庫,nlog日誌, 因此有必要給出我的Visual Studio 2019 解決方案目錄:

.
├── container
│   ├── app
│       ├── publish
│       ├── Dockerfile
│   ├── nginx
│       ├── Dockerfile
│       ├── nginx.conf
│   └── docker-compose.yml
├── .dockerignore
├── Eqid-Manager.sln
├── .git
├── .gitattributes
├── .gitignore
├── NuGet.Config
├── src
│   ├── EqidManager
│       ├── Property
│          ├── PublishProfiles
│              ── FolderPublish.pubxml 
└── test
    ├── EqidManager.Test
需要理解幾點:

① 建立container資料夾

  該專門存放容器化部署相關的檔案, 將開發內容和部署內容分開是一種DevOps實踐, 同時也為我們以後實現CI/CD做些許鋪墊。

  小技巧:  在使用Visual Studio的時候,可建立與以上檔案件同名的解決方案資料夾, 這樣便於開發人員編寫部署指令碼。

 

② 編寫git ignore 檔案

  網上很多大牛分享過git的操作技巧,add, commit, push, checkout、merge 相信很多開發人員爛熟如心。

但是作為企業級工程,多少會涉及一些不需要程式碼倉庫管理的檔案(金鑰檔案、臨時檔案、 本地資料庫檔案、 日誌檔案), 這就涉及git ignore的用法,更豐富的官方文件在這裡: https://git-scm.com/docs/gitignore

這個操作很多時候是由架構師一次性配置完成, 很多開發同學沒有實操過, 今天我們也來玩弄一下。

// 在解決方案.sln 同級目錄下編寫的.gitignore檔案:忽略vs user file,nuget package,temp files
 *.suo
*.user
packages
.vs
.nuget
container/app/publish/* 
//  在EqidManager專案資料夾下編寫.gitignore檔案:忽略localdb,logs,temp files
*.suo
*.user
bin
obj
internal-nlog.txt
EqidManager.db
healthchecksdb

 

③  編寫WebDeploy Publish Profile

  container資料夾中包含app和nginx的映象準備檔案和對應的Dockerfile,這裡我們關注 app/publish資料夾, 裡面將會存放本次應用程式的最終可執行檔案。

使用WebDeploy部署的時候 ,在該路徑生成部署檔案,便於統一管理, 產生的FolderPublish.pubxml 如下:

<?xml version="1.0" encoding="utf-8"?>
<!--
此檔案由 Web 專案的釋出/打包過程使用。可以通過編輯此 MSBuild 檔案
自定義此過程的行為。為了解與此相關的更多內容,請訪問 https://go.microsoft.com/fwlink/?LinkID=208121。 
-->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <WebPublishMethod>FileSystem</WebPublishMethod>
    <PublishProvider>FileSystem</PublishProvider>
    <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
    <LastUsedPlatform>Any CPU</LastUsedPlatform>
    <SiteUrlToLaunchAfterPublish />
    <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
    <ExcludeApp_Data>False</ExcludeApp_Data>
    <ProjectGuid>1213badd-176e-4c24-af84-bfdb0517b692</ProjectGuid>
    <publishUrl>../../container/app/publish</publishUrl>
    <DeleteExistingFiles>False</DeleteExistingFiles>
  </PropertyGroup>
</Project>

<!--
  關注黃色背景行,釋出目錄使用相對路徑(相對於專案檔案***.csproj的路徑)
-->
 

  WebDeploy根據此配置會在工程目錄container/app/publish下生成部署檔案, 準備部署時可直接拷貝container資料夾, 生成映象並形成容器。
  本文只是粗略分享 Devloper使用Visual Studio開發容器化專案的實踐,
CI/CD請持續關注。

作者:JulianHuang

感謝您的認真閱讀,如有問題請大膽斧正;覺得有用,請下方或加關注。

本文歡迎轉載,但請保留此段宣告,且在文章頁面明顯位置註明本文的作者及原文連結。

相關文章