我想要一个Jenkins主从设置,用于在标准Rails应用程序(PostgreSQL,sidekiq / redis,RSPec,capybara-webkit,一个常见的Rails堆栈)上运行规范,使用docker,因此它也可以放在其他机器上。我有一些好的固定机器收集灰尘。
任何人都可以共享可执行的docker jenkins rails stack示例吗?
什么阻止这样做?
也适用于主从设置。
序: 经过几天在线,在几个教程没有成功之后,我即将放弃项目。我对docker,docker-machine,docker compose和volumes有了基本的了解,我得到了几个简单应用程序的docker注册表。
答案 0 :(得分:1)
我对Jenkins几乎一无所知,但我已经在其他CI平台上广泛使用了Docker。所以我只是写下这个。根据您应用的依赖性和怪癖,难度会有很大差异。我会尝试提供一个非常有用的大纲,并将处理应用程序的怪癖留给您。
我不认为您描述的问题应该要求您使用docker-machine
。 <{1}}和docker build
就足够了。
首先,您需要为您的应用程序构建一个图像。如果您的应用程序具有全面的docker-compose
,并且没有太多与基础架构等相关的依赖关系(例如,生活在应用程序没有为自己设置的特定位置的文件),那么您将拥有一个很容易的时间。如果没有,那么设置这些依赖项将变得复杂。这是来自Docker人员的一个guide的简单Rails应用程序,可帮助您入门。
构建映像后,将其推送到Docker Hub等存储库。登录Docker Hub并创建一个repo,然后使用Gemfile
和docker login
使其他计算机可以访问该图像。如果您想在一台计算机上构建映像并在其他计算机上进行测试,这将非常重要。
一旦构建并推送图像,在图像内运行应用程序的单元测试可能是值得的。这会让你早日失败并避免浪费宝贵的执行时间在一个错误的修订上:)
接下来,您需要满足应用程序的外部依赖关系,例如Redis和postgres。这就是Docker Compose文件的用武之地。使用它来指定应用程序所需的所有服务,以及为运行应用程序进行测试而设置的环境变量等(例如docker push <image-name>
)。
您可能会发现提供某些非必要服务(例如内存中缓存)的假货,或者完全将它们排除在外是有用的。这将降低您的设置的复杂性,并降低对CI系统的要求。
上面链接中的指南也有一个示例撰写文件,但您需要对其进行扩展。需要注意的最重要的事情是,您提供服务的名称(例如指南中示例中的RAILS_ENV
)将用作图像中的主机名。正如@tomwj建议的那样,你可以在Docker Hub上搜索像postgres和Redis这样的常见图像,并且很容易找到它们。您可能需要使用新的主机名等配置新的Rails环境,以便正确配置所有服务主机名。
您在这里从头开始创建所有服务,包括您的数据库,因此您需要在每次运行时迁移和播种它(以及任何其他数据存储)。因为您从一个空的postgres实例开始,所以需要花一些时间。作为一种快捷方式,您可以在迁移之前从先前版本还原备份。在任何情况下,您都需要做一些工作才能使您的数据存储成型,以便您的测试结果为您提供有用的信息。
其中一个棘手的问题是让Capybara在你的应用程序Docker镜像中运行,默认情况下它不会有任何X显示。 db
(X虚拟帧缓冲区)可以帮助解决这个问题。我还没有尝试过,但建立像this one之类的图像可能会有所帮助。
祝你好运。如果您有时间坚持下去,它将真正帮助您了解您的应用程序为了工作而真正依赖的内容。它确实对我和我的团队有用!
答案 1 :(得分:0)
解决这个问题需要解决很多问题,这是如何开始以及在哪里寻求帮助的指南。
总之,没有什么能阻止它,尽管设置相当复杂和定制。因此没有现成的解决方案。
假设您的目标是构建Jenkins,部署到Docker,然后在Dockerised环境中测试Rails应用程序。
我遗漏了Jenkins主/从配置,因为如果你只在一台机器上运行,你可以增加执行器的数量。例如。主人可以牺牲速度来执行更多的工作。