在上一篇([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階段的時候執行:
那package實際上是在做什麼事情呢?其實想一下,當我們把程式碼編譯了之後一般來說會做什麼?
是不是會把編譯過的內容更新到機器上面?那要更新過去會遇到一個問題,就是怎麼 打包 讓攜帶過去更新的時候更加的方便。
既然提到了打包,那麼和直覺的下一個問題就是,打包成為什麼格式。
常見的Package格式
一般來說在.Net的世界裡面有幾種類型的格式:
- 壓縮檔 - 例如 zip
- nuget - 共用library
- web在用 - web deploy的package
- 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裡面的地位。
版號的重要性
了解了不同類型的package格式了之後,下一個問題就是,在可以支援更新的那種package(也就是除了zip以外的所有package),是要怎麼知道到底有沒有更新呢?或者說怎麼知道要更新的內容和目前的內容之間的差異有多少呢?
這就不得提到版號了。
舉個簡單例子,今天裝了Json.Net 1 版的nuget,那麼如果2版出來的時候,因為版號的差異就可以知道屬於往上升的情況。
因此版號的機制非常重要,好的版號機制能夠讓管理的人有個基本概念知道,更新的內容是否會有breaking change。
結語
在這篇介紹了package的兩個基本概念:
- 格式
- 版本
不過版本的部分牽涉的內容更多,因此接下來的篇幅將會在更深入的介紹版本的基本概念,以及如何產生版號。
沒有留言 :
張貼留言