溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

數(shù)據(jù)庫(kù)與Redgate SQL Toolbelt的持續(xù)集成方法是什么

發(fā)布時(shí)間:2021-12-23 09:28:45 來(lái)源:億速云 閱讀:139 作者:iii 欄目:數(shù)據(jù)庫(kù)

本篇內(nèi)容主要講解“數(shù)據(jù)庫(kù)與Redgate SQL Toolbelt的持續(xù)集成方法是什么”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“數(shù)據(jù)庫(kù)與Redgate SQL Toolbelt的持續(xù)集成方法是什么”吧!

理論與實(shí)踐中的數(shù)據(jù)庫(kù)CI

CI背后的理論是,如果我們每天多次將代碼集成到共享存儲(chǔ)庫(kù)中,然后通過運(yùn)行自動(dòng)構(gòu)建和后續(xù)測(cè)試來(lái)驗(yàn)證每個(gè)提交,那么我們會(huì)及早發(fā)現(xiàn)并根除問題,并提高軟件的質(zhì)量。

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

因此,本文將使用:

  • Git - 作為源控制系統(tǒng)。

  • Azure DevOps - 托管遠(yuǎn)程Git倉(cāng)庫(kù)并自動(dòng)化數(shù)據(jù)庫(kù)構(gòu)建

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

  • PowerShell - 將提交推送到Azure DevOps上托管的遠(yuǎn)程存儲(chǔ)庫(kù)

  • Redgate SQL Change Automation(SCA) - 使用PowerShell cmdlet自動(dòng)執(zhí)行本地?cái)?shù)據(jù)庫(kù)構(gòu)建(可選步驟)

  • Azure DevOps的SCA插件 - 自動(dòng)化數(shù)據(jù)庫(kù)構(gòu)建和部署過程

當(dāng)然,僅僅因?yàn)槟悻F(xiàn)在擁有一些CI工具就說你是CI實(shí)踐者,就像你購(gòu)買第一架望遠(yuǎn)鏡時(shí)聲稱自己是天文學(xué)家一樣。這些工具只是必要的第一步。團(tuán)隊(duì)仍然需要采用良好的CI實(shí)踐。開發(fā)人員需要編寫單元測(cè)試,證明每個(gè)小的更改都有效。他們必須盡可能多地每天多次提交對(duì)共享源代碼控制存儲(chǔ)庫(kù)的更改。每次提交都應(yīng)觸發(fā)自動(dòng)數(shù)據(jù)庫(kù)構(gòu)建,以確保團(tuán)隊(duì)始終具有可用的數(shù)據(jù)庫(kù)構(gòu)建過程。每天晚上,團(tuán)隊(duì)?wèi)?yīng)該運(yùn)行集成測(cè)試(本文未涉及),以證明所有單獨(dú)的單元一起工作以實(shí)現(xiàn)所需的過程。這些CI實(shí)踐自然會(huì)導(dǎo)致自動(dòng)部署,

當(dāng)然,你可以在沒有這些工具的情況下練習(xí)CI,但是工具越好,你就能找到更容易和更有價(jià)值的CI,就像望遠(yuǎn)鏡和天文學(xué)一樣。

你需要什么來(lái)開始

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

  • 具有管理員訪問權(quán)限的Windows Server 2016 VM。您還應(yīng)該能夠在Windows 10上使用所有類似的結(jié)果。

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

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

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

  • Azure DevOps帳戶,您可以在這里免費(fèi)創(chuàng)建一個(gè)帳戶。

您可以使用該軟件的較舊版本或較新版本,但由于Azure DevOps是托管服務(wù),而且時(shí)間是一個(gè)復(fù)雜的問題,我不會(huì)對(duì)兼容性做出任何承諾。同樣,如果您將來(lái)幾個(gè)月或幾年閱讀此帖子,您可能會(huì)發(fā)現(xiàn)Azure DevOps UI已更改:

您還需要一個(gè)數(shù)據(jù)庫(kù)來(lái)玩。我將使用StackOverflow數(shù)據(jù)庫(kù),因?yàn)樗幸粋€(gè)簡(jiǎn)單的架構(gòu),我知道它的工作原理。對(duì)于您的第一次構(gòu)建,嘗試使用可以單獨(dú)構(gòu)建的簡(jiǎn)單內(nèi)容localDB。這不包括AdventureWorks,因?yàn)?code>localDB不支持全文搜索。此外,現(xiàn)在嘗試避免依賴于其他數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)。

步驟1:創(chuàng)建新的Azure DevOps項(xiàng)目并克隆存儲(chǔ)庫(kù)

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

數(shù)據(jù)庫(kù)與Redgate SQL Toolbelt的持續(xù)集成方法是什么

為項(xiàng)目指定名稱,例如數(shù)據(jù)庫(kù)的名稱。在版本控制下,選擇Git,然后選擇您的首選工作項(xiàng)流程。如果有疑問,默認(rèn)的工作項(xiàng)流程(敏捷)很好,因?yàn)樗鼘?duì)本教程沒有任何影響。

數(shù)據(jù)庫(kù)與Redgate SQL Toolbelt的持續(xù)集成方法是什么

將repo克隆到本地工作站。要執(zhí)行此操作,請(qǐng)復(fù)制Azure DevOps中的HTTPS鏈接:

數(shù)據(jù)庫(kù)與Redgate SQL Toolbelt的持續(xù)集成方法是什么

現(xiàn)在,打開PowerShell窗口,導(dǎo)航到您要存儲(chǔ)源代碼的目錄并克隆repo?;久钊缦滤荆?/p>

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

這是我的完整命令窗口:
數(shù)據(jù)庫(kù)與Redgate SQL Toolbelt的持續(xù)集成方法是什么

您現(xiàn)在應(yīng)該在計(jì)算機(jī)上有一個(gè)本地存儲(chǔ)庫(kù),其中包含一個(gè)隱藏的.git目錄,您可以在其中添加數(shù)據(jù)庫(kù)源代碼。

數(shù)據(jù)庫(kù)與Redgate SQL Toolbelt的持續(xù)集成方法是什么

第2步:將數(shù)據(jù)庫(kù)鏈接到源

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

數(shù)據(jù)庫(kù)與Redgate SQL Toolbelt的持續(xù)集成方法是什么

Redgate SQL Source Control將在查詢窗口中打開。選擇“ 鏈接到我的源代碼管理系統(tǒng) ”,從支持的源代碼管理系統(tǒng)中選擇“ Git ”,然后粘貼到本地源代碼控制存儲(chǔ)庫(kù)的路徑中。然后單擊“ 瀏覽 ”和“創(chuàng)建新文件夾 ”并將“ 狀態(tài) ”目錄添加到源控件存儲(chǔ)庫(kù)的根目錄,并將數(shù)據(jù)庫(kù)鏈接到狀態(tài)目錄。其原因?qū)⒃诓襟E2.1中變得清晰。

數(shù)據(jù)庫(kù)與Redgate SQL Toolbelt的持續(xù)集成方法是什么

成功鏈接后,請(qǐng)注意RedGate.ssc文件已添加到Git 倉(cāng)庫(kù)中的“ state ”目錄中。然后轉(zhuǎn)到Redgate SQL Source Control中的“ Commit ”選項(xiàng)卡,您將看到所有數(shù)據(jù)庫(kù)對(duì)象的列表,準(zhǔn)備提交給源代碼管理。確保選中所有對(duì)象,鍵入提交消息并單擊commit

數(shù)據(jù)庫(kù)與Redgate SQL Toolbelt的持續(xù)集成方法是什么

當(dāng)SQL Source Control表示所有更改都已提交時(shí),請(qǐng)?jiān)俅尾榭茨膅it倉(cāng)庫(kù)。您應(yīng)該看到所有數(shù)據(jù)庫(kù)對(duì)象都編寫到各種目錄中。

數(shù)據(jù)庫(kù)與Redgate SQL Toolbelt的持續(xù)集成方法是什么

由于Git是一個(gè)分布式源代碼控制系統(tǒng),因此您只需將這些更改提交到本地倉(cāng)庫(kù)。您尚未將這些文件推送到Azure DevOps中托管的遠(yuǎn)程倉(cāng)庫(kù)。為此,請(qǐng)?jiān)俅未蜷_PowerShell終端,導(dǎo)航到git repo的根目錄并運(yùn)行命令:git push。

數(shù)據(jù)庫(kù)與Redgate SQL Toolbelt的持續(xù)集成方法是什么

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

將源代碼推送到Azure DevOps之后,您應(yīng)該能夠在Azure DevOps網(wǎng)站的“ 代碼 ”選項(xiàng)卡下看到它:

數(shù)據(jù)庫(kù)與Redgate SQL Toolbelt的持續(xù)集成方法是什么

步驟2.1:使用SCA和PowerShell編寫數(shù)據(jù)庫(kù)構(gòu)建腳本(可選步驟)

我們現(xiàn)在在源代碼控制中有我們的數(shù)據(jù)庫(kù),所以下一步是設(shè)置一個(gè)構(gòu)建過程來(lái)檢查我們的源代碼是否“編譯”。通過這個(gè),我的意思是它是可部署的。例如,如果源文件中存在一些非法的T-SQL語(yǔ)法,'或者如果某些視圖缺少依賴項(xiàng),可能是因?yàn)槲抑貥?gòu)了一些表,但忘記更新我的視圖,那么SQL Server將無(wú)法執(zhí)行我的源代碼,我的數(shù)據(jù)庫(kù)構(gòu)建將失敗。

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

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

數(shù)據(jù)庫(kù)與Redgate SQL Toolbelt的持續(xù)集成方法是什么

使用localdb驗(yàn)證構(gòu)建

在構(gòu)建目錄中創(chuàng)建一個(gè)名為“ build.ps1 ” 的新文件,并將以下PowerShell代碼復(fù)制到其中。您可能希望更改參數(shù)的默認(rèn)值$packageID以反映數(shù)據(jù)庫(kù)的名稱?,F(xiàn)在,您應(yīng)該保留其他參數(shù)。我將很快解釋$packageVersion,$packagePath$testPath參數(shù),我將在進(jìn)一步擴(kuò)展下解釋其他。

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

此PowerShell代碼使用SQL Change Automation在其中創(chuàng)建新數(shù)據(jù)庫(kù)localDB并將所有源代碼部署到該數(shù)據(jù)庫(kù)。一旦部署了數(shù)據(jù)庫(kù),SQL Change Automation就會(huì)立即將其刪除,因?yàn)樗呀?jīng)達(dá)到了目的。如果您每周運(yùn)行10次構(gòu)建一周,則不希望有50個(gè)測(cè)試數(shù)據(jù)庫(kù)。

您應(yīng)該能夠從PowerShell運(yùn)行腳本,如果您愿意,可以覆蓋默認(rèn)參數(shù)。

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

這是完整的命令窗口,來(lái)自我的例子:

數(shù)據(jù)庫(kù)與Redgate SQL Toolbelt的持續(xù)集成方法是什么

如果您的構(gòu)建腳本有效,那太好了!如果沒有,你可能會(huì)發(fā)現(xiàn)一些破碎的代碼,也很棒!通常,這些是代碼損壞,缺少依賴性,localDB未安裝或SQL Server憑據(jù)不正確的結(jié)果。PowerShell輸出是你的朋友。

使用臨時(shí)數(shù)據(jù)庫(kù)驗(yàn)證構(gòu)建

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

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

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

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

創(chuàng)建NuGet包

在這個(gè)階段,我們所做的就是驗(yàn)證構(gòu)建; 換句話說,證明了數(shù)據(jù)庫(kù)將成功構(gòu)建。完成后,我們可以開始探索其他SCA cmdlet,它們將從經(jīng)過驗(yàn)證的構(gòu)建生成并導(dǎo)出數(shù)據(jù)庫(kù)構(gòu)建工件,在其上運(yùn)行我們的測(cè)試套件,然后部署測(cè)試的更改,以使目標(biāo)數(shù)據(jù)庫(kù)與經(jīng)過驗(yàn)證和測(cè)試的同步資源。

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

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

現(xiàn)在,當(dāng)您運(yùn)行成功的構(gòu)建時(shí),將創(chuàng)建包含源代碼的NuGet包。請(qǐng)注意,如果您嘗試創(chuàng)建兩個(gè)具有相同$packageID$packageVersion相同$packagePath的包,則構(gòu)建將失敗,因此您需要覆蓋構(gòu)建號(hào)或每次重新運(yùn)行構(gòu)建時(shí)刪除舊包。

提交對(duì)源代碼管理的更改并將其推送到服務(wù)器。

> git  add  build。PS1
> git  commit  - m  “添加構(gòu)建腳本”
> git  推

數(shù)據(jù)庫(kù)與Redgate SQL Toolbelt的持續(xù)集成方法是什么

第3步:使用Azure DevOps自動(dòng)構(gòu)建

您現(xiàn)在擁有源代碼管理中的數(shù)據(jù)庫(kù)代碼,并將其推送到Azure DevOps。如果您按照步驟2.1中的說明進(jìn)行操作,那么您還可以在源代碼管理中使用PowerShell腳本來(lái)構(gòu)建數(shù)據(jù)庫(kù),并且您知道源代碼是“編譯”的?,F(xiàn)在,我們希望每次將新更改推送到源代碼控制時(shí),Azure DevOps都會(huì)構(gòu)建數(shù)據(jù)庫(kù),以驗(yàn)證是否可以部署更改并捕獲任何錯(cuò)誤。

我們將使用Redgate Azure DevOps擴(kuò)展來(lái)自動(dòng)化數(shù)據(jù)庫(kù)構(gòu)建,因?yàn)檫@不需要您遵循步驟2.1。如果您確實(shí)按照步驟2.1而不是使用Redgate插件,則可能更喜歡使用執(zhí)行build.ps1文件的原始PowerShell任務(wù)來(lái)運(yùn)行構(gòu)建腳本,并根據(jù)需要覆蓋默認(rèn)參數(shù)。如果采用該方法,您可能會(huì)發(fā)現(xiàn)Azure DevOps預(yù)定義變量的索引很有用,您可能希望使用$(Build.BuildNumber)或$(Build.BuildID)來(lái)創(chuàng)建具有順序版本號(hào)的包。

您的自動(dòng)構(gòu)建將由“構(gòu)建代理”執(zhí)行。如果您已經(jīng)localDB可以單獨(dú)構(gòu)建數(shù)據(jù)庫(kù),則應(yīng)該能夠立即使用托管構(gòu)建代理。否則,您需要在托管的服務(wù)器上配置本地代理,該服務(wù)器可以訪問合適的目標(biāo)SQL Server實(shí)例以運(yùn)行構(gòu)建。

在Azure DevOps中,將鼠標(biāo)懸停在“ 管道”選項(xiàng)卡上,然后從下拉列表中選擇“ 構(gòu)建 ”。

數(shù)據(jù)庫(kù)與Redgate SQL Toolbelt的持續(xù)集成方法是什么

點(diǎn)擊New Pipeline按鈕,確保選擇了正確的源控制存儲(chǔ)庫(kù)和主分支。然后為模板選擇“ 空作業(yè) ”。

數(shù)據(jù)庫(kù)與Redgate SQL Toolbelt的持續(xù)集成方法是什么

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

數(shù)據(jù)庫(kù)與Redgate SQL Toolbelt的持續(xù)集成方法是什么

我們可以將任務(wù)添加到將運(yùn)行MSBuild或執(zhí)行PowerShell腳本等的代理作業(yè),以編譯和測(cè)試我們的代碼。為此,請(qǐng)單擊代理作業(yè)旁邊的+按鈕。

數(shù)據(jù)庫(kù)與Redgate SQL Toolbelt的持續(xù)集成方法是什么

Redgate SQL Change Automation Azure DevOps擴(kuò)展默認(rèn)不可用,但如果您在添加任務(wù)下的Marketplace選項(xiàng)卡中搜索“Redgate”,您將找到它。按照說明添加SQL Change Automation:Build擴(kuò)展。

安裝完成后,找到返回構(gòu)建過程的方法。您可能需要再次點(diǎn)擊上面的第2-5點(diǎn),因?yàn)槟男露x可能尚未保存。這一次,如果您搜索“Redgate”,您會(huì)發(fā)現(xiàn)該擴(kuò)展程序無(wú)需再次通過Marketplace即可使用,您只需單擊“ 添加”即可。

數(shù)據(jù)庫(kù)與Redgate SQL Toolbelt的持續(xù)集成方法是什么

將在Build StackOverflow數(shù)據(jù)庫(kù)創(chuàng)建構(gòu)建任務(wù),并警告某些設(shè)置需要注意。單擊此構(gòu)建任務(wù),然后在“ 操作”下,選擇“ 構(gòu)建SQL源代碼管理”項(xiàng)目。然后,在Database文件夾下選擇“ Database scripts文件夾是VCS根目錄的子文件夾 ”,在Subfolder Path下使用向?qū)нx擇由SQL Source Control維護(hù)的狀態(tài)目錄(不要選擇Git repo的根目錄) ,如果您按照步驟2.1,還將包含您的構(gòu)建腳本?。?。

Output NuGet Package ID下,為您的構(gòu)建工件寫一個(gè)名稱。通常,這將是您的數(shù)據(jù)庫(kù)的名稱。

數(shù)據(jù)庫(kù)與Redgate SQL Toolbelt的持續(xù)集成方法是什么

單擊“ 保存并排隊(duì)”以手動(dòng)觸發(fā)構(gòu)建。默認(rèn)設(shè)置應(yīng)該沒問題。您應(yīng)該看到一個(gè)黃色通知,表明構(gòu)建已排隊(duì)。如果單擊該號(hào)碼,則會(huì)轉(zhuǎn)到實(shí)時(shí)構(gòu)建日志。

數(shù)據(jù)庫(kù)與Redgate SQL Toolbelt的持續(xù)集成方法是什么

將為您分配托管代理。然后,它將下載SQL Change Automation并localDB在云中自行構(gòu)建源代碼并報(bào)告結(jié)果。

請(qǐng)注意,如果您的數(shù)據(jù)庫(kù)不構(gòu)建在Azure中托管構(gòu)建代理上的本地?cái)?shù)據(jù)庫(kù)的默認(rèn)安裝上,則構(gòu)建將失敗。如果您的數(shù)據(jù)庫(kù)不能構(gòu)建localDB,則需要提供一個(gè)單獨(dú)的SQL Server實(shí)例來(lái)運(yùn)行構(gòu)建。然后,在Build StackOverflow Database構(gòu)建任務(wù)中,將Temporary服務(wù)器類型SQL LocalDB(推薦)更改為SQL Server,并向服務(wù)器實(shí)例提供連接詳細(xì)信息。如果要在本地托管此服務(wù)器實(shí)例,則可能需要安裝可以訪問本地服務(wù)器的本地構(gòu)建代理來(lái)運(yùn)行構(gòu)建。

構(gòu)建可能需要幾分鐘。就我而言,使用Stack Overflow和托管構(gòu)建代理程序,花了大約兩分半鐘。使用更大,更復(fù)雜的模式,您可能需要更長(zhǎng)時(shí)間。

數(shù)據(jù)庫(kù)與Redgate SQL Toolbelt的持續(xù)集成方法是什么

如果構(gòu)建失敗,請(qǐng)查找日志中的錯(cuò)誤并進(jìn)行故障排除。常見問題包括缺少依賴項(xiàng),不正確的憑據(jù),對(duì)數(shù)據(jù)庫(kù)的權(quán)限不足,使用不受支持的功能localDB以及損壞的T-SQL代碼。保持堵塞,直到你的構(gòu)建變綠。如果您跳過步驟2.1并且在構(gòu)建時(shí)遇到問題,請(qǐng)考慮返回并嘗試步驟2.1,因?yàn)檫@是解決源代碼問題的一種更簡(jiǎn)單的方法,可以幫助您確定問題是否與源代碼或Azure DevOps配置。

一旦構(gòu)建為綠色,您需要設(shè)置構(gòu)建觸發(fā)器以確保每次將新代碼推送到Azure DevOps服務(wù)器時(shí)構(gòu)建都會(huì)運(yùn)行。從Azure DevOps中的任何頁(yè)面,將鼠標(biāo)懸停在頂部的“ 管道”選項(xiàng)卡上,然后選擇“ 生成”以導(dǎo)航回您的構(gòu)建定義。選擇Build Definition,然后選擇Edit按鈕。

數(shù)據(jù)庫(kù)與Redgate SQL Toolbelt的持續(xù)集成方法是什么

選擇觸發(fā)器并確保選中啟用持續(xù)集成,您就完成了。

數(shù)據(jù)庫(kù)與Redgate SQL Toolbelt的持續(xù)集成方法是什么

如果您已經(jīng)做到這一點(diǎn),并且將新代碼推送到Azure DevOps,那么它將自動(dòng)啟動(dòng)構(gòu)建并驗(yàn)證您的代碼,并且您可以繼續(xù)持續(xù)集成并快速獲得有關(guān)錯(cuò)誤的反饋。

進(jìn)一步擴(kuò)展

自動(dòng)化數(shù)據(jù)庫(kù)構(gòu)建只是第一步。所有這些都將測(cè)試您的源代碼是否可部署。它不會(huì)測(cè)試您的存儲(chǔ)過程是否按設(shè)計(jì)運(yùn)行。它不會(huì)自動(dòng)更新集成數(shù)據(jù)庫(kù),因此它始終與源控件保持同步。它不會(huì)將您的代碼部署到測(cè)試,登臺(tái)和生產(chǎn)服務(wù)器。

首先,最重要的是,您需要開始編寫將在每次構(gòu)建時(shí)自動(dòng)運(yùn)行的數(shù)據(jù)庫(kù)的測(cè)試。查看tSQLt和Redgate SQL Test。

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

如果您希望構(gòu)建將更改部署到集成數(shù)據(jù)庫(kù),請(qǐng)取消注釋#Sync a test database下的行并適當(dāng)?shù)卦O(shè)置$ targetServerInstance和$ targetDatabase 的默認(rèn)值。

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

  1. 添加SQL Change Automation:Build任務(wù),操作設(shè)置為“使用tSQLt測(cè)試從SQL Source Control項(xiàng)目測(cè)試構(gòu)建工件”。同樣,除非您已經(jīng)在源代碼管理中使用了tSQLt框架和測(cè)試,否則這將無(wú)法工作。

  2. 添加SQL Change Automation:Build任務(wù),操作設(shè)置為“將構(gòu)建工件從SQL源代碼管理項(xiàng)目同步到目標(biāo)數(shù)據(jù)庫(kù)”。


到此,相信大家對(duì)“數(shù)據(jù)庫(kù)與Redgate SQL Toolbelt的持續(xù)集成方法是什么”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI