持续集成 – 对构build代理敏感的文件和依赖关系

我想要设置多个CI任务来执行以下任务:

  1. 从VCS中检出项目源(由代码更改触发)
  2. 下载敏感configuration文件(未签入VCS)
  3. build立项目
  4. 部署项目

我正在使用TeamCity,但我认为其他地方也适用相同的概念。 我设置了CI服务器和多个构build代理(作为Docker容器在同一台服务器上,或者可能分散在其他计算机上)。 我的理解是,这些构build代理都是以相同的方式进行最低限度的configuration,并且可以随时构build任何项目。

我的问题是如何处理敏感文件。 我的许多版本都需要保存敏感信息/证书的属性文件,而不是签入VCS。 我正在考虑拥有一些全球性的资源库(例如AWS S3),我可以在这里对敏感文件进行encryption,并在需要时让构build代理将其下载。 但是, 这需要所有构build代理都安装AWS CLI软件,以便他们可以下载这些文件。

如何将具有敏感信息的文件传递给分布式构build代理?

如果我继续使用全局存储库,那么我需要在构build代理上安装AWS CLI。 虽然我的问题是关于AWS CLI的,但我可以想象其他项目在构build之前需要安装其他软件。 如何设置构build代理环境,以便可以构build具有不同依赖关系的多个项目?

我是否使用构build所有项目所需的全部软件来设置所有构build代理? 就像一个普通的Docker镜像或者什么东西? 这似乎是一个坏主意,因为它将构buildconfiguration放在不同的地方(TeamCity服务器和一个单独的Dockerfile)。 这也可能导致一个单一的,通用的Docker镜像。

还是我创build一个构build步骤(每个项目),下载并安装一个项目所需的软件? 这似乎是一个更好的主意,但是我每次构build时都要安装软件(如AWS CLI)。 无论该构build代理是否已经安装了该软件。 我也需要担心来自多个项目的软件冲突。 我必须添加清除步骤来删除软件吗? 或者我应该考虑为构build每个项目制作一个Docker容器?

还有另一种方法吗? 提前致谢!