我正在使用AWS CodeCommit,它看起来像是git的精简版。
如果所有这些EC2实例都具有相同的角色标记,我该如何实现?
我不想做任何花哨的事情,我想要的只是指定一个标签,点击一个按钮,所有那些带有该标签的EC2实例都为CodeCommit提取。我想从我的本地机器上做到这一点。
我知道我需要使用SSH密钥访问每个EC2服务器中的CodeCommit,并在每个服务器上安装git(我将其加入AMI)。我只是不确定如何触发"每个EC2机器做一个git pull?是否有AWS命令?
我不是开发人员,只知道基本的linux和php。
答案 0 :(得分:12)
对于使用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命令,您可能需要查看Capistrano和Capify-EC2。
更新: 如果您打开使用AWS OpsWorks从CodeCommit部署,那么recent blog article就如何做到这一点。您还可以在使用Capistrano的实例中使用OpsWorks run arbitrary commands。
答案 1 :(得分:4)
您与AWS托管服务最接近的是 CodeDeploy 。有了它,您可以通过命令行或Web控制台协调 EC2 实例中的部署。但到目前为止, CodeDeploy 只是从 S3 或 GitHub 中提取工件。到目前为止, CodeCommit 似乎与其他相关的亚马逊服务完全隔离,例如 CodePipeline 和 < em> CodeDeploy ,所以它似乎不是一个好的选择。但是,当然,亚马逊的路线图是整合所有这些(不这样做会毫无意义)。所以,现在,你最好使用 GitHub 而不是 CodeCommit 。
但是,考虑到您没有使用 GitHub ,那么您需要在存储库和 CodeDeploy 之间使用 CI (持续集成)解决方案,来自源代码的代码,可能构建或运行测试,将其推送到 S3 并告诉 CodeDeploy 。例如,有CodeShip可以做到这一点,并与许多外部服务集成。或者您甚至可以拥有自己的 CI 服务器,例如 Jenkins ,这样做&#34;粘合&#34;你的角色。 (詹金斯可能是最灵活的一个,因为它是开源的,并且可能有所有插件。)
所以,稍微分解一下,你的工作流程会是这样的:
(实际上, CodeDeploy 不会将代码推送到 EC2 实例。而是每个 EC2 实例必须运行代理池定期 CodeDeploy 服务器,以了解是否有新的东西在本地应用。无论如何, CodeDeploy 协调并从代理获得反馈,所以它只是作为如果 CodeDeploy 侧100%有效,实例侧100%无源。)
最干净&#34;清洁&#34; AWS解决方案将 CodeCommit - &gt; CodePipeline - &gt; CodeDeploy ,或只是 CodeCommit - &gt; CodeDeploy ,但这些服务目前还没有完全集成。
在您的情况下,现在最简单可行的解决方案是 Github - &gt; CodeDeploy 。任何不同的东西都需要一些中间步骤,比如我提供的示例( CodeShip , Jenkins 等)。