为不同环境(开发、测试、生产等)管理和部署工件的最佳实践
Best practices to manage and deploy artifacts for different environments (dev, test, prod etc...)
我是 CI/CD 世界的新手,现在我想在我的开发过程中实施这些工作流。
我想了解当 Dev、Test 和 Prod 存在细微差异时,如何正确地构建和发布管道来管理 Dev、Test 和 Prod 环境。
所以我正在制作一个 Asp .Net Core 应用程序,代码托管在 Azure DevOps 中,我还将使用它来构建和发布客户端代码(js 和 css) 我使用 Typescript 和 SASS 并编译为 js 和 css 我使用 npm 脚本。
现在在 Dev 环境中我想部署非缩小的 js 和 css 我还想要 sourcemap 文件,在测试环境中我想要缩小的 js 和 css 以及 sourcemap文件,在产品环境中,我只想要 css 和 js.
的缩小版本
本案例仅作为实际示例,但我想了解一般规则,无论应用程序类型或主机、构建和发布平台如何,我都可以应用。
作为附加说明,我知道这种情况非常微不足道,无需太多仪式就可以很容易地进行管理,但我想了解指南和最佳实践,然后我将选择适合我的特定情况并进行调整这些准则和最佳实践相应。
现在我可以在不同的选项之间进行选择:
- 我可以在构建阶段管理差异:
- 我可以拥有一个生成 "standard" 客户端代码、源映射和缩小版本的构建管道,并将相同的工件部署到开发、测试和生产;
- 我可以针对不同的环境使用不同的构建管道;
- 我可以拥有一个构建管道并使用条件任务;
- 我可以在发布阶段管理差异:
- 我可以使用选项 1.1 构建代码,然后在发布管道中排除我不需要的文件;
- 我可以在构建管道中只构建服务器端代码,在发布管道中编译客户端代码;
- 我可以在构建管道和发布管道中编译标准版本的 js 和 css 文件我可以生成源映射或者我可以缩小 js 和 css;
我不喜欢选项 1.1,因为我不喜欢无用的文件到处都是,这会在构建管道中添加一些不必要的额外步骤。
选项 1.2 和 1.3 为构建管道增加了一些复杂性。
使用选项 2.x 我们有 "incomplete" 个构建,因为构建过程生成的工件缺少部署环境所需的一些工件。
对我来说,我不知道 CI 和 CD 工作流程的指南和最佳实践是什么,似乎更合适的是选项 1.3 或 2.3 之一。
如果我没记错的话,问题就变成了:
是否可以接受生成因不满足部署环境的要求(例如在开发环境中需要源映射)而无法完全交付的工件的构建管道?
再见莱尼,
我做了很多年的发布经理,我理解你的痛苦。在我处理的系统中,序列是这样的:
1:从开发域到登台服务器
2:从登台服务器到渗透和漏洞测试环境
3:从测试域到SaaS生产域和DML存储库。
4:从生产域到托管并安装剪切。
我的建议是所有整理工作,例如删除开发人员的备份例程(按照严格的约定命名)和缩小都在登台服务器上完成。我们允许对登台服务器代码应用小错误修复,然后 'fix pack' 发布削减。一旦代码进入渗透和漏洞测试环境,我们的做法是代码本身不得更改:只有域之间的安全设置和 escrow/installed 发布。
一旦同意记录的流程,人们就很容易将其用作支票 sheet。您的流程可能需要与我上面概述的不同,并且应该期望它们会随着时间的推移而得到完善。我知道很多人不喜欢文档化的程序,但我在这里记录了一些好处:
http://www.esm.solutions/wp/change-management/
罗伯特,转瞬即逝
我是 CI/CD 世界的新手,现在我想在我的开发过程中实施这些工作流。
我想了解当 Dev、Test 和 Prod 存在细微差异时,如何正确地构建和发布管道来管理 Dev、Test 和 Prod 环境。
所以我正在制作一个 Asp .Net Core 应用程序,代码托管在 Azure DevOps 中,我还将使用它来构建和发布客户端代码(js 和 css) 我使用 Typescript 和 SASS 并编译为 js 和 css 我使用 npm 脚本。
现在在 Dev 环境中我想部署非缩小的 js 和 css 我还想要 sourcemap 文件,在测试环境中我想要缩小的 js 和 css 以及 sourcemap文件,在产品环境中,我只想要 css 和 js.
的缩小版本本案例仅作为实际示例,但我想了解一般规则,无论应用程序类型或主机、构建和发布平台如何,我都可以应用。
作为附加说明,我知道这种情况非常微不足道,无需太多仪式就可以很容易地进行管理,但我想了解指南和最佳实践,然后我将选择适合我的特定情况并进行调整这些准则和最佳实践相应。
现在我可以在不同的选项之间进行选择:
- 我可以在构建阶段管理差异:
- 我可以拥有一个生成 "standard" 客户端代码、源映射和缩小版本的构建管道,并将相同的工件部署到开发、测试和生产;
- 我可以针对不同的环境使用不同的构建管道;
- 我可以拥有一个构建管道并使用条件任务;
- 我可以在发布阶段管理差异:
- 我可以使用选项 1.1 构建代码,然后在发布管道中排除我不需要的文件;
- 我可以在构建管道中只构建服务器端代码,在发布管道中编译客户端代码;
- 我可以在构建管道和发布管道中编译标准版本的 js 和 css 文件我可以生成源映射或者我可以缩小 js 和 css;
我不喜欢选项 1.1,因为我不喜欢无用的文件到处都是,这会在构建管道中添加一些不必要的额外步骤。
选项 1.2 和 1.3 为构建管道增加了一些复杂性。
使用选项 2.x 我们有 "incomplete" 个构建,因为构建过程生成的工件缺少部署环境所需的一些工件。
对我来说,我不知道 CI 和 CD 工作流程的指南和最佳实践是什么,似乎更合适的是选项 1.3 或 2.3 之一。
如果我没记错的话,问题就变成了:
是否可以接受生成因不满足部署环境的要求(例如在开发环境中需要源映射)而无法完全交付的工件的构建管道?
再见莱尼,
我做了很多年的发布经理,我理解你的痛苦。在我处理的系统中,序列是这样的: 1:从开发域到登台服务器 2:从登台服务器到渗透和漏洞测试环境 3:从测试域到SaaS生产域和DML存储库。 4:从生产域到托管并安装剪切。
我的建议是所有整理工作,例如删除开发人员的备份例程(按照严格的约定命名)和缩小都在登台服务器上完成。我们允许对登台服务器代码应用小错误修复,然后 'fix pack' 发布削减。一旦代码进入渗透和漏洞测试环境,我们的做法是代码本身不得更改:只有域之间的安全设置和 escrow/installed 发布。
一旦同意记录的流程,人们就很容易将其用作支票 sheet。您的流程可能需要与我上面概述的不同,并且应该期望它们会随着时间的推移而得到完善。我知道很多人不喜欢文档化的程序,但我在这里记录了一些好处: http://www.esm.solutions/wp/change-management/
罗伯特,转瞬即逝