我倾向于放弃Beanstalk,而使用诸如Chef之类的东西迁移到简单的ASG。这将使我们每个项目只有一个构建,生成一个构建工件,并且我们可以将相同的工件部署到阶段中批准的生产中。但是,过渡的前期成本并不微不足道。有什么方法可以更好地使用Beanstalk,从而使CI / CD更可靠,更易于管理?
注意:推广相同的构建工件正是我想要做的,但是我看不出有任何明确的方法可以做到这一点;它说明了如何从您的应用程序源部署到EB,但没有说明如何将现有版本升级到另一个环境,除非我设法向右滚动。如果它在EB本身中可用,那么Jenkins EB部署插件中可能会有一个限制,使其无法专门在Jenkins中完成,但是我还没有找到实现它的方法。
#1 楼
IMO认为您的问题不在那种情况下的Elastic Beanstalk中,而是在Jenkins中,或者至少在您使用它的方式中。无论该东西是什么,您实际上应该只专注于构建“一个东西”一次。全面披露:我为ThoughtWorks工作,对GoCD抱有极大的偏见。我将尽我所能阐明中立的含义。我将使用我们工具的文档作为示例,但希望人们可以推断出他们的系统。
在您开发流程的早期,您正在构建“工件”。这可能是代表整个或部分应用程序的二进制文件,也可能是从许多工具(例如测试工具)输出的二进制文件。这些工件应由系统存储,并且不再构建。然后,系统应在需要时从适当的修订版本中获取工件。
例如...
我构建一个.jar文件并运行一些单元测试关于它,基本的C / I东西。如果通过,则该.jar文件和测试输出将上传到该特定的管道作业。
下一个管道可能是您在更复杂的测试环境中的部署。它应该从构建它的确切工作中获取确切的jar。然后,它执行Elastic Beanstalk将该jar部署到正确的环境。
下一个管道是您的暂存部署。它一直回到第一个管道,并从构建它的确切作业中获取确切的jar。然后在执行程序中,Elastic Beanstalk将那个jar部署到正确的环境。
这些都是独立的管道,因为这使您可以并行运行或按需运行而不阻塞。
您可以使用Elastic Beanstalk,Chef,Puppet,Ansible,uDeploy或许多其他工具来进行实际部署。那不是您问题的出处。持续集成服务器最初并不是为此目的而构建的。当然,如果您愿意的话,可以使用很多插件来到达同一个地方。
专门构建了GoCD,Chef Automate和ConcourseCI等连续交付服务器来解决此类问题。
评论
是的,我的目标是一次建造并推广生产。我的问题是beantalk是否适合这种用法。据我所知,似乎并非如此。例如,推荐的部署.NET应用程序的方法是从Visual Studio进行,这只是我能想到的最坏的做法。
–阿德里安
17年4月4日在16:47
我还没有亲自使用过它,但是如果您将“升级”一词更改为“部署”,似乎就可以了。您的CD系统调用beantalk部署到测试,运行一些测试,然后报告成功/失败。如果成功,您的CD系统将调用beantalk进行部署,以此类推。因此,升级由业务流程工具完成,部署由部署工具完成。 (仅供参考,这就是为什么诸如Chef之类的公司拥有Hibernate(事物),Automate(促进事物)和Chef(部署事物)的原因。
–肯·莫格勒(Ken Mugrage)
17 Mar 4 '17 at 17:02
仅供参考,看来您可以编写脚本(基础结构是代码,这是“一件好事”)docs.aws.amazon.com/elasticbeanstalk/latest/dg/…-但同样,绝对是0个人经验。
–肯·莫格勒(Ken Mugrage)
17 Mar 4 '17 at 17:08
据我所知,无论您使用什么单词,beanstalk似乎都不会这样做。它似乎是针对从源头而不是从工件进行部署。在链接的页面上:“运行eb deploy时,EB CLI捆绑了项目目录的内容并将其部署到您的环境中。”我很欣赏这个答案,但是我的问题是针对beantalk的,所以希望有beantalk经验的人可以加入。
–阿德里安
17 Mar 4 '17 at 17:34
啊,对此感到抱歉。我正在解释〜/ eb $ eb deploy创建应用程序版本档案“ app-150630_014338”。将elastic-beanstalk-example / app-150630_014338.zip上载到S3,表示您粘贴在该目录中的所有zip文件。祝好运!
–肯·莫格勒(Ken Mugrage)
17 Mar 4 '17在17:43
评论
是您的Jenkins环境构成了每个环境限制的单一构建吗?我使用Elastic Beanstalk部署应用程序,并且可以将上载的应用程序工件提升(部署)到多个环境中。因此,我没有真正看到您所描述的限制。听起来好像您可以利用Elastic Beanstalk完成您想要的事情。但是这个问题就目前而言还是相当广泛的。为什么要在测试后重建资产而不是将同一资产提升到其他环境?