使用 GitHub Actions 連線到 Azure SQL 資料庫
適用於:Azure SQL 資料庫
藉由使用工作流程將資料庫更新部署至 Azure SQL 資料庫,來開始使用 GitHub Actions。
必要條件
您需要:
- 具有有效訂用帳戶的 Azure 帳戶。 免費建立帳戶。
- 具有 dacpac 套件的 GitHub 存放庫 (
Database.dacpac
)。 如果您沒有 GitHub 帳戶,請免費註冊。 - Azure SQL 資料庫。 快速入門:建立 Azure SQL 資料庫單一資料庫。
- 要匯入至資料庫的 .dacpac 檔案。
工作流程檔案概觀
GitHub Actions 工作流程是由您存放庫內 /.github/workflows/
路徑中的 YAML (.yml) 檔案所定義的。 此定義包含組成工作流程的各種步驟與參數。
檔案內有兩個區段:
區段 | 工作 |
---|---|
驗證 | 1.1. 產生部署認證。 |
部署 | 1.部署資料庫。 |
產生部署認證
若要搭配 OIDC 使用 Azure 登入動作,您必須在 Microsoft Entra 應用程式或使用者指派的受控識別上設定聯盟身分識別憑證。
選項 1:Microsoft Entra 應用程式
- 使用 Azure 入口網站、Azure CLI或 Azure PowerShell,建立具有服務主體的 Microsoft Entra 應用程式。
- 複製 用戶端標識碼、訂用帳戶標識碼和 Directory (tenant) 標識碼 的值,以便稍後在 GitHub Actions 工作流程中使用。
- Azure 入口網站、Azure CLI或 Azure PowerShell,將適當的角色指派給服務主體。
- 在 Microsoft Entra 應用程式上設定同盟身分識別認證, 以信任 GitHub Actions 發行給 GitHub 存放庫的令牌。
選項 2:使用者指派的受控識別
- 建立使用者指派的受控識別。
- 複製 用戶端標識碼、訂用帳戶標識碼和 Directory (tenant) 標識碼 的值,以便稍後在 GitHub Actions 工作流程中使用。
- 將適當的角色指派給您分配的使用者受控身份。
- 在使用者指派的受控識別上設定聯邦身分識別憑證, 以使 GitHub Actions 簽發的令牌被信任到 GitHub 存放庫。
複製 SQL 連接字串
在 Azure 入口網站中,移至 Azure SQL 資料庫,然後開啟 [設定][連接字串]>。 複製 ADO.NET 連接字串。 取代 your_database
和 your_password
的預留位置值。
請使用連接字串 AZURE_SQL_CONNECTION_STRING
作為 GitHub 祕密。
設定 GitHub 祕密
您需要提供應用程式的 客戶端 ID、目錄 (租戶) ID,以及 訂閱 ID 以用於登入動作。 這些值可以直接在工作流程中提供,也可以儲存在 GitHub 的秘密中,並在您的工作流程中參考。 將值儲存為 GitHub 秘密是較安全的選擇。
在 GitHub (英文) 中,前往您的存放庫。
選取 [安全性] > [祕密和變數] > [動作]。
選取 [新增存放庫祕密]。
注意
若要增強公用存放庫中的工作流程安全性,請使用 環境秘密 而非存放庫秘密。 如果環境需要核准,作業必須等待直到其中一位必要的檢閱者核准後才能存取環境秘密。
建立
AZURE_CLIENT_ID
、AZURE_TENANT_ID
和AZURE_SUBSCRIPTION_ID
的秘密。 從您的 Microsoft Entra 應用程式或使用者指派的受控身分識別中複製這些值,然後用於您的 GitHub secrets。GitHub 祕密 Microsoft Entra 應用程式或使用者指派的受控識別 AZURE_CLIENT_ID 用戶端識別碼 AZURE_SUBSCRIPTION_ID 訂用帳戶識別碼 AZURE_TENANT_ID 目錄 (租用戶) 識別碼 注意
基於安全性考慮,我們建議使用 GitHub 秘密,而不是將值直接傳遞至工作流程。
新增 SQL 連接字串祕密
在 GitHub (英文) 中,前往您的存放庫。
移至導覽功能表中的 [設定]。
選取 [安全性] > [祕密和變數] > [動作]。
選取 [新增存放庫祕密]。
貼上您的 SQL 連接字串。 將祕密命名為
AZURE_SQL_CONNECTION_STRING
。選取 [新增祕密]。
新增您的工作流程
移至 GitHub 存放庫的 [動作]。
選取 [自行設定工作流程]。
刪除工作流程檔案
on:
區段之後的所有內容。 例如,剩餘的工作流程看起來可能像這樣。name: SQL for GitHub Actions on: push: branches: [ main ] pull_request: branches: [ main ]
重新命名工作流程
SQL for GitHub Actions
,並新增簽出和登入動作。 這些動作會簽出您的站台碼,並使用您稍早建立的AZURE_CREDENTIALS
GitHub 祕密向 Azure 進行驗證。name: SQL for GitHub Actions on: push: branches: [ main ] pull_request: branches: [ main ] jobs: build: runs-on: windows-latest steps: - uses: actions/checkout@v1 - uses: azure/login@v2 with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
使用 Azure SQL 的「部署」動作來連線到您的 SQL 執行個體。 您在存放庫的根層級應該會有一個 dacpac 套件 (
Database.dacpac
)。 使用您稍早建立的AZURE_SQL_CONNECTION_STRING
GitHub 祕密。- uses: azure/sql-action@v2 with: connection-string: ${{ secrets.AZURE_SQL_CONNECTION_STRING }} path: './Database.dacpac' action: 'Publish'
藉由新增動作至 Azure 的登出,來完成您的工作流程。 以下為完成的工作流程。 檔案會出現在存放庫的
.github/workflows
資料夾中。name: SQL for GitHub Actions on: push: branches: [ main ] pull_request: branches: [ main ] jobs: build: runs-on: windows-latest steps: - uses: actions/checkout@v1 - uses: azure/login@v2 with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} # Azure logout - name: logout run: | az logout
檢閱您的部署
移至 GitHub 存放庫的 [動作]。
開啟第一個結果,以查看工作流程的執行詳細記錄。
清除資源
當您不再需要 Azure SQL 資料庫和存放庫時,請刪除資源群組和 GitHub 存放庫,以清理您所部署的資源。