2018年2月10日 星期六

[從.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. 版本
基本上格式的部分了解差不多了,剩下只需要了解怎麼產生即可。

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


沒有留言 :

張貼留言