中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

數據庫與Redgate SQL Toolbelt的持續集成方法是什么

發布時間:2021-12-23 09:28:45 來源:億速云 閱讀:145 作者:iii 欄目:數據庫

本篇內容主要講解“數據庫與Redgate SQL Toolbelt的持續集成方法是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“數據庫與Redgate SQL Toolbelt的持續集成方法是什么”吧!

理論與實踐中的數據庫CI

CI背后的理論是,如果我們每天多次將代碼集成到共享存儲庫中,然后通過運行自動構建和后續測試來驗證每個提交,那么我們會及早發現并根除問題,并提高軟件的質量。

本文的內容是關于設置管道,使您能夠將CI理論付諸實踐,用于數據庫。當我在2013年發布關于這個主題的原始文章時,它使用了SVN和Jenkins,并且證明非常受歡迎。這仍然是一條可行的路線,但在我們的行業中,半年是永恒的,其他技術和工具也越來越受歡迎。PowerShell已經成為Microsoft堆棧的主要腳本語言,而Git是每個人都流行的源代碼控制工具。Jenkins,或者甚至是TeamCity,仍然可以輕松地用于CI服務器,但上個月Azure DevOps取代了Visual Studio Team Services(VSTS),感覺它是撰寫2013年原始帖子新版本的最佳時機。Azure DevOps有免費套餐 任何想要學習本教程的人都可以使用。

因此,本文將使用:

  • Git - 作為源控制系統。

  • Azure DevOps - 托管遠程Git倉庫并自動化數據庫構建

  • Redgate SQL源代碼控制(SoC) - 在本地提交數據庫更改。我們克隆遠程倉庫然后將其鏈接到SoC,因此我們可以直接從SSMS提交數據庫更改

  • PowerShell - 將提交推送到Azure DevOps上托管的遠程存儲庫

  • Redgate SQL Change Automation(SCA) - 使用PowerShell cmdlet自動執行本地數據庫構建(可選步驟)

  • Azure DevOps的SCA插件 - 自動化數據庫構建和部署過程

當然,僅僅因為你現在擁有一些CI工具就說你是CI實踐者,就像你購買第一架望遠鏡時聲稱自己是天文學家一樣。這些工具只是必要的第一步。團隊仍然需要采用良好的CI實踐。開發人員需要編寫單元測試,證明每個小的更改都有效。他們必須盡可能多地每天多次提交對共享源代碼控制存儲庫的更改。每次提交都應觸發自動數據庫構建,以確保團隊始終具有可用的數據庫構建過程。每天晚上,團隊應該運行集成測試(本文未涉及),以證明所有單獨的單元一起工作以實現所需的過程。這些CI實踐自然會導致自動部署,

當然,你可以在沒有這些工具的情況下練習CI,但是工具越好,你就能找到更容易和更有價值的CI,就像望遠鏡和天文學一樣。

你需要什么來開始

本文假定您對SQL Server,Git和PowerShell有基本的了解。為了重現這個概念證明,我使用了以下軟件版本:

  • 具有管理員訪問權限的Windows Server 2016 VM。您還應該能夠在Windows 10上使用所有類似的結果。

  • SQL Server 2017開發人員版。你可以在這里下載。

  • Redgate SQL Toolbelt(2018年10月版)。您可以在這里下載它,它提供14天免費試用。特別是,您需要在本地工作站上安裝SQL Source ControlSQL Change Automation

  • Git 2.19。你可以在這里下載。

  • Azure DevOps帳戶,您可以在這里免費創建一個帳戶

您可以使用該軟件的較舊版本或較新版本,但由于Azure DevOps是托管服務,而且時間是一個復雜的問題,我不會對兼容性做出任何承諾。同樣,如果您將來幾個月或幾年閱讀此帖子,您可能會發現Azure DevOps UI已更改:

您還需要一個數據庫來玩。我將使用StackOverflow數據庫,因為它有一個簡單的架構,我知道它的工作原理。對于您的第一次構建,嘗試使用可以單獨構建的簡單內容localDB。這不包括AdventureWorks,因為localDB不支持全文搜索。此外,現在嘗試避免依賴于其他數據庫的數據庫。

步驟1:創建新的Azure DevOps項目并克隆存儲庫

導航到Azure DevOps中的Projects選項卡(在我的例子中,https://dev.azure.com/DLMConsultants/_projects)

數據庫與Redgate SQL Toolbelt的持續集成方法是什么

為項目指定名稱,例如數據庫的名稱。在版本控制下,選擇Git,然后選擇您的首選工作項流程。如果有疑問,默認的工作項流程(敏捷)很好,因為它對本教程沒有任何影響。

數據庫與Redgate SQL Toolbelt的持續集成方法是什么

將repo克隆到本地工作站。要執行此操作,請復制Azure DevOps中的HTTPS鏈接:

數據庫與Redgate SQL Toolbelt的持續集成方法是什么

現在,打開PowerShell窗口,導航到您要存儲源代碼的目錄并克隆repo。基本命令如下所示:

git  clone  https://yourcompany@dev.azure.com/etc

這是我的完整命令窗口:
數據庫與Redgate SQL Toolbelt的持續集成方法是什么

您現在應該在計算機上有一個本地存儲庫,其中包含一個隱藏的.git目錄,您可以在其中添加數據庫源代碼。

數據庫與Redgate SQL Toolbelt的持續集成方法是什么

第2步:將數據庫鏈接到源

我們將使用Redgate SQL Source Control,因此請確保已安裝并且您可以在SSMS中訪問您的數據庫。打開SSMS并右鍵單擊要鏈接到源代碼管理的開發或測試數據庫。選擇“將數據庫鏈接到源代碼管理... ”

數據庫與Redgate SQL Toolbelt的持續集成方法是什么

Redgate SQL Source Control將在查詢窗口中打開。選擇“ 鏈接到我的源代碼管理系統 ”,從支持的源代碼管理系統中選擇“ Git ”,然后粘貼到本地源代碼控制存儲庫的路徑中。然后單擊“ 瀏覽 ”和“創建新文件夾 ”并將“ 狀態 ”目錄添加到源控件存儲庫的根目錄,并將數據庫鏈接到狀態目錄。其原因將在步驟2.1中變得清晰。

數據庫與Redgate SQL Toolbelt的持續集成方法是什么

成功鏈接后,請注意RedGate.ssc文件已添加到Git 倉庫中的“ state ”目錄中。然后轉到Redgate SQL Source Control中的“ Commit ”選項卡,您將看到所有數據庫對象的列表,準備提交給源代碼管理。確保選中所有對象,鍵入提交消息并單擊commit

數據庫與Redgate SQL Toolbelt的持續集成方法是什么

當SQL Source Control表示所有更改都已提交時,請再次查看您的git倉庫。您應該看到所有數據庫對象都編寫到各種目錄中。

數據庫與Redgate SQL Toolbelt的持續集成方法是什么

由于Git是一個分布式源代碼控制系統,因此您只需將這些更改提交到本地倉庫。您尚未將這些文件推送到Azure DevOps中托管的遠程倉庫。為此,請再次打開PowerShell終端,導航到git repo的根目錄并運行命令:git push。

數據庫與Redgate SQL Toolbelt的持續集成方法是什么

您可能會在SQL源代碼管理提交選項卡中看到“ 推送 ”按鈕,但它可能無法正常工作。這是Azure DevOps中托管的Redgate SQL Source Control和Git repos的已知問題。雖然有點令人沮喪,但打開PowerShell終端并輸入“git push”并不是很麻煩,而且SQL Toolbelt中的其他功能可以彌補它。也就是說,如果破碎的“推送”按鈕讓你煩惱,你可以在這里添加你的投票。

將源代碼推送到Azure DevOps之后,您應該能夠在Azure DevOps網站的“ 代碼 ”選項卡下看到它:

數據庫與Redgate SQL Toolbelt的持續集成方法是什么

步驟2.1:使用SCA和PowerShell編寫數據庫構建腳本(可選步驟)

我們現在在源代碼控制中有我們的數據庫,所以下一步是設置一個構建過程來檢查我們的源代碼是否“編譯”。通過這個,我的意思是它是可部署的。例如,如果源文件中存在一些非法的T-SQL語法,'或者如果某些視圖缺少依賴項,可能是因為我重構了一些表,但忘記更新我的視圖,那么SQL Server將無法執行我的源代碼,我的數據庫構建將失敗。

此步驟是可選的,或者至少使用PowerShell在本地運行它是可選的。另一種方法是“跳過此步驟直接跳到步驟3,開始在Azure DevOps上配置數據庫構建。但是,我喜歡先在本地運行我的構建。它幫助我了解幕后發生的事情。它還幫助我了解我的第一個構建是否由于我的源代碼或我的Azure DevOps配置而失敗。

在源代碼管理的根目錄中在“ state ”目錄旁邊創建一個名為“ build ” 的新目錄。這解釋了為什么我沒有在步驟2中將我的數據庫鏈接到我的Git倉庫的根目錄。將其他相關文件放在源代碼管理中是有用的,但是你不想將它們放在你的Redgate文件夾中。

數據庫與Redgate SQL Toolbelt的持續集成方法是什么

使用localdb驗證構建

在構建目錄中創建一個名為“ build.ps1 ” 的新文件,并將以下PowerShell代碼復制到其中。您可能希望更改參數的默認值$packageID以反映數據庫的名稱。現在,您應該保留其他參數。我將很快解釋$packageVersion,$packagePath$testPath參數,我將在進一步擴展下解釋其他。

PARAM
      [ string ] $ packageVersion  =  '0.1' ,
      [ string ] $ packageID  =  'StackOverflow' ,
      [ string ] $ packagePath  =  'C:\ packages' ,
      [ string ] $  testPath =  'C:\ testResults' ,
      [ string ] $ targetServerInstance  =  'TARGETSERVERINSTANCE' ,
      [ string ] $ targetDatabase   =  'TARGETDATABASE'
$ errorActionPreference  =  “停止”
導入模塊 SqlChangeAutomation  - ErrorAction  silentlycontinue  - ErrorVariable  + ImportErrors
“*****參數*****
packageVersion  是 $ packageVersion
packageID  是 $ packageID
packagePath  是 $ packagePath
testPath  是 $ testPath
* * * * * * * * * * * * * * * * * * * * * * “|寫入輸出
#在父目錄中搜索狀態文件夾
$ myDir  =  Split-Path  - Parent  $ MyInvocation 。我的命令。路徑
$ scriptsFolder  =  Join-Path  - Path  $ myDir  - ChildPath  '.. \ state'
$ scriptsFolder
如果 (-not  (測試的路徑 - PathType  集裝箱 $ scriptsFolder ))
{
      寫錯誤 “ 無法找到$ scriptsFolder ”
}
#Using Redgate SCA驗證狀態目錄中的代碼
嘗試
{
      $ validatedScriptsFolder  =  Invoke-DatabaseBuild  $ scriptsFolder   #-SQLCompareOptions'NoTransactions'
}
趕上 #
{
      $ _ 。例外。信息
      “ $($數據庫。名稱; )無法驗證,因為$($ _ 。異常。消息)”  |  Foreach {
            寫錯誤 $ _
      }
}
<#
#導出NuGet包
 $ databasePackage = New-DatabaseBuildArtifact $ validatedScriptsFolder -PackageId $ packageID -PackageVersion $ packageVersion
 Export-DatabaseBuildArtifact $ databasePackage -Path $ packagePath
#運行測試
 $ testResultsFile =“$ testPath \ $ packageID.junit。$ packageVersion.xml”
 $ results = Invoke-DatabaseTests $ databasePackage
 Export-DatabaseTestResults $ results -OutputFile $ testResultsFile
#同步測試數據庫
 $ targetDB = New-DatabaseConnection -ServerInstance $ targetServerInstance -Database $ targetDatabase
 Test-DatabaseConnection $ targetDB
 Sync-DatabaseSchema -Source $ databasePackage -Target $ targetDB
 #>

此PowerShell代碼使用SQL Change Automation在其中創建新數據庫localDB并將所有源代碼部署到該數據庫。一旦部署了數據庫,SQL Change Automation就會立即將其刪除,因為它已經達到了目的。如果您每周運行10次構建一周,則不希望有50個測試數據庫。

您應該能夠從PowerShell運行腳本,如果您愿意,可以覆蓋默認參數。

CD  的 根目錄 中 的 源 控制\ 構建
。\ build 。ps1  - packageVersion'0.1  '  - packageID'MyDatabase  '

這是完整的命令窗口,來自我的例子:

數據庫與Redgate SQL Toolbelt的持續集成方法是什么

如果您的構建腳本有效,那太好了!如果沒有,你可能會發現一些破碎的代碼,也很棒!通常,這些是代碼損壞,缺少依賴性,localDB未安裝或SQL Server憑據不正確的結果。PowerShell輸出是你的朋友。

使用臨時數據庫驗證構建

您可能會遇到無法部署數據庫的情況localDB,例如,它缺少對某些其他數據庫的依賴關系,或者使用localDB不支持的SQL Server功能。例如,AdventureWorks使用不會部署到的全文搜索localDB。相反,您可以在“temproary”SQL Serve實例上部署到數據庫,該實例設置了數據庫所需的所有功能,依賴項,文件組等。(請參閱Invoke-DatabaseBuild cmdlet文檔中的示例3和4。)

您可以下載一個PowerShell構建腳本(DBBuildTempServer.ps1),以稍微不同的樣式編寫,以展示可能的方法,以了解它是如何工作的。
您應該能夠從PowerShell運行腳本,如果您愿意,可以覆蓋默認參數。

CD  的 根目錄 中 的 源 控制\ 構建
。\ build 。ps1  - packageVersion'0.1   '  - packageID'MyDatabase   '   - TempServer'MyServerInstance  '  - User_id   ''  - 密碼 ''

如果您沒有可用于此過程的SQL Server實例,只需-TemporaryDatabaseServer $TempconnectionString從SCA Invoke-DatabaseBuild命令中刪除它,它將使用localDB,如前所述。Phil Factor的文章還提供了許多有關使用PowerShell和SCA的額外信息。

創建NuGet包

在這個階段,我們所做的就是驗證構建; 換句話說,證明了數據庫將成功構建。完成后,我們可以開始探索其他SCA cmdlet,它們將從經過驗證的構建生成并導出數據庫構建工件,在其上運行我們的測試套件,然后部署測試的更改,以使目標數據庫與經過驗證和測試的同步資源。

我將在稍后的“ 擴展”部分中介紹測試和同步cmdlet ,但是現在您可能希望生成一個NuGet包。NuGet包可以用作構建工件,代表了基于包的部署和持續交付的重要里程碑。您只需在構建腳本中取消注釋幾行代碼即可生成NuGet包。

只需在底部注釋塊中的#Export NuGet包下立即取消注釋兩行(例如,將<#幾行移動到下面),并確保默認值為$packagePath不在git倉庫中的現有目錄。如果你把它留空,它將在你的git repo的build目錄中創建一個NuGet包,我不推薦。

現在,當您運行成功的構建時,將創建包含源代碼的NuGet包。請注意,如果您嘗試創建兩個具有相同$packageID$packageVersion相同$packagePath的包,則構建將失敗,因此您需要覆蓋構建號或每次重新運行構建時刪除舊包。

提交對源代碼管理的更改并將其推送到服務器。

> git  add  build。PS1
> git  commit  - m  “添加構建腳本”
> git  推

數據庫與Redgate SQL Toolbelt的持續集成方法是什么

第3步:使用Azure DevOps自動構建

您現在擁有源代碼管理中的數據庫代碼,并將其推送到Azure DevOps。如果您按照步驟2.1中的說明進行操作,那么您還可以在源代碼管理中使用PowerShell腳本來構建數據庫,并且您知道源代碼是“編譯”的。現在,我們希望每次將新更改推送到源代碼控制時,Azure DevOps都會構建數據庫,以驗證是否可以部署更改并捕獲任何錯誤。

我們將使用Redgate Azure DevOps擴展來自動化數據庫構建,因為這不需要您遵循步驟2.1。如果您確實按照步驟2.1而不是使用Redgate插件,則可能更喜歡使用執行build.ps1文件的原始PowerShell任務來運行構建腳本,并根據需要覆蓋默認參數。如果采用該方法,您可能會發現Azure DevOps預定義變量的索引很有用,您可能希望使用$(Build.BuildNumber)或$(Build.BuildID)來創建具有順序版本號的包。

您的自動構建將由“構建代理”執行。如果您已經localDB可以單獨構建數據庫,則應該能夠立即使用托管構建代理。否則,您需要在托管的服務器上配置本地代理,該服務器可以訪問合適的目標SQL Server實例以運行構建。

在Azure DevOps中,將鼠標懸停在“ 管道”選項卡上,然后從下拉列表中選擇“ 構建 ”。

數據庫與Redgate SQL Toolbelt的持續集成方法是什么

點擊New Pipeline按鈕,確保選擇了正確的源控制存儲庫和主分支。然后為模板選擇“ 空作業 ”。

數據庫與Redgate SQL Toolbelt的持續集成方法是什么

將為您創建一個新的管道,其默認名稱(在我的情況下為StackOverflow-CI)和默認的代理隊列(在我的情況下,托管VS2017,這是Azure DevOps的默認名稱。管道包含一個名為AgentJob1的默認作業,雖然如果你選擇它,你可以重命名它。讓我們稱之為Build Stack Overflow Database

數據庫與Redgate SQL Toolbelt的持續集成方法是什么

我們可以將任務添加到將運行MSBuild或執行PowerShell腳本等的代理作業,以編譯和測試我們的代碼。為此,請單擊代理作業旁邊的+按鈕。

數據庫與Redgate SQL Toolbelt的持續集成方法是什么

Redgate SQL Change Automation Azure DevOps擴展默認不可用,但如果您在添加任務下的Marketplace選項卡中搜索“Redgate”,您將找到它。按照說明添加SQL Change Automation:Build擴展。

安裝完成后,找到返回構建過程的方法。您可能需要再次點擊上面的第2-5點,因為您的新定義可能尚未保存。這一次,如果您搜索“Redgate”,您會發現該擴展程序無需再次通過Marketplace即可使用,您只需單擊“ 添加”即可

數據庫與Redgate SQL Toolbelt的持續集成方法是什么

將在Build StackOverflow數據庫創建構建任務,并警告某些設置需要注意。單擊此構建任務,然后在“ 操作”下,選擇“ 構建SQL源代碼管理”項目。然后,在Database文件夾下選擇“ Database scripts文件夾是VCS根目錄的子文件夾 ”,在Subfolder Path下使用向導選擇由SQL Source Control維護的狀態目錄(不要選擇Git repo的根目錄) ,如果您按照步驟2.1,還將包含您的構建腳本!)。

Output NuGet Package ID下,為您的構建工件寫一個名稱。通常,這將是您的數據庫的名稱。

數據庫與Redgate SQL Toolbelt的持續集成方法是什么

單擊“ 保存并排隊”以手動觸發構建。默認設置應該沒問題。您應該看到一個黃色通知,表明構建已排隊。如果單擊該號碼,則會轉到實時構建日志。

數據庫與Redgate SQL Toolbelt的持續集成方法是什么

將為您分配托管代理。然后,它將下載SQL Change Automation并localDB在云中自行構建源代碼并報告結果。

請注意,如果您的數據庫不構建在Azure中托管構建代理上的本地數據庫的默認安裝上,則構建將失敗。如果您的數據庫不能構建localDB,則需要提供一個單獨的SQL Server實例來運行構建。然后,在Build StackOverflow Database構建任務中,將Temporary服務器類型SQL LocalDB(推薦)更改為SQL Server,并向服務器實例提供連接詳細信息。如果要在本地托管此服務器實例,則可能需要安裝可以訪問本地服務器的本地構建代理來運行構建。

構建可能需要幾分鐘。就我而言,使用Stack Overflow和托管構建代理程序,花了大約兩分半鐘。使用更大,更復雜的模式,您可能需要更長時間。

數據庫與Redgate SQL Toolbelt的持續集成方法是什么

如果構建失敗,請查找日志中的錯誤并進行故障排除。常見問題包括缺少依賴項,不正確的憑據,對數據庫的權限不足,使用不受支持的功能localDB以及損壞的T-SQL代碼。保持堵塞,直到你的構建變綠。如果您跳過步驟2.1并且在構建時遇到問題,請考慮返回并嘗試步驟2.1,因為這是解決源代碼問題的一種更簡單的方法,可以幫助您確定問題是否與源代碼或Azure DevOps配置。

一旦構建為綠色,您需要設置構建觸發器以確保每次將新代碼推送到Azure DevOps服務器時構建都會運行。從Azure DevOps中的任何頁面,將鼠標懸停在頂部的“ 管道”選項卡上,然后選擇“ 生成”以導航回您的構建定義。選擇Build Definition,然后選擇Edit按鈕。

數據庫與Redgate SQL Toolbelt的持續集成方法是什么

選擇觸發器并確保選中啟用持續集成,您就完成了。

數據庫與Redgate SQL Toolbelt的持續集成方法是什么

如果您已經做到這一點,并且將新代碼推送到Azure DevOps,那么它將自動啟動構建并驗證您的代碼,并且您可以繼續持續集成并快速獲得有關錯誤的反饋。

進一步擴展

自動化數據庫構建只是第一步。所有這些都將測試您的源代碼是否可部署。它不會測試您的存儲過程是否按設計運行。它不會自動更新集成數據庫,因此它始終與源控件保持同步。它不會將您的代碼部署到測試,登臺和生產服務器。

首先,最重要的是,您需要開始編寫將在每次構建時自動運行的數據庫的測試。查看tSQLt和Redgate SQL Test。

如果使用寫在PowerShell腳本步驟2.1,并且已安裝數據庫的tSQLt框架,并致力于其源代碼管理,您可以通過下取消注釋行你構建的一部分運行測試#運行測試。如果您還沒有將tSQLt框架提交給源代碼控制,那么這將失敗。您還應確保將$ testPath缺省參數設置為git repo之外的現有目錄。與包一樣,每次運行構建時都需要覆蓋$ packageVersion

如果您希望構建將更改部署到集成數據庫,請取消注釋#Sync a test database下的行并適當地設置$ targetServerInstance和$ targetDatabase 的默認值。

如果您在Azure DevOps中使用Redgate SQL Change Automation擴展,則需要:

  1. 添加SQL Change Automation:Build任務,操作設置為“使用tSQLt測試從SQL Source Control項目測試構建工件”。同樣,除非您已經在源代碼管理中使用了tSQLt框架和測試,否則這將無法工作。

  2. 添加SQL Change Automation:Build任務,操作設置為“將構建工件從SQL源代碼管理項目同步到目標數據庫”。


到此,相信大家對“數據庫與Redgate SQL Toolbelt的持續集成方法是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

济宁市| 天长市| 望谟县| 淮安市| 郯城县| 伽师县| 定远县| 治多县| 彭泽县| 紫阳县| 镇江市| 浮梁县| 当雄县| 时尚| 宁阳县| 溆浦县| 连南| 杭锦旗| 台山市| 美姑县| 左贡县| 大姚县| 中方县| 蕉岭县| 江山市| 清苑县| 同仁县| 灵川县| 佳木斯市| 河西区| 嘉义县| 宜都市| 白山市| 景宁| 崇明县| 玛纳斯县| 会理县| 司法| 海林市| 若尔盖县| 普定县|