你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure 应用服务使用 Linux 操作系统,提供高度可缩放的自修补 Web 托管服务。 本教程介绍如何在连接到 Azure Cosmos DB for MongoDB 数据库的 Azure 应用服务中创建安全的 Node.js 应用。 完成本教程后,Linux 上的 Azure 应用服务中将会运行一个 Express.js 应用。
本教程介绍如何执行下列操作:
- 使用 MongoDB API 为 Azure 应用服务和 Azure Cosmos DB 创建默认安全的体系结构。
- 使用托管标识和密钥保管库引用来保护连接机密。
- 从 GitHub 存储库将 Node.js 示例应用部署到应用服务。
- 在应用程序代码中访问应用服务应用设置。
- 进行更新并重新部署应用程序代码。
- 从应用服务流式传输诊断日志。
- 在 Azure 门户中管理应用。
- 使用 Azure Developer CLI 预配同一体系结构并进行部署。
- 使用 GitHub Codespaces 和 GitHub Copilot 优化开发工作流。
先决条件
- 具有活动订阅的 Azure 帐户。 如果没有 Azure 帐户,可以免费创建一个。
- 一个 GitHub 帐户。 你也可以免费获得一个。
- Express.js 开发知识。
- (可选)若要试用 GitHub Copilot,请创建一个 GitHub Copilot 帐户。 有 30 天免费试用版可用。
- 具有活动订阅的 Azure 帐户。 如果没有 Azure 帐户,可以免费创建一个。
- 已安装 Azure 开发人员 CLI。 可以使用 Azure Cloud Shell 执行这些步骤,因为它已安装 Azure 开发人员 CLI。
- Express.js 开发知识。
- (可选)若要试用 GitHub Copilot,请创建一个 GitHub Copilot 帐户。 有 30 天免费试用版可用。
跳到末尾
可以快速部署本教程中的示例应用,并查看它是否在 Azure 中运行。 只需在 Azure Cloud Shell 中运行以下命令,然后按照提示操作:
mkdir msdocs-nodejs-mongodb-azure-sample-app
cd msdocs-nodejs-mongodb-azure-sample-app
azd init --template msdocs-nodejs-mongodb-azure-sample-app
azd up
1.运行示例
首先,将示例数据驱动的应用设置为起点。 为方便起见,示例存储库包含一个开发容器配置。 开发容器包含开发应用程序所需的所有内容,包括示例应用程序所需的数据库、缓存和所有环境变量。 开发容器可以在 GitHub codespace 中运行,这意味着可使用 Web 浏览器在任何计算机上运行示例。
步骤 1:在新浏览器窗口中:
- 登录到 GitHub 帐户。
- 导航到 https://github.com/Azure-Samples/msdocs-nodejs-mongodb-azure-sample-app/fork。
- 取消选择“仅复制主分支”。 你想要所有的分支。
- 选择“创建分支”。
步骤 2:在 GitHub 分支中:
- 选择“main”>“starter-no-infra”作为起始分支。 此分支仅包含示例项目,不包含与 Azure 相关的文件或配置。
- 选择“代码”“在 starter-no-infra 上创建 codespace”。> 设置 codespace 需要几分钟时间。
步骤 3:在 codespace 终端中:
- 运行
npm install && npm start。 - 看到通知
Your application running on port 3000 is available.时,选择“在浏览器中打开”。 应在新的浏览器选项卡中看到该示例应用程序。若要停止 Express.js 应用程序,请键入Ctrl+C。
遇到问题? 检查故障排除部分。
2.创建应用服务和 Azure Cosmos DB
此步骤创建 Azure 资源。 本教程中使用的步骤创建一组默认安全的资源,其中包括应用服务和 Azure Cosmos DB for MongoDB。 此创建过程中,你将指定:
- Web 应用的名称。 它用作应用的 DNS 名称的一部分。
- “地区”,即应用在真实世界运行的地区。 它还用作应用的 DNS 名称的一部分。
- 应用的运行时堆栈。 在此处选择要用于应用的 Node 版本。
- “托管计划”,即应用的托管计划。 它是定价层,包括应用的一组功能和缩放容量。
- “资源组”,即应用的资源组。 使用资源组可将应用程序所需的所有 Azure 资源分组到一个逻辑容器中。
登录到 Azure 门户并按照以下步骤创建 Azure 应用服务资源。
步骤 1:在 Azure 门户中:
- 在 Azure 门户顶部的搜索栏中,输入“Web 应用数据库”。
- 在“市场”标题下方,选择标记为“Web 应用 + 数据库”的项目。 还可以直接导航到创建向导。
步骤 2:在“创建 Web 应用 + 数据库”页上,按下面所述填写表单。
- 资源组:选择“新建”,并使用 msdocs-expressjs-mongodb-tutorial 作为名称。
- 区域:你附近的任何 Azure 区域。
- 名称:msdocs-expressjs-mongodb-XYZ,其中 XYZ 是任意三个随机字符。
- 运行时堆栈:Node 20 LTS。
- 引擎:适用于 MongoDB 的 Cosmos DB API。 Azure Cosmos DB 是一个云原生数据库,提供 100% 与 MongoDB 兼容的 API。 请注意为你生成的数据库名称 (<app-name>-database)。 稍后需要用到此信息。
- 托管计划:基本。 准备就绪后,可以纵向扩展到生产定价层。
- 选择“查看 + 创建”。
- 验证完成后,选择“创建”。
步骤 3:该部署需要数分钟才能完成。 部署完成后,选择“转到资源”按钮。 你会直接转到应用服务应用,但以下资源现已创建:
- 资源组 → 所有已创建资源的容器。
- 应用服务计划 → 定义应用服务的计算资源。 现在基本层中建立了 Linux 计划。
- 应用服务 → 表示应用,且在应用服务计划中运行。
- 虚拟网络 → 与应用服务应用集成,并隔离后端网络流量。
- 专用终结点 → 虚拟网络中数据库资源的访问终结点。
- 网络接口 → 表示专用终结点的专用 IP 地址。
- Azure Cosmos DB for MongoDB → 只能从专用终结点后面访问。 你的数据库和用户创建于此服务器上。
- 专用 DNS 区域 → 在虚拟网络中启用 Azure Cosmos DB 服务器的 DNS 解析。
遇到问题? 检查故障排除部分。
3.安全连接机密
创建向导已经为你生成了连接字符串作为应用设置。 但是,安全最佳做法是将机密完全保留在应用服务之外。 你需要借助服务连接器将机密移到密钥保管库,并将应用设置更改为密钥保管库引用。
步骤 1:在“应用服务”页中:
- 在左侧菜单中,选择“设置”>“环境变量”。
- 在 AZURE_COSMOS_CONNECTIONSTRING 旁边,选择“显示值”。 此连接字符串允许连接到受专用终结点保护的 Cosmos DB 数据库。 但是,机密直接保存在应用服务应用中,这不是最好的做法。 你将对此进行更改。
步骤 2:创建密钥保管库以安全管理机密。
- 在顶部搜索栏中,键入“密钥保管库”,然后选择市场>密钥保管库。
- 在“资源组”中,选择“msdocs-expressjs-mongodb-tutorial”。
- 在“密钥保管库名称”中,键入仅包含字母和数字的名称。
- 在“区域”中,将其设置为资源组的示例位置。
步骤 3:
- 选择“网络”选项卡。
- 取消选择“启用公共访问”。
- 选择“创建专用终结点”。
- 在“资源组”中,选择“msdocs-expressjs-mongodb-tutorial”。
- 在“密钥保管库名称”中,键入仅包含字母和数字的名称。
- 在“区域”中,将其设置为资源组的示例位置。
- 在对话框中,在“位置”中,选择与应用服务应用相同的位置。
- 在“资源组”中,选择“msdocs-expressjs-mongodb-tutorial”。
- 在名称中,键入msdocs-expressjs-mongodb-XYZVaultEndpoint。
- 在虚拟网络中,选择msdocs-expressjs-mongodb-XYZVnet。
- 在“子网”中,选择“msdocs-expressjs-mongodb-XYZSubnet”。
- 选择“确定”。
- 依次选择“查看 + 创建”、“创建”。 等待密钥保管库部署完成。 应会看到“部署已完成”。
步骤 4:
- 在顶部搜索栏中键入“msdocs-expressjs-mongodb”,然后键入名为“msdocs-expressjs-mongodb-XYZ”的应用服务资源。
- 在应用服务页面的左侧菜单中,选择“设置”>“服务连接器”。 已经有一个连接器,该连接器是为你创建的应用创建向导。
- 选中连接器旁边的复选框,然后选择“编辑”。
- 在“基本信息”选项卡中,将“客户端类型”设置为“Node.js”。
- 选择“身份验证”选项卡。
- 选择“在密钥保管库中存储机密”。
- 在“密钥保管库连接”下,选择“创建新连接”。 在编辑对话框顶部打开“创建连接”对话框。
步骤 5:在密钥保管库连接的“创建连接”对话框中:
- 在“密钥保管库”中选择之前创建的密钥保管库。
- 选择“查看 + 创建” 。 应该会看到“系统分配的托管标识”设置为“已选中”。
- 验证完成后,选择“创建”。
步骤 6:返回“defaultConnector”的编辑对话框中。
- 在“身份验证”选项卡中,等待创建密钥保管库连接器。 完成后,“密钥保管库连接”下拉列表会自动选择相应选项。
- 选择“下一页:网络”。
- 选择“配置防火墙规则以启用对目标服务的访问权限”。 如果看到消息“目标服务上没有专用终结点”,请忽略它。 应用创建向导已使用专用终结点保护 Cosmos DB 数据库。
- 选择“保存”。 等待“更新成功”通知出现。
步骤 7:验证所做的更改:
- 在左侧菜单中,再次选择“环境变量”。
- 在应用设置“AZURE_COSMOS_CONNECTIONSTRING”的旁边,选择“显示值”。 该值应为
@Microsoft.KeyVault(...),表明它是密钥保管库引用,因为机密现于密钥保管库中托管。
遇到问题? 检查故障排除部分。
4.部署示例代码
在此步骤中,使用 GitHub Actions 配置 GitHub 部署。 这只是部署到应用服务的许多方法之一,也是一种在部署过程中持续集成的好方法。 默认情况下,进入 GitHub 存储库的每个 git push 都会启动生成和部署操作。
步骤 1:在左侧菜单中,选择“部署”>“部署中心”。
步骤 2:在“部署中心”页中:
- 在“源”中,选择“GitHub”。 默认情况下,选择 GitHub Actions 作为生成提供程序。
- 登录到 GitHub 帐户,并按照提示授权 Azure。
- 在“组织”中,选择你的帐户。
- 在“存储库”中,选择“msdocs-nodejs-mongodb-azure-sample-app”。
- 在“分支”中,选择“starter-no-infra”。 这是与示例应用一起使用的同一分支,不包含任何与 Azure 相关的文件或配置。
- 对于“身份验证类型”,请选择“用户分配的标识”。
- 在顶部菜单中,选择“保存”。 应用服务会将工作流文件提交到所选 GitHub 存储库中(在
.github/workflows目录中)。 默认情况下,部署中心会为工作流创建用户分配的标识,以便使用 Microsoft Entra(OIDC 身份验证)进行身份验证。 有关替代身份验证选项,请参阅使用 GitHub Actions 部署到应用服务。
步骤 3:返回示例分支的 GitHub codespace,运行 git pull origin starter-no-infra。
这会将新提交的工作流文件拉取到 codespace。
步骤 4(选项 1:使用 GitHub Copilot):
- 选择“聊天”视图,然后选择 +,即可开始新的聊天会话。
- 提问“@workspace 应用程序如何连接到数据库?”Copilot 可能会将你指向 app.js 文件和 调用。
mongoose.connect - 说出“*我在 Azure 中有一个名为 AZURE_COSMOS_CONNECTIONSTRING 的连接字符串变量”。 Copilot 可能会向你提供与下面的“选项 2:不使用 GitHub Copilot”步骤中的代码建议类似的代码建议,甚至会告诉你在 app.js 文件中进行更改。
- 在资源管理器中打开 app.js,并在 方法中添加代码建议。
getAppGitHub Copilot 不会每次都给你相同的回复,你可能需要提出更多问题来优调其回复。 有关提示,请参阅我可以在 codespace 中使用 GitHub Copilot 做什么?。
步骤 4(选项 2:不使用 GitHub Copilot):
- 从资源管理器打开app.js。
- 找到调用
mongoose.connect的行(第 16 行),并将process.env.MONGODB_URI更改为process.env.AZURE_COSMOS_CONNECTIONSTRING || process.env.MONGODB_URI。
步骤 5:
- 选择“源代码管理”扩展。
- 在文本框中,键入类似
Update environment variable的提交消息。 或者,选择
,让 GitHub Copilot 为你生成提交消息。 - 选择“提交”,然后使用“是”进行确认。
- 选择“同步更改 1”,然后使用“确定”进行确认。
步骤 6:返回到 Azure 门户中的“部署中心”页:
- 在“日志”选项卡下,选择“刷新”。 已从提交的更改开始新的部署运行。
- 在部署运行的日志项中,选择具有最新时间戳的“生成/部署日志”条目。
步骤 7:你已转到 GitHub 存储库,并看到 GitHub Action 正在运行。 工作流文件定义两个单独的阶段,即生成和部署阶段。 等待 GitHub 运行以显示“完成”状态。
遇到问题? 检查故障排除部分。
5.浏览到应用
步骤 1:在“应用服务”页中:
- 从左侧菜单中选择“概述”。
- 选择应用的 URL。
步骤 2:将一些任务添加到列表。 恭喜,你已在 Azure 应用服务中运行了一个安全的数据驱动的 Node.js 应用。
6.流式传输诊断日志
Azure 应用服务捕获已记录到控制台的所有消息,以帮助你诊断应用程序的问题。 示例应用在其每个终结点中输出控制台日志消息,以演示此功能。 例如,get 终结点输出有关从数据库中检索的任务数量的消息,如果出现问题,则它会输出一条错误消息。
router.get('/', function(req, res, next) {
Task.find()
.then((tasks) => {
const currentTasks = tasks.filter(task => !task.completed);
const completedTasks = tasks.filter(task => task.completed === true);
console.log(`Total tasks: ${tasks.length} Current tasks: ${currentTasks.length} Completed tasks: ${completedTasks.length}`)
res.render('index', { currentTasks: currentTasks, completedTasks: completedTasks });
})
.catch((err) => {
console.log(err);
res.send('Sorry! Something went wrong.');
});
});
步骤 1:在“应用服务”页中:
- 从左菜单中选择“应用服务日志”。
- 在“应用程序日志记录”下,选择“文件系统”。
- 在顶部菜单中,选择“保存”。
步骤 2:在左侧菜单中,选择“日志流”。 将显示应用的日志,包括平台日志和容器内部的日志。
7.使用 Kudu 检查已部署的文件
Azure 应用服务提供了一个名为 Kudu 的基于 Web 的诊断控制台,用于检查 Web 应用的服务器托管环境。 使用 Kudu 可以查看部署到 Azure 的文件、查看应用程序的部署历史记录,甚至可以打开 SSH 会话以进入托管环境。
步骤 1:在“应用服务”页中:
- 从左侧菜单中,选择“高级工具”。
- 选择“Go”。
步骤 2:在 Kudu 页中,选择“部署”。
如果使用 Git 或 zip 部署将代码部署到应用服务,则会看到 Web 应用的部署历史记录。
步骤 3:返回 Kudu 主页,然后选择“Site wwwroot”。
可以看到已部署的文件夹结构,并可以选择文件进行浏览和查看。
8.清理资源
完成后,可以通过删除资源组从 Azure 订阅中删除所有资源。
步骤 1:在 Azure 门户顶部的搜索栏中:
- 输入资源组名称。
- 选择资源组。
步骤 2:在资源组页上,选择“删除资源组”。
步骤 3:
- 输入资源组名称以确认删除。
- 选择“删除”。
2.创建 Azure 资源并部署示例应用
在此步骤中,将创建 Azure 资源并将示例应用部署到 Linux 上的应用服务。 本教程中使用的步骤创建一组默认安全的资源,其中包括应用服务和 Azure Cosmos DB。
开发容器已具有 Azure Developer CLI (AZD)。
从存储库根路径,运行
azd init。azd init --template nodejs-app-service-cosmos-redis-infra出现提示时,请提供以下答案:
问题 答案 当前目录不为空。 是否要在此处初始化“<your-directory>”中的项目? 是 你希望对这些文件执行哪些操作? 使现有文件保持不变 输入新环境名称 键入唯一名称。 AZD 模板将此名称用作 Azure 中 Web 应用的 DNS 名称的一部分 ( <app-name>-<hash>.azurewebsites.net)。 允许使用字母数字字符和下划线。通过运行
azd auth login命令并按照提示登录到 Azure:azd auth login使用
azd up命令创建必要的 Azure 资源并部署应用代码。 按照提示为 Azure 资源选择所需的订阅和位置。azd upazd up命令需要大约 15 分钟来完成(Redis 缓存需要的时间最长)。 它还会编译和部署应用程序代码,但你稍后将修改代码以使用应用服务。 在运行时,该命令会提供有关预配和部署过程的消息,包括指向 Azure 中部署的链接。 完成后,命令还会显示指向部署应用程序的链接。此 AZD 模板包含使用以下 Azure 资源生成安全默认体系结构的文件(azure.yaml 和 infra 目录):
- 资源组:所有已创建资源的容器。
- 应用服务计划:为应用服务定义计算资源。 在 B1 层中已创建一个 Linux 方案。
- 应用服务:表示应用并在应用服务计划中运行。
- 虚拟网络:与应用服务应用集成,并隔离后端网络流量。
- 使用 MongoDB API 的 Azure Cosmos DB 账户:只能从其专用终结点后面访问。 将在服务器上为你创建数据库。
- Azure Cache for Redis:只能从虚拟网络中访问。
- 密钥保管库:只能通过其专用终结点访问。 用于管理应用服务应用的机密。
- 专用终结点:虚拟网络中的密钥保管库、数据库服务器和 Redis 缓存的访问终结点。
- 专用 DNS 区域:启用虚拟网络中的 Cosmos DB 数据库、Redis 缓存和密钥保管库的 DNS 解析。
- Log Analytics 工作区:充当应用日志传送的目标容器,还可以在其中查询日志。
一旦命令完成创建资源和首次部署应用程序代码的操作,已部署的示例应用就无法运行,因为你必须进行微小的更改才能使其连接到 Azure 中的数据库。
3.验证连接字符串
你使用的 AZD 模板已为你生成了连接变量作为应用设置,并将它们输出到终端,以方便你使用。 使用应用设置可以将连接机密保留在代码存储库之外。
在 AZD 输出中,找到应用设置
AZURE_COSMOS_CONNECTIONSTRING。 仅显示设置名称。 如 AZD 输出中所示:App Service app has the following app settings: - AZURE_COSMOS_CONNECTIONSTRING - AZURE_REDIS_CONNECTIONSTRING - AZURE_KEYVAULT_RESOURCEENDPOINT - AZURE_KEYVAULT_SCOPEAZURE_COSMOS_CONNECTIONSTRING包含 Azure 中 Cosmos DB 数据库的连接字符串。 稍后需要在代码中使用它。为方便起见,AZD 模板会显示应用的应用设置页的直接链接。 找到该链接并在新的浏览器选项卡中打开它。
遇到问题? 检查故障排除部分。
4.修改示例代码并重新部署
在 GitHub codespace 中,单击“聊天”视图,然后单击 ,即可开始新的聊天会话+。
提问“@workspace 应用程序如何连接到数据库?”Copilot 可能会将你指向 app.js 文件和 调用。
mongoose.connect说出“我在 Azure 中有一个名为 AZURE_COSMOS_CONNECTIONSTRING 的连接字符串变量”。 Copilot 可能会向你提供与下面的“选项 2:不使用 GitHub Copilot”步骤中的代码建议类似的代码建议,甚至会告诉你在 app.js 文件中进行更改。
在资源管理器中打开 app.js,并在 方法中添加代码建议。
getAppGitHub Copilot 不会每次都给你相同的回复,你可能需要提出更多问题来优调其回复。 有关提示,请参阅我可以在 codespace 中使用 GitHub Copilot 做什么?。
返回 codespace 终端,运行
azd deploy。azd deploy
提示
也可以始终只使用 azd up,它会同时执行 azd package、azd provision 和 azd deploy。
遇到问题? 检查故障排除部分。
5.浏览到应用
在 AZD 输出中,找到应用的 URL 并在浏览器中导航到该 URL。 该 URL 在 AZD 输出中如下所示:
Deploying services (azd deploy) (✓) Done: Deploying service web - Endpoint: <URL>
将一些任务添加到列表。
恭喜,你已在 Azure 应用服务中运行了一个 Web 应用,并安全连接到了 Azure Cosmos DB。
遇到问题? 检查故障排除部分。
6.流式传输诊断日志
Azure 应用服务捕获已记录到控制台的所有消息,以帮助你诊断应用程序的问题。 示例应用在其每个终结点中输出控制台日志消息,以演示此功能。 例如,get 终结点输出有关从数据库中检索的任务数量的消息,如果出现问题,则它会输出一条错误消息。
router.get('/', function(req, res, next) {
Task.find()
.then((tasks) => {
const currentTasks = tasks.filter(task => !task.completed);
const completedTasks = tasks.filter(task => task.completed === true);
console.log(`Total tasks: ${tasks.length} Current tasks: ${currentTasks.length} Completed tasks: ${completedTasks.length}`)
res.render('index', { currentTasks: currentTasks, completedTasks: completedTasks });
})
.catch((err) => {
console.log(err);
res.send('Sorry! Something went wrong.');
});
});
在 AZD 输出中,找到流式传输应用服务日志的链接,并在浏览器中导航到该链接。 该链接在 AZD 输出中如下所示:
Stream App Service logs at: <URL>
在 为 .NET、Node.js、Python 和 Java 应用程序启用 Azure Monitor OpenTelemetry 系列中详细了解 Java 应用中的日志记录。
遇到问题? 检查故障排除部分。
7.清理资源
若要删除当前部署环境中的所有 Azure 资源,请运行 azd down 并按照提示进行操作。
azd down
故障排除
Azure Cosmos DB 的门户部署视图显示冲突状态
根据你的订阅和所选区域,你可能会看到 Azure Cosmos DB 的部署状态为 Conflict,并且操作详细信息中显示以下消息:
Sorry, we are currently experiencing high demand in <region> region, and cannot fulfill your request at this time.
此错误很可能是由所选区域的订阅限制引起的。 请尝试为部署选择其他区域。
已部署的应用的浏览器页面显示“出现错误”。
可能仍需要在应用程序代码中进行连接字符串更改。 参阅 4.部署示例代码。
常见问题解答
- 此设置花费有多大?
- 如何使用其他工具连接到在虚拟网络后面受保护的 Azure Cosmos DB 服务器?
- 本地应用开发如何与 GitHub Actions 配合工作?
- 为什么 GitHub Actions 部署速度这么慢?
- 我无权创建用户分配的标识
- 在我的 codespace 中,我可以用 GitHub Copilot 做些什么?
这套设备的成本是多少?
所创建资源的定价如下所示:
- 应用服务计划在“基本”层中创建,可以向上或向下扩展。 请参阅应用服务定价。
- Azure Cosmos DB 服务器是在单个区域中创建的,可以分发到其他区域。 请参阅 Azure Cosmos DB 定价。
- 除非配置额外的功能(例如对等互连),否则虚拟网络不会产生费用。 请参阅 Azure 虚拟网络定价。
- 专用 DNS 区域会产生少量费用。 请参阅 Azure DNS 定价。
如何使用其他工具连接到在虚拟网络后面受保护的 Azure Cosmos DB 服务器?
- 要从命令行工具进行基本访问,可以从应用的 SSH 终端运行
mongosh。 应用的容器不附带mongosh,因此必须手动安装它。 请记住,已安装的客户端不会在应用重启时持久保存。 - 若要从 MongoDB GUI 客户端进行连接,计算机必须位于虚拟网络中。 例如,它可以是连接到其中某个子网的 Azure VM,也可以是与 Azure 虚拟网络建立站点到站点 VPN 连接的本地网络中的计算机。
- 要从门户中的 Azure Cosmos DB 管理页从 MongoDB shell 进行连接,计算机还必须位于虚拟网络中。 可以改为为本地计算机的 IP 地址打开 Azure Cosmos DB 服务器的防火墙,但这会增加配置的攻击面。
本地应用开发如何与 GitHub Actions 配合工作?
以应用服务自动生成的工作流文件为例,每个 git push 文件都会启动新的生成和部署运行。 从 GitHub 存储库的本地克隆中,将所需的更新推送到 GitHub。 例如:
git add .
git commit -m "<some-message>"
git push origin main
为什么 GitHub Actions 部署速度这么慢?
应用服务自动生成的工作流文件定义生成后部署的双作业运行。 由于每个作业都在自己的干净环境中运行,因此工作流文件确保 deploy 作业能够访问来自 build 作业的文件。
- 在
build作业结束时,将文件上传为项目。 - 在
deploy作业开始时,下载项目。
两个作业过程的大部分时间都是花费在上传和下载项目上。 如果需要,可以通过将两个作业合并为一个作业来简化工作流文件,这样就无需上传和下载步骤。
我无权创建用户分配的标识
我可以在 codespace 中使用 GitHub Copilot 做什么?
你可能注意到,创建 codespace 时,GitHub Copilot 聊天视图已经存在。 为了你的方便,我们在容器定义中包含了 GitHub Copilot 聊天扩展(参见 .devcontainer/devcontainer.json)。 不过,你需要一个 GitHub Copilot 帐户(可免费试用 30 天)。
下面是与 GitHub Copilot 交谈时的一些提示:
- 在单次聊天会话中,问题和答案相互关联,你可以调整问题来微调所获得的答案。
- 默认情况下,GitHub Copilot 无法访问你存储库中的任何文件。 若要询问有关文件的问题,请首先在编辑器中打开该文件。
- 为了让 GitHub Copilot 在准备答案时有权访问存储库中的所有文件,请在问题开头加上
@workspace。 有关详细信息,请参阅 Use the @workspace agent。 - 在聊天会话中,GitHub Copilot 可以建议更改,甚至可以(在使用
@workspace时)建议在何处进行更改,但系统不允许它为你进行更改。 你可以自行添加建议的更改并对其进行测试。
你还可以说下面的一些话来微调得到的答案:
- @workspace MONGODB_URI 在何处定义?
- 我应在哪个文件中进行更改?
- 当我的应用在本地运行时,此项更改是否会中断它?