使用 AWS 托管服务最接近它的是CodeDeploy。有了它,您可以通过命令行或 Web 控制台在EC2实例中编排部署。但到目前为止, CodeDeploy只是从S3或GitHub中提取工件。到目前为止,CodeCommit似乎与其他相关的 Amazon 服务完全隔离,例如CodePipeline和CodeDeploy,因此它似乎不是一个好的选择。但是,当然,亚马逊的路线图是整合所有这些(不这样做是没有意义的)。所以,现在,使用GitHub比使用CodeCommit更好。
但是,考虑到您没有使用GitHub,那么您需要在存储库和CodeDeploy之间使用CI(持续集成)解决方案,从源代码中提取代码,可能构建或运行测试,将其推送到S3并告知CodeDeploy。例如,CodeShip可以做到这一点,并与许多外部服务集成。或者您甚至可以拥有自己的CI服务器,例如Jenkins,为您扮演“胶水”角色。(Jenkins 可能是最灵活的,因为它是开源的,并且可能有所有插件。)
因此,稍微分解一下,您的工作流程将是这样的:
- 将代码推送到您的存储库;
- 每当发生事件(某个分支上的提交或新标签,它应该是可配置的)时,您的CI会拉取它,运行您想要或需要的任何东西(构建、测试、打包),并将其推送到S3(作为tarball 文件,通常);
- 根据您的设置方式,您的CI会告诉Code Deploy立即将其部署到您的EC2实例上,或者它只是告诉它有可用的新版本,并允许您通过 Web 控制台上的 CLI 手动触发部署,无论你什么时候想要。
(实际上,CodeDeploy不会将代码推送到EC2实例。相反,每个EC2实例必须运行一个代理,该代理定期汇集 CodeDeploy服务器,以便了解是否有新的东西要在本地应用。无论如何,CodeDeploy协调并从代理那里获得反馈,所以它就像在CodeDeploy端 100% 处于活动状态而在实例端 100% 处于被动状态一样工作。)
最“干净”的 AWS 解决方案是CodeCommit -> CodePipeline -> CodeDeploy,或者只是CodeCommit -> CodeDeploy,但这些服务现在还没有完全集成。
就您而言,目前最简单可行的解决方案是Github -> CodeDeploy。与此不同的任何事情都需要一些中间步骤,例如我提供的示例(CodeShip、Jenkins等)。