使用 CI 时,如何保持环境清洁?
When using CI, how can I keep my environments clean?
我们目前在几个小项目上使用 CI,然后再开始使用更大的项目。
我们面临的问题是不断部署更新导致我们的环境变脏。我所说的脏是指旧文件没有被删除。一段时间后,我们经常会注意到数十个文件不再使用。例如,对于我们的 Python 项目,我们注意到位于 virtualenv
中的许多 pip
包都已过时,因为我们已停止使用它。
我们当前解决此问题的方法是对服务器上应用程序所在的文件夹进行核对,然后上传由我们的构建服务器创建的新工件。
有其他方法吗?我之所以这么问,是因为很明显,每次我们推送时都创建一个全新的环境,这会为我们的部署增加大量时间。我认为这是一个很常见的问题,这就是为什么我对能找到任何与此相关的文献感到有点惊讶的原因。
您可以使用滚动符号链接而不是 nuking 文件夹。其工作方式是为 运行 CI 上的每个功能创建一个目录。例如,假设您有 2 个文件夹 F1 和 F2 对应于您的功能。
如果您想 运行 CI 在 F1 上,您将创建一个切换到 F1 的符号链接。当你想测试F2时,你需要将符号链接切换到F2等等。这样您就不必重新部署每一段代码。大多数现代工具(java 编译器、复制命令)已经有一种机制,如果它们相同则不会覆盖人工制品。
要改进您的 CI 环境,您可以在临时文件夹中创建所有临时工件,并在完成 CI
后清理它们
我们目前在几个小项目上使用 CI,然后再开始使用更大的项目。
我们面临的问题是不断部署更新导致我们的环境变脏。我所说的脏是指旧文件没有被删除。一段时间后,我们经常会注意到数十个文件不再使用。例如,对于我们的 Python 项目,我们注意到位于 virtualenv
中的许多 pip
包都已过时,因为我们已停止使用它。
我们当前解决此问题的方法是对服务器上应用程序所在的文件夹进行核对,然后上传由我们的构建服务器创建的新工件。
有其他方法吗?我之所以这么问,是因为很明显,每次我们推送时都创建一个全新的环境,这会为我们的部署增加大量时间。我认为这是一个很常见的问题,这就是为什么我对能找到任何与此相关的文献感到有点惊讶的原因。
您可以使用滚动符号链接而不是 nuking 文件夹。其工作方式是为 运行 CI 上的每个功能创建一个目录。例如,假设您有 2 个文件夹 F1 和 F2 对应于您的功能。
如果您想 运行 CI 在 F1 上,您将创建一个切换到 F1 的符号链接。当你想测试F2时,你需要将符号链接切换到F2等等。这样您就不必重新部署每一段代码。大多数现代工具(java 编译器、复制命令)已经有一种机制,如果它们相同则不会覆盖人工制品。
要改进您的 CI 环境,您可以在临时文件夹中创建所有临时工件,并在完成 CI
后清理它们