使用工作流程將資料庫更新部署至適用於 PostgreSQL 的 Azure 資料庫,以開始使用 GitHub Actions。
先決條件
您需要:
- 具有有效訂用帳戶的 Azure 帳戶。 免費建立帳戶。
- 具有範例資料 (
data.sql) 的 GitHub 存放庫。 如果您沒有 GitHub 帳戶,請免費註冊。 - 適用於 PostgreSQL 的 Azure 資料庫彈性伺服器執行個體。
- 建立適用於 PostgreSQL 的 Azure 資料庫。
工作流程檔案概觀
GitHub Actions 工作流程是由您存放庫內 /.github/workflows/ 路徑中的 YAML (.yml) 檔案所定義的。 此定義包含組成工作流程的各種步驟與參數。
檔案內有兩個區段:
| 區段 | 工作 |
|---|---|
| 驗證 | 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 存放庫的權杖。
複製適用於 PostgreSQL 的 Azure 資料庫 連接字串
在 Azure 入口網站中,移至適用於 PostgreSQL 的 Azure 資料庫彈性伺服器執行個體,然後從資源功能表中,選取 [設定] 底下的 [連線]。 在該頁面中,使用 [資料庫名稱] 下拉式方塊來選取您要連線之資料庫的名稱。 展開 [從您的應用程式連線] 區段,然後複製 ADO.NET 連接字串,並以實際的密碼取代預留位置值 {your_password}。 連接字串看起來會像此。
Server={servername.postgres.database.azure.com};Database={your_database};Port=5432;User Id={adminusername};Password={your_password};Ssl Mode=Require;
您用此連接字串作為 GitHub 祕密。
設定 GitHub 祕密
您必須提供應用程式的 用戶端 ID、 目錄 (租用戶) ID 和 訂閱 ID 才能進行登入動作。 這些值可以直接在工作流程中提供,也可以儲存於 GitHub 祕密中,並在您的工作流程中參考。 將值儲存為 GitHub 祕密是較安全的選項。
在 GitHub (英文) 中,前往您的存放庫。
選取 [安全性] > [祕密和變數] > [動作]。
選取 [新增存放庫祕密]。
備註
若要增強公用存放庫中的工作流程安全性,請使用環境秘密 (英文),而非存放庫秘密。 如果環境需要核准,則作業在其中一位必要的檢閱者核准之前,無法存取環境秘密。
建立
AZURE_CLIENT_ID、AZURE_TENANT_ID與AZURE_SUBSCRIPTION_ID的祕密。 從 Microsoft Entra 應用程式或使用者指派的受控識別中複製這些值,以用於 GitHub 機密:GitHub 祕密 Microsoft Entra 應用程式或使用者指派的受管理識別 AZURE_CLIENT_ID 用戶端識別碼 AZURE_SUBSCRIPTION_ID 訂用帳戶識別碼 AZURE_TENANT_ID 目錄 (租用戶) 識別碼 備註
基於安全理由,建議使用 GitHub Secrets,而不是將值直接傳遞至工作流程。
新增您的工作流程
移至 GitHub 存放庫的 [動作]。
選取 [自行設定工作流程]。
刪除工作流程檔案
on:區段之後的所有內容。 例如,剩餘的工作流程看起來可能像這樣。name: CI on: push: branches: [ main ] pull_request: branches: [ main ]重新命名工作流程
PostgreSQL for GitHub Actions,並新增簽出和登入動作。 這些動作會簽出您的站台碼,並使用您稍早建立的 GitHub 祕密向 Azure 進行驗證。name: PostgreSQL for GitHub Actions on: push: branches: [ main ] pull_request: branches: [ main ] jobs: build: runs-on: ubuntu-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 PostgreSQL 部署動作來連線到適用於 PostgreSQL 的 Azure 資料庫彈性伺服器執行個體。 以伺服器的名稱取代
POSTGRESQL_SERVER_NAME。 您的存放庫根層級應有名為data.sql的 Azure Database for PostgreSQL 資料檔案。- uses: azure/postgresql@v1 with: connection-string: ${{ secrets.AZURE_POSTGRESQL_CONNECTION_STRING }} server-name: POSTGRESQL_SERVER_NAME plsql-file: './data.sql'將動作新增至 Azure 登出,完成您的工作流程。 以下為完成的工作流程。 檔案會出現在存放庫的
.github/workflows資料夾中。name: PostgreSQL for GitHub Actions on: push: branches: [ main ] pull_request: branches: [ main ] jobs: build: runs-on: ubuntu-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 }} - uses: azure/postgresql@v1 with: server-name: POSTGRESQL_SERVER_NAME connection-string: ${{ secrets.AZURE_POSTGRESQL_CONNECTION_STRING }} plsql-file: './data.sql' # Azure logout - name: logout run: | az logout
檢閱您的部署
清除資源
當不再需要適用於 PostgreSQL 的 Azure 資料庫和存放庫時,請刪除資源群組和 GitHub 存放庫,以清除您部署的資源。
相關內容
- Azure 和 GitHub 整合 (部分機器翻譯)。
- 如何連線到伺服器 (部分機器翻譯)。