标签: devops

Jenkins - (私有子网)WebHook与Github不会触发自动构建

问题:

我正在进行CI设置以配置github - Jenkins web钩子,用于在github上使用代码提交触发构建.以下是当前配置详细信息

  • 我的Jenkins位于AWS私有子网内
  • 我有插件:"GitHub Web Hook"配置了API URL,用户名和OAuth令牌,Test Credentials给出了成功消息.
  • 我在"构建触发器"下选择"在将更改推送到GitHub时构建"

Jenkins的工作与手动构建完美配合.但是当在github上完成代码提交时,它不起作用(自动构建触发器).

需要帮助:

  1. 我如何详细调试这种情况,如果"Git hub webhook"配置测试有效,我可以说git hub能够连接到我的Jenkins私有或它做其他测试吗?
  2. 请纠正/指导步骤以使其正常工作

git continuous-integration github jenkins devops

6
推荐指数
1
解决办法
2578
查看次数

使用saltstack创建AWS EC2实例映像?

有没有人尝试使用saltstack创建AWS AMI(图像).

我尝试使用它能够从现有的AMI创建新实例,但如何使用salt-cloud创建图像?

也尝试使用boto_ec2,但它给出了模块'boto_ec2'不可用的错误.

amazon-ec2 amazon-web-services salt-stack devops salt-cloud

6
推荐指数
1
解决办法
370
查看次数

在具有哨兵的AWS上设置Redis HA - 不同哨兵看到的redis节点最终无限循环

我们的设置

  • 每个AWS Sydney AZ上有3个redis哨兵一个
  • 具有主服务器和多个从服务器的2到500个redis节点,可使用AWS自动扩展组策略自动水平扩展
  • 1x写入将流量推送到主站的ELB
  • 1x读取将流量推送到从站的ELB
  • 1x Sentinel ELB将流量推送到哨兵
  • 1x辅导员(更多关于这个波纹管)

此设置在两个集群中复制,用于称为元数据缓存.我们想要部署更多集群.

主持人

是我们构建的python守护程序,它订阅了sentinels pub/sub并侦听+ switch-master消息.以下是协调人采取的行动:

  1. 检测并主控+ switch-master触发的故障转移
  2. 使用查询新主服务器的标记 SENTINEL get-master-addr-by-name mymaster
  3. 使用RedisClusterNodeRole = slave标记旧主服务器
  4. 使用RedisClusterNodeRole = master标记新的master
  5. 在我们的写ELB中添加新的master
  6. 从我们的阅读ELB中删除新的主人
  7. 从写ELB中删除旧主人
  8. 尝试将旧主服务器添加到我们的读取ELB中(如果服务器已关闭,这将失败,这很好)

问题

因为奴隶每天可以根据交通进出多次,所以我们最终会遇到属于同一个奴隶争夺同一奴隶的哨兵的一些奴隶.这是因为IP池在集群之间共享,并且据我们所知,从属ID是它们的IP.

这是复制的方法:

  1. 群集缓存具有IP 172.24.249.152的主服务器
  2. 群集缓存具有主故障转移提升从站,主机为IP 172.24.246.142.IP 172.24.249.152的节点现已关闭
  3. 群集元数据向上扩展,DHCP分配IP 172.24.249.152(群集缓存上的先前主服务器)
  4. 群集缓存将看到它的先前主服务器现在已启动,并将尝试将其重新配置为172.24.246.142(缓存群集上的新主服务器)的slave
  5. 簇的元数据将触发上的+ SDOWN 172.24.246.142和一段时间后接着是+从属可重新-发送给它的尝试重新配置它作为元数据群集从属一个-sdown
  6. 群集缓存将尝试执行与群集元数据在第5点上执行的操作相同的操作.

哨兵陷入无休止的循环中,永远为这种资源而战.即使我们只有一个哨兵小组管理具有不同主名称的两个redis群集,这种情况也会发生.这使我们相信哨兵不了解不同群集之间的资源,而只是分别对每个群集执行合乎逻辑的操作.

解决方案我们试过

  1. 触发a SENTINEL reset mymaster+ sdown事件后,尝试让哨兵忘记该节点.问题是,如果该集群正在执行主故障转移,它可能会生成竞争条件.我们成功地复制了这个假设,并且让哨兵不同步,其中一个指向一个主人,另外两个指向另一个.
  2. 将网络分成每个群集一个IP池.这是有效的,因为IP不会被重用,但是当我们需要一个新的集群时,它也会使事情变得更加灵活和复杂.这是我们最终要解决的问题,但我们希望尽可能避免这种情况.

理想的解决方案

  1. Redis哨兵提供SENTINEL removeslave 172.24.246.142 mymaster我们可以在每次有奴隶的+ sdown事件时运行.这将使该群集忘记那个奴隶曾经存在而不会产生副作用SENTINEL reset …

amazon-web-services redis autoscaling redis-sentinel devops

6
推荐指数
0
解决办法
862
查看次数

如何让容器在没有链接和端口映射的情况下在ECS中相互通信?

我没有找到解决单独任务定义中的两个容器可以相互通信的解决方案。因此,我按照答案将两个容器链接到相同的任务定义中,效果很好。首先感谢您的回答。

但是,当我阅读 ECS 文档时,发现以下段落让我感到困惑:

并置在单个容器实例上的容器可能无需链接或主机端口映射即可相互通信。使用安全组和 VPC 设置在容器实例上实现网络隔离。

但我无法找到如何实现这一目标的进一步文档。我知道 docker 社区尝试使用--network并弃用--link. 我不确定 AWS 是否会进行一些更改以某种方式启用这些功能。

有人可以帮助我了解如何实现这一目标吗?因为容器名称和 IP 总是由 ECS 动态分配,如果在没有链接和端口映射的不同任务定义中,我如何从一个容器到另一个容器通信?

containers amazon-ecs docker devops

6
推荐指数
1
解决办法
4724
查看次数

docker 和 php:将依赖项(composer)放入容器中

一点背景:我是 docker 新手,还不知道任何最佳实践。我的任务是创建一个基于 php 的网络服务,我决定使用 docker-compose 进行配置。

因为我们都是优秀的开发人员,所以我们知道 - 现在没有使用 Composer 构建 php 应用程序的方法。

我的问题:

我应该在构建中安装依赖项吗?因此,通过将其添加到我的 Dockerfile 中:

RUN cd /app && composer install --no-interaction --prefer-source --optimize-autoloader
Run Code Online (Sandbox Code Playgroud)

或者我应该在开发过程中安装依赖项并构建包含依赖项的容器映像?


我只知道一种不这样做的方法:在开发机器上本地安装依赖项,然后构建容器。但是“最佳实践”会是什么样子呢?

而且 - 因为我是这个领域的新手 - 我将如何为我的应用程序服务容器运行“composer require some/package”?

顺便一提

我还注意到一条消息“不要以 root/超级用户身份运行 Composer!” 在构建容器时。我添加COMPOSER_ALLOW_SUPERUSER=1到我的 Env 文件(如这里所示),但此消息仍然出现。

是否可以不在 docker 容器中以 root 身份执行 composer install?我可以忽略该消息吗?

提前致谢,菲利普

php composer-php docker docker-compose devops

6
推荐指数
2
解决办法
4540
查看次数

在微服务环境中提供静态文件?

为部署在微服务架构(生产中)中的应用程序提供静态文件的首选方式是什么?

为简单起见,假设我有 3 个应用程序服务器和一个将请求转发到这些服务器的负载平衡器。

  • 负载平衡器是否应该存储文件并根据要求立即提供它们?或者..
  • 负载平衡器是否应该将静态文件请求转发到不同的应用程序实例(每个请求到不同的实例)?

是否有最佳实践?

system-design microservices devops

6
推荐指数
1
解决办法
813
查看次数

我应该如何将应用程序配置放入我的 Docker 容器中?

我阅读了以下关于“如何将应用程序配置导入到我的 Docker 容器中?”的文章。 https://dantehranian.wordpress.com/2015/03/25/how-should-i-get-application-configuration-into-my-docker-containers/

它总结了 4 个与 2015 年相关的选项。简而言之:

  1. 将配置烘焙到容器中

  2. 通过环境变量动态设置应用程序配置

  3. 通过环境变量动态设置应用程序配置(使用外部 kv 存储)

  4. 通过 Docker Volumes 直接映射配置文件

我想知道现在这些选项是否仍然是唯一可行的,或者是否有任何新的选项/模式可以做到这一点?

谢谢。

configuration docker devops

6
推荐指数
1
解决办法
1424
查看次数

多个 Pod 的单一服务

我有 9 个 pod 正在运行,它们基本上是 9 个不同的应用程序。

是否可以为多个 pod 使用相同的 k8s 服务(LB | 公共 IP),以便我可以通过不同的端口访问它们,但服务的 IP 相同(LB)?

例如像这样:
LB-IP:80 -- 在后端,一个应用程序正在运行,我可以访问它。
LB-IP:8080(与之前的 IP 相同)——我将在后端运行另一个 pod。

**** 每个 pod 的选择器都不同。**

google-cloud-platform kubernetes devops

6
推荐指数
1
解决办法
4236
查看次数

Maven Release Plugin自增自定义格式版本

我希望能够通过在 Maven 发布插件 ( mvn -B release:prepare) 中使用非交互模式来自动增加 Java 项目的发布版本。但是我不想使用默认的 Maven 版本控制架构。

我想使用的架构是<major>.<minor>.<bugfix>-SNAPSHOT. 我确实设法在 pom 文件中执行此操作,但是 Maven 尝试按如下方式增加它:

1.0.0-SNAPSHOT
1.0.1-SNAPSHOT
1.0.2-SNAPSHOT
...
Run Code Online (Sandbox Code Playgroud)

但是我希望能够对此进行控制,虽然有时我确实有错误修正并且上述增量工作,但大多数时候我想发布次要版本,因此增量看起来像这样:

1.0.0-SNAPSHOT
1.1.0-SNAPSHOT
1.2.0-SNAPSHOT
...
Run Code Online (Sandbox Code Playgroud)

java continuous-integration maven devops

6
推荐指数
1
解决办法
7096
查看次数

如何在从单片架构到微服务架构的过渡之间管理多个登台环境

我的公司最近着手将平台架构从单片架构更改为微服务架构。整个迁移可能要花费数年,所以到现在为止,我们仍然需要维护当前的整体应用程序,同时缓慢地拆除该应用程序。

我们暂时通过面向服务的体系结构为某个模块(其中数据库仍连接到单体应用程序的数据库)拆除了单体应用程序,而另一些则直接过渡到微服务(如果适用,微服务拥有自己的数据库)。

我们会随时准备发布功能,而不是遵循发布窗口。每个团队都有自己的阶段来管理该阶段,因此我们有多个阶段环境(总共11个),每个阶段都有自己的一组遗留的整体应用程序。

在此处输入图片说明

在过渡到微服务架构时(虽然我了解到,当我们完全过渡到微服务架构时,整个公司只有1个阶段),我们将需要维护所有这些阶段,这意味着我们将需要拥有一个阶段的副本。每个登台环境中的微服务。

在此处输入图片说明

(并不是要在此解决方案的方向上指导答案。如果在其他方向上有任何答案,则更可取,因为我们可以有更多选择和变化来考虑利弊),我们的想法之一是针对每个问题在db中,我们还有另外一列来标记此数据行用于哪个阶段。因此,我们可以维护1个微服务的单个实例以进行多个阶段。问题在于,对于每个API调用,客户端都需要指定用于哪个阶段。这使每个服务的开发变得复杂(需要满足要筛选的登台数据库的需求),使端点更难以调用(因为您需要指定需要访问的登台数据库)),更重要的是,这些是多余的代码,这些代码在生产中应该没有。

我们面临的问题是,随着微服务数量的增长,这将占用大量服务器资源(我们决定使用本地服务器来托管我们的kubernetes和Proxmox VM来保留传统的整体组件)。是否有任何基础架构可以减少为此所需的资源

architecture microservices devops

6
推荐指数
1
解决办法
302
查看次数