Deployment 使用CI时,如何保持环境清洁?

Deployment 使用CI时,如何保持环境清洁?,deployment,continuous-integration,continuous-deployment,Deployment,Continuous Integration,Continuous Deployment,我们目前正在一些小项目上使用CI,然后才开始着手更大的项目 我们面临的问题是,不断部署更新会导致我们的环境变脏。我所说的“脏”是指旧文件不会被删除。过了一段时间,我们发现几十个文件不再被使用的情况并不少见。例如,对于我们的Python项目,我们注意到位于virtualenv中的许多pip包已经过时,因为我们停止使用它 我们当前的方法是通过对应用程序驻留在服务器上的文件夹进行nuking,并上传构建服务器创建的新工件来解决这个问题 还有别的办法吗?我这样问是因为很明显,每次推送都会创建一个全新的环

我们目前正在一些小项目上使用CI,然后才开始着手更大的项目

我们面临的问题是,不断部署更新会导致我们的环境变脏。我所说的“脏”是指旧文件不会被删除。过了一段时间,我们发现几十个文件不再被使用的情况并不少见。例如,对于我们的Python项目,我们注意到位于
virtualenv
中的许多
pip
包已经过时,因为我们停止使用它

我们当前的方法是通过对应用程序驻留在服务器上的文件夹进行nuking,并上传构建服务器创建的新工件来解决这个问题


还有别的办法吗?我这样问是因为很明显,每次推送都会创建一个全新的环境,这为我们的部署增加了大量的时间。我觉得这是一个很常见的问题,这就是为什么我有点惊讶,我能找到任何与此相关的文献。

你可以使用滚动符号链接,而不是使用裸体文件夹。其工作方式是为运行CI的每个功能创建一个目录。例如,假设您有两个文件夹F1和F2对应于您的要素

如果要在F1上运行CI,将创建切换到F1的符号链接。当您想要测试F2时,您需要将符号链接切换到F2,依此类推。这样,您就不必重新部署每一段代码。大多数现代工具(java编译器、复制命令)已经有了一种机制,如果它们是相同的,就不会覆盖人工制品


为了改进CI环境,您可以在临时文件夹中创建所有临时工件,并在完成CI后清理它们

使用Docker容器运行测试使为每个测试构建一个全新的环境变得非常可行。