通过Jenkins在所有AWS Beanstalk实例上部署新的PHP代码并运行composer?

时间:2016-04-12 18:05:16

标签: git amazon-web-services jenkins amazon-ec2 elastic-beanstalk

我是Jenkins的新手,所以我对部署有疑问。我的站点通过Docker在Amazon Beanstalk上运行(自动缩放)。目前有3个正在运行的实例,我的PHP应用程序位于/var/www

我想做的是每当我制作git push(假设测试通过)时,我想用新的PHP代码自动更新每个正在运行的EC2实例(由Beanstalk启动),然后运行{{ 1}}就可以了。

现在,我看到人们在Jenkins上使用更新服务器的命令类似composer install,然后ssh进入服务器运行rsync

由于我没有创建实例(Beanstalk是),我不知道我的实例的IP地址所以我不能把它放在我的Jenkins工作中(比如教程)。

所以我的问题是:我的Jenkinks如何在Amazon Beanstalk启动的已经运行的实例(以及任何新创建的实例)上触发代码更新和composer update

这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

我使用CodePipeline来完成我的rails应用程序。

CodePipeline是一项免费服务,可以控制您的部署,我只使用git push部署和执行构建和测试。

创建一个使用git repo作为源的管道。然后,对于构建提供程序下的构建阶段,选择“添加Jenkins”,输入服务器URL和项目名称。接下来,对于Beta,选择AWS ElasticBeanstalk作为部署提供程序,选择您希望ElasticBeanstalk部署到您并设置的应用程序和环境。

正在发生的事情是你告诉CodePipeline要看你的git repo的特定分支进行更改。当它注意到更改时,您希望它执行管道。当CP看到更改时,它将转到github,获取代码,构建程序包并通过管道引入程序包。对于构建阶段,它会将包传递给Jenkins并让Jenkins做到这一点。当Jenkins将成功消息发送回CodePipeline时,CodePipeline将执行管道中的下一步。在这种情况下,您告诉CodePipeline您希望它调用ElasticBeanstalk来部署您的应用程序。所以它将包传递给ElasticBeanstalk并说“做你的事”。 EB做了哪些。

因此我们现在让Jenkins触发您的代码更新,现在我们只需要在部署后的所有实例上运行composer install。您可以通过在.ebextensions目录中创建.config文件来完成此操作。您将创建一个像这样的容器命令:

#.ebextensions/composer.config

container_commands:
  01_first_line:
    command: cd /var/www
  02_second_line
    command: composer install

容器命令将在服务器站起来之后执行,并且在应用程序版本被提取之后但在部署之前执行。作为Rubyist,我不确定composer install是否需要在部署前,部署后或无关紧要时执行。您可以在此处找到有关在您的服务器上自定义Linux软件的AWS文档http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html#linux-container-commands,其中一个允许您在适当的时间运行composer install

相关问题