在本教學課程中,您將瞭解如何使用 Visual Studio 和 GitHub Actions 將 ASP.NET Core 應用程式和 SQL Database 部署到 Azure Container Apps。 您也將瞭解如何在 GitHub Actions 中管理 Entity Framework 移轉和資料庫更新,不過概念也可以套用至其他 CI/CD 工具和環境。
先決條件
您需要安裝 Visual Studio 2022 並附上 ASP.NET 和 Web 開發 以及 Azure 開發 所需的工作負載。
如果您已安裝 Visual Studio:
- 在 Visual Studio 中,選取 [說明]>[檢查更新],以安裝最新的更新。
- 選取 [工具]>[取得工具與功能],確認是否已安裝 ASP.NET 和 Web 開發 以及 Azure 開發 的工作負載。
在本機設定範例應用程式
使用 TODO 範例應用程式來遵循本教學課程。 使用下列命令從 GitHub 複製應用程式:
git clone https://github.com/Azure-Samples/msdocs-app-service-sqldb-dotnetcore.git
cd msdocs-app-service-sqldb-dotnetcore
流覽至項目資料夾,並在Visual Studio中開啟 DotNetCoreSqlDb.sln
方案。
TODO 應用程式已準備就緒,但您必須建立與 Visual Studio 中可用的 localdb
SQL Server 連線。 連接到 localdb
可讓您在本地工作時執行應用程式並持續保存 todos。
- 以滑鼠右鍵按一下 Visual Studio [方案總管] 中的 [連線服務] 節點,然後選取 [新增 > SQL Server Database]。
- 在 [連線至相依性] 對話框中,選取 [SQL Server Express LocalDB ],然後選取 [下一步] 。
- 在 [連接到 SQL Server Express LocalDB(Local)] 對話框中,設定下列值:
- 連接字串名稱: 保留預設值。
- 連接字串值: 保留預設值。
- 在以下位置儲存連接字串的值: 選取 None。
- 選取 [下一步]
- 在 [變更摘要] 畫面上,將設定保留為預設值,然後選取 [完成] 以完成工作流程。
Visual Studio 會顯示服務相依性的摘要,包括與 LocalDB
的連線。
接下來,您將需要建立初始遷移,並使用它來更新本機資料庫,以符合 TODO 應用程式的正確架構。
- 選取
LocalDB
連線旁邊的服務相依性清單右邊的 ... 圖示,然後選擇 [[新增移轉]。 - 在 [Entity Framework 移轉] 對話框中,等候 Visual Studio 找出專案中包含的
DbContext
類別。 載入值之後,請選擇 完成。 - Visual Studio 會在專案中產生
Migrations
資料夾,並建立初始移轉類別。 這個類別可用來使用正確的架構來更新資料庫。 - 再次選取
LocalDB
服務旁的 ... 圖示,然後選取 [更新資料庫]。 - 在 [Entity Framework 移轉] 對話框中,等候 Visual Studio 再次找到
DbContext
類別,然後選擇 [完成]。 Visual Studio 會執行移轉,並在LocalDB
伺服器中建立資料庫的架構。
選取 Visual Studio 頂端的 [DotNetCoreSqlDb 執行] 按鈕,以啟動專案。
當應用程式載入時,輸入新的 TODO 來確認資料庫是否正常運作。 TODO 會出現在應用程式首頁的主要清單檢視上。
探索應用程式啟動設定
範例應用程式會在 Program.cs
檔案中包含下列程式代碼:
if(builder.Environment.IsDevelopment())
{
builder.Services.AddDbContext<MyDatabaseContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("Default")));
}
else
{
builder.Services.AddDbContext<MyDatabaseContext>(options =>
options.UseSqlServer(Environment.GetEnvironmentVariable("AZURE_SQL_CONNECTIONSTRING")));
}
此程式代碼會套用下列組態:
- 當應用程式在本機執行時,會從
appsettings.json
檔案提取localdb
連接字串,並提供給 Entity Framework。 此設定可使localdb
連接字串檢入版本控制系統,以便其他開發人員在開發期間輕鬆連接到本機資料庫。 它也允許在本機執行 Entity Framework 移轉。 根據預設,Entity Framework 不會在執行移轉時探索儲存在環境變數中的連接字串。 - 當應用程式在 GitHub Actions 工作流程或生產環境中執行時,連接字串會從環境變數提取。 環境變數可以防止生產環境的安全連接字串被簽入原始碼控制系統或包含在組態文件中。
建立 Azure 服務
應用程式需要建立下列 Azure 服務,才能成功部署:
- 容器應用: 必須用來裝載和執行部署後應用的工具。
- Container Registry: 儲存容器化應用程式的建置映像工件。
- SQL Database: Azure SQL 資料庫來儲存應用程式的數據。
Visual Studio 的發佈功能可以為您處理建立這些資源。
建立 Azure Container App 和 Azure Container Registry
在 Visual Studio [方案總管] 中,以滑鼠右鍵點擊最上層項目節點,然後選取 [發佈]。
在發佈對話框中,選取 [Azure] 作為部署目標,然後選取 [下一步]。
針對特定目標,選取 Azure Container Apps(Linux),然後選取 [下一步]。
建立要部署的新容器應用程式。 選取 [+ 建立新的] 按鈕以開啟新的對話框,然後輸入下列值:
- 容器應用程式名稱: 保留預設值或輸入名稱。
- 訂用帳戶名稱: 選取要部署的訂用帳戶。
- 資源群組: 選取 [新增],並建立名為 msdocs-app-db-ef的新資源群組。
-
容器應用程式環境: 選取 [[新增] 以開啟容器應用程式環境對話框,然後輸入下列值:
- 環境名稱: 保留預設值。
- 位置: 選取您附近的位置。
-
Azure Log Analytics 工作區: 選取 新增 以開啟 Log Analytics 工作區對話方塊。
- 名稱: 保留預設值。
- 位置: 選取您附近的位置,然後選取 [確定] 關閉對話框。
- 選取 確定 以關閉容器應用程式環境的對話框。
- 選取 [建立] 以關閉原始容器應用程式對話框。 Visual Studio 會在 Azure 中建立容器應用程式資源。
建立資源之後,確保已在容器應用程式清單中選取它,接著選取 下一步。
您必須建立 Azure 容器登錄,以儲存應用程式的已發佈映像成品。 選取 Container Registry 畫面上的綠色 + 圖示。
保留預設值,然後選擇 建立。
建立容器登錄之後,請確定已選取它,然後選取 [下一步]。
在 [部署類型] 畫面上,選取 [使用 GitHub Actions 工作流程的 CI/CD],然後選擇 [完成]。 如果 Visual Studio 提示您讓系統管理員使用者存取已發佈的 Docker 容器,請選擇 [[是]。
Visual Studio 會建立並呈現發佈設定檔。 大部分的發佈步驟和詳細數據都會在 GitHub Actions .yml
檔案中描述,您可以按兩下發佈設定檔摘要檢視上的 [編輯工作流程] 按鈕來檢視。 本文稍後會更深入地討論此檔案。
建立 Azure SQL Database
- 在 [方案總管] 中,以滑鼠右鍵單擊 [連線服務] 節點,然後選取 [新增 > SQL Server Database]。
- 在 [連線至相依性] 對話框中,選取 [Azure SQL Database],然後選擇 [下一步]。
- 選擇 + 建立新的 來新增資料庫。
- 在 [Azure SQL Database] 對話框中,輸入下列值:
- 資料庫名稱: 保留預設值。
- 訂用帳戶名稱: 選取與先前相同的訂用帳戶。
-
資源群組: 選取先前建立的相同
msdocs-app-db-ef
群組。 -
資料庫伺服器: 選取 [新增...],然後在新的 POP-up 中輸入下列值:
- 資料庫伺服器名稱: 輸入唯一的伺服器名稱,或將隨機數附加至自動產生名稱的結尾。
- 位置: 選取靠近您的位置。
- 系統管理員用戶名稱: 輸入您選擇的值。
- 系統管理員密碼: 輸入您選擇的值。
- 系統管理員密碼(確認): 輸入相同的密碼進行確認。 選取 [確定] 以關閉 [SQL Server] 對話框
- 選取 [建立],以建立 SQL Server 和資料庫。
- 作業完成時,請從清單中選取伺服器,然後選擇 [下一步]
- 在 [連接到 Azure SQL Database] 對話框中,保留預設值,但請確定在 [儲存連接字符串值在] 選項中已選擇 [無]。
- 選取 [完成,Visual Studio 將會建立 SQL 資源。
將容器應用程式連線至 Azure SQL
在您所建立的容器應用程式總覽頁面中,選擇左側的導覽列中的 Service Connector(預覽版)。
選取 [+ 建立 以建立新的連線。
在 建立連線 展開面板中,輸入下列數值:
選取 [下一步:驗證,然後輸入下列值:
- 針對驗證類型選取 [連接字串]。
- 使用者名稱: 輸入您在建立資料庫伺服器時所使用的用戶名稱。
- 密碼: 輸入您在建立資料庫伺服器時所使用的密碼。
將其餘設定保留為預設值,然後選取 [下一步:網路] 。
保留選取的預設值,然後選擇 [下一步:檢視 + 建立]。
在 Azure 驗證設定後,選取 [[建立]。
一會兒之後,應該會出現與 SQL 資料庫的連線。 選取箭號展開連線,並查看 AZURE_SQL_CONNECTIONSTRING 值。 此連接名稱會比對範例應用程式中定義的環境變數連接字串名稱。
設定 GitHub Actions 工作流程
Visual Studio 產生的 GitHub Actions 工作流程檔案可供 GitHub 在推送變更時用來建置和部署應用程式至 Azure。 此流程目前可運作,但已部署的應用程式會引發例外。 雖然已建立 Azure SQL 資料庫,但必須將步驟新增至 GitHub Actions 工作流程,以產生架構。 Azure SQL 資料庫的連線字串可以安全地儲存為 GitHub 中的機密資訊,並在工作流程執行時擷取。
擷取連接字串,並將其新增至 GitHub 秘密
在 Azure 入口網站中,搜尋您在主要搜尋列中建立的資料庫,並從結果中選取它。
在資料庫概觀頁面上,從左側導覽中選取 [連接字串]。
在 [ADO.NET] 索引標籤上,將連接字串從表單域複製出來。
瀏覽至應用程式的分支 GitHub 存放庫。
在 [設定] 索引標籤底下,從左側導覽中選取 [秘密 > 動作],然後選擇 [新增存放庫密碼] 。
在 [新秘密] 頁面上,輸入下列值:
連接字串現在安全地儲存在 GitHub 存放庫秘密中,而且可以使用 GitHub 工作流程來擷取。
修改 GitHub Actions 工作流程以啟用移轉
選取 [發佈摘要] 頁面上 的 [編輯工作流程] 按鈕,以開啟 Visual Studio 所產生的 GitHub Actions 工作流程
.yml
檔案。將下列 yaml 附加至工作流程檔案的結尾:
- name: Run EF run: | dotnet tool install --global dotnet-ef dotnet tool restore dotnet ef database update -p DotNetCoreSqlDb --connection '${{ secrets.DBConnection }}'
此程式代碼會安裝 entity Framework 命令行工具,並執行應用程式移轉。 當工作流程執行時,程式代碼也會使用
database update
命令的connection
參數,以將新增至 GitHub 秘密的值覆寫儲存在appsettings.json
檔案中的localdb
連接字串。
執行 GitHub Actions 工作流程並測試部署
使用下列命令認可對應用程式的變更,並推送至分支存放庫:
git add --all git commit -m "Added GitHub Actions workflow" git push
流覽至 GitHub 存放庫,然後選取 [動作] 索引卷標。如果推送成功,工作流程執行應該會自動觸發。
選擇目前運行的工作流程,以在每個步驟完成時查看其日誌詳細資訊。 移轉會在最後執行,以更新 Azure 中的資料庫。
工作流程完成之後,應用程式會部署至 Azure Container Apps,並使用更新的架構連線至資料庫。
您可以流覽至容器應用程式的首頁並建立 TODO 來測試部署,就像您在本機所做的一樣。 您一律可以在 Azure 入口網站中應用程式的概觀頁面上找到容器應用程式的 URL。