使用GitHub Actions工作流自动将Fabric应用从GitHub存储库部署到Fabric工作区。 工作流使用服务主体登录Fabric,安装 Rayfin CLI,并运行 rayfin up,将代码、数据库架构和静态内容应用到目标工作区。
本文将向您介绍如何操作:
- 为自动部署准备服务主体和Fabric工作区。
- 配置工作流所需的 GitHub 仓库密钥。
- 将部署工作流文件添加到存储库。
- 在
main上自动触发部署,也可手动触发,并可选择支持破坏性变更。 - 对功能分支和针对特定环境的部署复用相同的工作流。
先决条件
- GitHub存储库中的Fabric应用项目。 如果还没有项目,请参阅 创建第一个Fabric应用项目并将应用程序代码推送到存储库。
- 服务主体可以部署到的Microsoft Fabric工作区。 有关环境分离,请参阅 管理开发和生产环境。
- 具有客户端密钥的 Microsoft Entra ID 服务主体(应用注册)。
- 将 secrets 添加到GitHub存储库的权限。
步骤 1:为部署创建服务主体
工作流以非交互方式登录,因此它使用服务主体而不是交互式用户帐户。
- 在 Azure 门户中,在 Microsoft Entra ID>应用注册 下注册新应用程序。
- 记录 应用程序(客户端)ID 和 目录(租户)ID。
- 在 “证书和机密”下,创建新的 客户端密码 并复制该值。 安全地存储它:以后无法再次查看它。
- 向服务主体授予目标 Fabric 工作区上的 参与者 或更高级别权限,以便其可以创建和更新 Fabric 应用项。
Important
服务主体部署要求在 Fabric 租户设置中允许服务主体使用 Fabric API。 请与Fabric管理员确认已启用此功能。
步骤 2:添加存储库机密
在 GitHub 仓库中,前往 Settings>机密和变量>Actions,然后添加以下仓库机密:
| 机密名称 | 价值 |
|---|---|
CLIENT_ID |
服务主体的应用程序(客户端)ID。 |
TENANT_ID |
目录(租户)ID。 |
CLIENT_SECRET |
客户端密码值。 |
FABRIC_WORKSPACE_NAME |
目标Fabric工作区的名称(例如,my-app-prod)。 |
步骤 3:添加工作流文件
在存储库中,创建包含以下内容的文件 .github/workflows/deploy-to-fabric.yml :
name: Deploy to Fabric
on:
push:
branches: [main]
workflow_dispatch:
inputs:
force:
description: 'Allow destructive schema changes that may result in data loss'
required: false
default: false
type: boolean
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions:
contents: read
jobs:
deploy:
name: Deploy to Fabric
runs-on: ubuntu-latest
env:
CLIENT_ID: ${{ secrets.CLIENT_ID }}
TENANT_ID: ${{ secrets.TENANT_ID }}
CLIENT_SECRET: ${{ secrets.CLIENT_SECRET }}
FABRIC_WORKSPACE_NAME: ${{ secrets.FABRIC_WORKSPACE_NAME }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install Rayfin CLI
run: npm install -g @microsoft/rayfin-cli
- name: Login to Rayfin with service principal
run: |
rayfin login \
--service-principal \
-t $TENANT_ID
-u $CLIENT_ID
-p CLIENT_SECRET
- name: Deploy to Fabric
run: |
EXTRA_ARGS=""
if [[ "${{ inputs.force }}" == "true" ]]; then
EXTRA_ARGS="$EXTRA_ARGS --force"
fi
rayfin up \
--workspace "$FABRIC_WORKSPACE_NAME" \
--yes \
$EXTRA_ARGS
每个部分的作用
-
on.push:在每次推送到main时自动运行工作流。 -
on.workflow_dispatch:使用 force 复选框在GitHub Actions UI 中添加运行工作流按钮。 启用force会将--force传递给rayfin up,从而允许进行破坏性架构更改(例如删除列或表)。 为安全、非破坏性的部署将其保留为未选中状态。 -
concurrency:确保每个分支在同一时间只执行一个部署。 如果在之前的部署仍在运行时有新的推送到达,则会取消较早的运行,并以较新的提交为准。 此设置可防止两个rayfin up作业在同一工作区中发生竞争。 -
env:将服务主体凭据和目标工作区名称传递到作业中。 -
Install Rayfin CLI:全局安装 CLI,因此rayfin位于 PATH 上。 -
Login to Fabric with service principal:使用*环境变量进行身份验证。 -
Deploy to Fabric:针对已配置的租户和工作区运行rayfin up。--yes接受非破坏性提示;--force仅在手动运行提出请求时才会添加。
步骤 4:启动部署
可以通过两种方式触发工作流:
-
自动:向
main分支推送提交或合并提交。 - 手动:在 GitHub 中,转到 Actions>部署到 Fabric>运行工作流。 选择要部署的分支,并根据需要检查 “允许破坏性架构更改”,这些更改可能会导致 数据丢失,然后再启动运行。
工作流完成后,运行日志中的 Deploy 到 Fabric 步骤将输出Fabric应用 URL 和部署 ID。
注意事项和限制
- 并发按分支计算。
concurrency.group包含github.ref,因此向不同分支的部署不会相互取消。 将分支映射到不同的工作区时,此行为是有意的。 - 默认情况下会阻止破坏性更改。
rayfin up拒绝可能会丢失数据的架构操作,除非--force传递。 仅在你已审查计划执行的操作后,才为手动运行启用 强制。 - 工作区必须存在。 工作流不会创建Fabric工作区。 在Fabric门户中创建它们,并首先授予服务主体访问权限。