我是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
?
这样做的正确方法是什么?
答案 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
。