8

我正在使用 AWS CodeCommit,它似乎是 git 的精简版。

如果所有这些 EC2 实例都具有相同的角色标签,我该如何完成?

我不想做任何花哨的事情,我只想指定一个标签,单击一个按钮,然后所有带有该标签的 EC2 实例都会为 CodeCommit 拉取。我想从我的本地机器上执行此操作。

我知道我需要将 SSH 密钥用于访问我的每台 EC2 服务器中的 CodeCommit,并在每台服务器上安装 git(我会将其烘焙到 AMI 中)。我只是不确定如何“触发”每台 EC2 机器来执行 git pull?有 AWS 命令​​吗?

我不是开发运维人员,只知道基本的 linux 和 php。

4

2 回答 2

13

对于使用 IAM 角色启动的 EC2 实例,您甚至不必输入 SSH 密钥。Git 可以从 EC2 实例元数据中获取 CodeCommit 凭证。使用最新的 AWS CLI 包和 ~/.gitconfig 中的以下行烘焙基于 Linux 的 AMI:

[credential]
    helper = !aws --profile default codecommit credential-helper $@
    UseHttpPath = true

启动附加了 IAM 角色的实例,然后您可以克隆您的 CodeCommit 存储库而无需任何其他设置。

如果您想在基于标签的 EC2 实例队列中运行 git 命令,您可能需要研究CapistranoCapify-EC2 。

更新:如果您愿意使用 AWS OpsWorks 从 CodeCommit 进行部署,最近有一篇关于如何执行此操作的博客文章。您还可以使用 OpsWorks通过 Capistrano 跨实例运行任意命令。

于 2015-09-04T22:57:55.807 回答
4

使用 AWS 托管服务最接近它的是CodeDeploy有了它,您可以通过命令行或 Web 控制台在EC2实例中编排部署。但到目前为止, CodeDeploy只是从S3GitHub中提取工件。到目前为止,CodeCommit似乎与其他相关的 Amazon 服务完全隔离,例如CodePipelineCodeDeploy,因此它似乎不是一个好的选择。但是,当然,亚马逊的路线图是整合所有这些(不这样做是没有意义的)。所以,现在,使用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。与此不同的任何事情都需要一些中间步骤,例如我提供的示例(CodeShipJenkins等)。

于 2015-08-16T16:54:42.780 回答