Alan Tsai 的學習筆記


學而不思則罔,思而不學則殆,不思不學則“網貸” 為現任微軟最有價值專家 (MVP)、微軟認證講師 (MCT) 、Blogger、Youtuber:記錄軟體開發的點點滴滴 著重於微軟技術、C#、ASP .NET、Azure、DevOps、Docker、AI、Chatbot、Data Science

[從.Net工程師的角度來看DevOps 26]Package階段介紹

image
圖片來源:https://pixabay.com/en/books-spine-colors-pastel-1099067/ 和 https://blog.xebialabs.com/2016/03/21/essential-devops-terms/

在上一篇([25]在Visual Studio Team Services執行Build Script和CI Server總結)介紹完了VSTS的build建制之後,基本上build階段算是告一個段落了。

到目前為止,我們的build script不管是在CI Server那一端,還是在local端都能夠執行一樣的build script來產生出能夠執行的內容。

接下來就要進入另外一個階段,也就是怎麼把產生出的內容打包成為適合發佈用的階段,也就是:package

這篇將會對於package階段的內容做個基本介紹。

Package階段在做什麼

還記得在一開始([02]什麼是DevOps?)介紹CI和CD的整個大框架的時候,有個部分叫做Package - 專門用來在Continus Delivery階段的時候執行:

image
Package階段

那package實際上是在做什麼事情呢?其實想一下,當我們把程式碼編譯了之後一般來說會做什麼?

是不是會把編譯過的內容更新到機器上面?那要更新過去會遇到一個問題,就是怎麼 打包 讓攜帶過去更新的時候更加的方便。

既然提到了打包,那麼和直覺的下一個問題就是,打包成為什麼格式

常見的Package格式

一般來說在.Net的世界裡面有幾種類型的格式:

  1. 壓縮檔 - 例如 zip
  2. nuget - 共用library
  3. web在用 - web deploy的package
  4. DB - dacpac

壓縮檔 - zip

一般來說會把編譯過的內容打包成為zip只有一個目的,就是copy過去的時候更快速和方便。由於通用性很好,因此大部分的package本質上 都是zip。

不管什麼類型的專案和檔案,也不管目標是什麼版本的windows,基本上把zip帶過去解壓縮就可以用了。因此zip是最常見的一種package方式。

這種類型偏向於是要把程式更版或者提供給他人能夠直接使用

nuget

如果今天開發的是一個library或者說是用來輔助開發使用的內容,那麼包成nuget是最適合的package。

nuget本質上也是zip,不過和zip不同之處在於他有一些meta資訊,可以提供一些像是package內容說明和版號等資訊。

如果是公開的library,那麼可以放到Microsoft提供的nuget server,或者可以自己架設內部的nuget server。

關於如何建立nuget package,可以參考我部落格裡面和nuget標籤有關的內容:直接連接

Web - web deploy package

如果今天要更新的內容是網站類型的內容(例如Asp.Net網站)要更新到IIS,那麼 web deploy package是一個很適合的格式。

Web deploy package本質上也是zip,不過裡面有一些額外資訊可以讓IIS裡面的Web Deploy讀懂,讓更新的時候做到差異更新

DB - dacpac

如果今天是要更新db schema的部分,那麼dacpac是很適合的格式。

dacpac本質上也是zip,不過裡面記錄了一些資訊,然後工具執行更新的時候,知道需要異動那些schema。

從某種程度來說,dacpac就是同等於web deploy package在IIS裡面的地位。

雖然DB很重要,但是在這個系列不會介紹到dacpac的建立

版號的重要性

了解了不同類型的package格式了之後,下一個問題就是,在可以支援更新的那種package(也就是除了zip以外的所有package),是要怎麼知道到底有沒有更新呢?或者說怎麼知道要更新的內容和目前的內容之間的差異有多少呢?

這就不得提到版號了。

舉個簡單例子,今天裝了Json.Net 1 版的nuget,那麼如果2版出來的時候,因為版號的差異就可以知道屬於往上升的情況。

因此版號的機制非常重要,好的版號機制能夠讓管理的人有個基本概念知道,更新的內容是否會有breaking change

結語

在這篇介紹了package的兩個基本概念:

  1. 格式
  2. 版本
基本上格式的部分了解差不多了,剩下只需要了解怎麼產生即可。

不過版本的部分牽涉的內容更多,因此接下來的篇幅將會在更深入的介紹版本的基本概念,以及如何產生版號。


如果文章對您有幫助,就請我喝杯飲料吧
街口支付QR Code
街口支付QR Code
台灣 Pay QR Code
台灣 Pay QR Code
Line Pay 一卡通 QR Code
Line Pay 一卡通 QR Code
街口支付QR Code
支付寶QR Code
街口支付QR Code
微信支付QR Code
comments powered by Disqus