跳转到主要内容

在EC2中设置和管理Jenkins持续集成集群

项目描述

CGCloud Jenkins项目包含在EC2中运行分布式持续集成环境的角色,包含一个Jenkins主VM和多个从VM。Jenkins从机是一个被主机委托构建的任务机。从机按需启动,并在一定量的空闲时间后关闭。不同的从机角色是为设置具有特定Jenkins构建必要先决条件的从机VM的蓝图。

快速入门

激活cgcloud安装的虚拟env并安装cgcloud-jenkins

::

   cd
   virtualenv cgcloud
   source cgcloud/bin/activate
   pip install cgcloud-jenkins
   export CGCLOUD_PLUGINS="cgcloud.jenkins:$CGCLOUD_PLUGINS"

如果您收到DistributionNotFound: No distributions matching the version for cgcloud-jenkins,请尝试运行pip install --pre cgcloud-jenkins

运行cgcloud list-roles现在应该列出插件中定义的附加角色

...
jenkins-master
ubuntu-lucid-genetorrent-jenkins-slave
ubuntu-precise-genetorrent-jenkins-slave
ubuntu-saucy-genetorrent-jenkins-slave
ubuntu-trusty-genetorrent-jenkins-slave
centos5-genetorrent-jenkins-slave
centos6-genetorrent-jenkins-slave
fedora19-genetorrent-jenkins-slave
fedora20-genetorrent-jenkins-slave
ubuntu-lucid-generic-jenkins-slave
ubuntu-precise-generic-jenkins-slave
ubuntu-saucy-generic-jenkins-slave
ubuntu-trusty-generic-jenkins-slave
centos5-generic-jenkins-slave
centos6-generic-jenkins-slave
fedora19-generic-jenkins-slave
fedora20-generic-jenkins-slave
centos5-rpmbuild-jenkins-slave
centos6-rpmbuild-jenkins-slave
load-test-box
data-browser-jenkins-slave

主从角色

该插件定义了一个主角色(jenkins-master)和为运行特定构建CGL项目而设计的各种从角色。还有一些通用从机,它们没有被针对特定项目进行定制。

主角色(jenkins-master)是一个长期运行的盒子,托管Jenkins网络应用程序。Jenkins安装(代码和数据)被隔离在单独的jenkins用户的家目录中。实际上,该家目录位于一个独立生命周期于主机盒子的二级EBS卷上,即VM实例。这使得我们可以在不每次都从头设置Jenkins的情况下更新主机的操作系统。

剩余的角色定义了Jenkins从机。Jenkins从机是一个短生命周期的小盒子,主机可以通过SSH连接与它建立连接,用于触发远程构建。CGCloud Jenkins插件(本项目)用于创建虚拟机镜像并将其注册到主机,这样当需要在该从机提供的平台上运行远程构建时,主机可以启动从机实例。

Jenkins

Jenkins是一个运行在jenkins-master上的持续集成服务器/网络应用程序。Jenkins使用所谓的项目来定义源代码的获取位置、源代码的构建和测试方式以及要归档的构建工件。构建可以在推送时自动运行,也可以在固定的时间表或手动运行。构建由代理执行。代理可以在Jenkins主机的本地运行,也可以在一个或多个从机上的远程运行。Jenkins使用自己的插件系统来扩展和修改默认行为。我们使用EC2插件,该插件允许我们从由cgcloud与本项目一起创建的镜像中按需在EC2上创建从机。请注意CGCloud Jenkins与扩展Jenkins的数百个插件之间的区别。

Jenkins网络用户界面可以通过SSH隧道传输8080端口始终访问。运行cgcloud ssh jenkins-master设置必要的端口转发。在新的实例中,Jenkins本身禁用了授权和认证,但可以使用Jenkins插件启用和进一步自定义。注意:任何对主机有SSH访问权限的人都可以访问Jenkins并对它进行任何操作。

教程:创建持续集成环境

在本教程中,我们将创建一个由Jenkins主机和多个从机构成的持续集成环境。本教程假定您已完成了CGCloud README中的快速入门部分。

创建主机

创建Jenkins主机实例

cgcloud create jenkins-master

作为测试,使用管理用户SSH进入主机

cgcloud ssh -a jenkins-master
exit

管理用户具有sudo权限。其名称因平台而异,但cgcloud会为您跟踪。为了进一步测试,使用jenkins用户SSH进入主机

cgcloud ssh jenkins-master

这是Jenkins服务器运行的用户。

接下来,创建主机的镜像,以便您可以始终重新创建一个100%相同的克隆

cgcloud stop jenkins-master
cgcloud image jenkins-master
cgcloud terminate jenkins-master
cgcloud recreate jenkins-master

第一条命令是必要的,因为只有停止的实例才能创建镜像。image命令创建实际的AMI镜像。terminate命令处理实例。这将删除/分区,同时保留/var/lib/jenkins分区。后者存储在名为jenkins-data的单独EBS卷上。换句话说,terminate命令给我们留下了两样东西:1)主机的AMI和2)Jenkins数据卷。然后recreate命令从最近创建的镜像创建一个新的实例,并将jenkins-data卷附加到该实例。

创建从机

打开一个新的shell窗口并创建第一个从机

cgcloud list-roles
cgcloud create docker-jenkins-slave

SSH进入它

cgcloud ssh -a docker-jenkins-slave

请注意:

  • 管理用户具有sudo权限

    sudo whoami
  • Jenkins用户主目录中的构建目录是符号链接到临时存储

    sudo ls -l ~jenkins
  • 已安装git和docker

    git --version
    docker --version
    exit

现在停止、镜像和终止该盒子

cgcloud stop docker-jenkins-slave
cgcloud image docker-jenkins-slave
cgcloud terminate docker-jenkins-slave

最后,将所有从机注册到主机关

cgcloud register-slaves jenkins-master docker-jenkins-slave

“register-slaves”命令会在Jenkins的config.xml中添加一个部分,用于定义如何从我们刚刚创建的AMI中启动一个名为“docker-jenkins-slave”的EC2实例。奴隶描述还将奴隶与标签“docker”关联起来。如果项目定义要求在标记为“docker”的奴隶上运行,则会从AMI创建一个实例。一旦实例启动,Jenkins主服务器将通过SSH启动代理。最后,主服务器将要求代理为该项目运行构建。如果已存在标记为“docker”的奴隶,则将使用它而不是创建一个新的。您可以通过增加奴隶上运行的代理数量来自定义每个奴隶上可运行的并发构建数量。默认情况下,每个角色将启动一个奴隶,但您可以将Jenkins配置为在队列包含多个给定标签的构建时启动多个。

项目详情


发布历史 发布通知 | RSS订阅

下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解有关安装软件包的更多信息。

源分发

cgcloud-jenkins-1.6.0.tar.gz (24.5 kB 查看哈希值)

上传时间

构建分发

cgcloud_jenkins-1.6.0-py2.7.egg (59.0 kB 查看哈希值)

上传时间

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面