快速入門:使用 GitHub Actions 連線到 適用於 PostgreSQL 的 Azure 資料庫 - 彈性伺服器
適用於:
適用於 PostgreSQL 的 Azure 資料庫 - 彈性伺服器
使用工作流程將資料庫更新部署至 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器,以開始使用 GitHub Actions。
您需要:
GitHub Actions 工作流程是由您存放庫內 /.github/workflows/
路徑中的 YAML (.yml) 檔案所定義的。 此定義包含組成工作流程的各種步驟與參數。
檔案內有兩個區段:
區段 |
工作 |
驗證 |
1.產生部署認證。 |
部署 |
1.部署資料庫。 |
使用 Azure CLI 中的 az ad sp create-for-rbac 命令來建立服務主體。 請使用 Azure 入口網站中的 Azure Cloud Shell,或選取 [試試看] 按鈕來執行此命令。
az ad sp create-for-rbac --name "myML" --role contributor \
--scopes /subscriptions/<subscription-id>/resourceGroups/<group-name> \
--json-auth
參數 --json-auth
可在 Azure CLI 版本 >= 2.51.0 中使用。 此版本之前的版本會搭配取代警告使用 --sdk-auth
。
在上述範例中,將預留位置換成為您的訂用帳戶識別碼、資源群組名稱和應用程式名稱。 輸出是一個 JSON 物件,內有角色指派認證可讓您存取 App Service 應用程式,如下所示。 複製此 JSON 物件以供後續使用。
{
"clientId": "<GUID>",
"clientSecret": "<GUID>",
"subscriptionId": "<GUID>",
"tenantId": "<GUID>",
(...)
}
OpenID Connect 是使用短期權杖的驗證方法。 使用 GitHub Actions 設定 OpenID Connect 是更複雜的程序,可提供強化的安全性。
若您沒有現有的應用程式,請註冊可存取資源的新 Microsoft Entra 應用程式與服務主體。
az ad app create --display-name myApp
此命令會使用作為您 client-id
的 appId
來輸出 JSON。 objectId
是 APPLICATION-OBJECT-ID
,而且會用來搭配圖形 API 呼叫建立同盟認證。 儲存值以稍後作為 AZURE_CLIENT_ID
GitHub 秘密。
建立服務主體。 將 $appID
取代為您 JSON 輸出中的 appId。 此命令會產生具有不同 objectId
的 JSON 輸出,並將用於下一個步驟中。 新的 objectId
是 assignee-object-id
。
此命令會產生具有不同 objectId
的 JSON 輸出,並將在下一個步驟中使用。 新的 objectId
是 assignee-object-id
。
複製 appOwnerTenantId
以供稍後作為 AZURE_TENANT_ID
的 GitHub 秘密使用。
az ad sp create --id $appId
依訂用帳戶和物件建立新的角色指派。 依預設,角色指派將會繫結至您的預設訂用帳戶。 以訂用帳戶識別碼取代 $subscriptionId
,以資源群組名稱取代 $resourceGroupName
,並以產生的 assignee-object-id
(新建立的服務主體物件識別碼) 取代 $assigneeObjectId
。
az role assignment create --role contributor --subscription $subscriptionId --assignee-object-id $assigneeObjectId --assignee-principal-type ServicePrincipal --scope /subscriptions/$subscriptionId/resourceGroups/$resourceGroupName
執行下列命令,為您的 Microsoft Entra 應用程式建立新的同盟身分識別認證。
- 針對您的 Microsoft Entra 應用程式,以 objectId (建立應用程式時產生) 取代
APPLICATION-OBJECT-ID
。
- 將
CREDENTIAL-NAME
的值設定為稍後參考。
- 設定
subject
。 依據您的工作流程,GitHub 會定義此項目的值:
- 您 GitHub Actions 環境中的工作:
repo:< Organization/Repository >:environment:< Name >
- 針對未繫結至環境的作業,請根據用來觸發工作流程的參考路徑,包含分支/標記的參考路徑:
repo:< Organization/Repository >:ref:< ref path>
。 例如,repo:n-username/ node_express:ref:refs/heads/my-branch
或 repo:n-username/ node_express:ref:refs/tags/my-tag
。
- 針對由提取要求事件所觸發的工作流程:
repo:< Organization/Repository >:pull_request
。
az ad app federated-credential create --id <APPLICATION-OBJECT-ID> --parameters credential.json
("credential.json" contains the following content)
{
"name": "<CREDENTIAL-NAME>",
"issuer": "https://token.actions.githubusercontent.com",
"subject": "repo:octo-org/octo-repo:environment:Production",
"description": "Testing",
"audiences": [
"api://AzureADTokenExchange"
]
}
複製 適用於 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 (英文) 中,前往您的存放庫。
移至導覽功能表中的 [設定]。
選取 [安全性] > [祕密和變數] > [動作]。
選取 [新增存放庫祕密]。
將得自 Azure CLI 命令的整個 JSON 輸出貼到祕密的 [值] 欄位中。 將祕密命名為 AZURE_CREDENTIALS
。
選取 [新增祕密]。
您必須將應用程式的用戶端識別碼、租用戶識別碼和訂用帳戶識別碼提供給登入動作。 這些值可以直接在工作流程中提供,也可以儲存在 GitHub 的秘密中,並在您的工作流程中參考。 將值儲存為 GitHub 秘密是較安全的選擇。
在 GitHub (英文) 中,前往您的存放庫。
選取 [安全性] > [祕密和變數] > [動作]。
選取 [新增存放庫祕密]。
建立 AZURE_CLIENT_ID
、AZURE_TENANT_ID
和 AZURE_SUBSCRIPTION_ID
的秘密。 使用 Microsoft Entra 應用程式中的這些值來取得 GitHub 祕密:
GitHub 祕密 |
Microsoft Entra 應用程式 |
AZURE_CLIENT_ID |
應用程式 (用戶端) 識別碼 |
AZURE_TENANT_ID |
目錄 (租用戶) 識別碼 |
AZURE_SUBSCRIPTION_ID |
訂用帳戶識別碼 |
選取 [新增秘密] 以儲存每個秘密。
移至 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@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
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@v1
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
的 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器數據檔。
- 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@v1
with:
client-id: ${{ secrets.AZURE_CREDENTIALS }}
- 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
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@v1
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
移至 GitHub 存放庫的 [動作]。
開啟第一個結果,以查看工作流程的執行詳細記錄。
當您不再需要 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器資料庫和存放庫時,請刪除資源群組和 GitHub 存放庫來清除您部署的資源。