背景

我有一个非技术性的质量检查小组,他们必须对我的后端团队创建的每个Pull Request(PR)在iOS / android应用上进行测试。

问题

这就是我要做的:每当后端工程师在bitbucket上创建PR时,我都希望脚本自动部署该PR git分支的代码进入与所创建的JIRA问题匹配的开发服务器的子域。

例如,假设PR地址为BAC-421是jira问题,那么工程师一旦创建PR,脚本便会将其创建的代码部署到AWS EC2中,以便QA可以指向他们到www.bac421.mydevdomain.com的应用程序

做到这一点的最佳方法是什么?我是devops技术专家。

更新-环境规格

所以这是我们的环境的一部分。
-后端使用laravel 5.3
-已部署在AWS EC2上
/>-我们使用forge进行自动部署(没什么花哨的..我们只是运行以下脚本:

cd /home/forge/default
git fetch --tags 
git pull origin master
git describe
composer install --no-dev --no-interaction --prefer-dist --optimize-autoloader
echo "" | sudo -S service php7.1-fpm reload

if [ -f artisan ]
then
    php artisan migrate --force
    php artisan config:cache
    php artisan queue:restart
fi


,我们将dev合并到master分支后便立即运行)
-除了我不接受任何建议外,我们不使用任何CI / CD工具
-DNS提供商是GoDaddy
-我们的应用程序服务器是nginx
-我们的数据库在单独的RDS实例中

评论

您目前如何部署软件?您使用什么CI或CD工具?谁是您的DNS提供商?

是。有很多方法可以使这只猫皮肤化-包括但不限于更新主机文件,但我们需要更多了解您的环境。

答案已更新@ user2640621

#1 楼

我们在工作中做到这一点。

我们有一个小型服务器,我们称它为接收器,它是GitHub webhook事件的目标。它运行一个小型应用程序,该应用程序解析有效负载并合并有关如何进行处理的逻辑,例如在基础架构提供程序上创建新服务器,更新负载平衡器,部署到现有服务器,销毁服务器等。这可以是提供API的传统Web应用程序,也可以是无服务器的应用程序,具体取决于您的需要要实现这一目标。

接收器相对简单易用,您需要的其他必要的支持系统是配置管理/配置(服务器如何拥有运行应用程序所需的软件包)的方法。 ),机密管理(服务器如何访问敏感信息)和路由(子域如何更新并路由到正确的服务器)。

考虑使用以下方法准备AMI是值得的配置了必要的服务后,带有基础结构配置逻辑和CodeDeploy的CloudFormation模板可以为您处理部署。

配置管理

这实际上取决于您和您的团队是上午您可以使用多种工具,也可以仅依靠Shell脚本。我在链接的AMI设计文章中讨论了在服务器生命周期中什么时候应用更改。

秘密管理

为了简短起见,这是一个具有挑战性的主题,请您随手处理信息。我将把它留给您和您的团队。 />
路由

有几种处理路由的方法,AWS提供的Application Load Balancer(不要与ELB / NLB混淆)支持基于主机的路由。另外,您可以使用NGINX或HAProxy之类的反向代理,在提供新环境时,无论采用哪种方法,都需要(理想情况下自动)更新此路由。

不要忘记考虑如何处理数据库/持久层和零停机时间部署。关于持久层的问题是,团队是否将共享一个数据库,以及该数据库将如何与诸如迁移之类的事物进行交互。在零停机时间部署这一主题上,CodeDeploy应该可以为您很好地解决这一问题。还有一件事,您提到了一个指向不同环境的移动应用程序,如何将这些应用程序指向这些环境。

评论


你的答案很多。你能分解一下吗?例如,在您提到的不同部分中,如果每个部分都可以给我一些内容呢?

–abbood
17年11月19日在7:51

发布此答案的用户与该用户之间有什么关系?我敢打赌他们来自同一个“用户” ...如果是的话,请合并两个帐户...

– Pierre.Vriens♦
17年11月19日在10:49



#2 楼

使用aws代码部署,此设置对我而言非常理想: