来自第Rancher
介绍
有效的持续集成(CI)是任何成功开发团队的核心要求。 因为CI不是一线服务,它经常运行在Mesosphere或多余的硬件上。 添加构建的pull请求,自动化部署,验收测试,内容上传和大量的其他任务可以迅速压倒构建机器的资源 - 特别是在接近启动时,有很多提交和部署活动。
在本文中,我们将使用Docker构建一个分布式构建系统来创建和运行Jenkins图像,并使用Rancher来编排我们的Docker集群。 Jenkins是最突出的开源CI解决方案之一。 Docker自动化软件容器中的应用程序部署,Rancher为生产中的Docker管理提供了一个完整的平台。
本文涵盖了一个完全基于云的Jenkins部署。 然而,另一种方法是使用内部Jenkins主机与云服务器,以提供溢出容量,当需要更多的资源。 这是Docker和Rancher真正闪耀的地方:Docker在任何节点上为我们提供了几乎相同的部署环境,Rancher允许我们将来自各种云提供商或内部服务器的节点组合到通过其自身VPN运行的单个集群中。 在本教程结束时,您应该能够轻松地使用任意数量的从属设置Dockerized Jenkins部署。
先决条件
本教程将使用总共三个Droplet:一个用于Rancher服务器,一个用于运行Jenkins主节点的Rancher计算节点,一个用于运行Jenkins从节点的第二Rancher计算节点。
我们将把这些Droplet的IP地址your_rancher_server_ip
, your_jenkins_master_ip
和your_jenkins_slave_ip
分别; 无论您在本教程中看到这些变量,请将其替换为相应的IP地址。
最初,我们将为Rancher服务器创建一个Droplet; 将在稍后的步骤中描述两个计算节点的创建。 因此,要开始本教程,您将需要:
- 一个Ubuntu 14.04 Droplet与Docker 1.5.0镜像。 因为这个Droplet将专门用作Rancher服务器,您可以选择小的Droplet大小。
你可以找到Droplet创建页面上Docker1.5.0图像选项,下选择图片 应用程序选项卡。 此Droplet还将需要自定义用户数据。 要添加此,请单击启用在可用设置部分用户数据 ,并在下面输入在出现的文本框中输入脚本。 这个脚本告诉Droplet在启动时运行Rancher服务器。
#!/bin/bash
docker run -d --name rancher-server -p 8080:8080 rancher/server
第1步 - 配置认证
一旦你的Rancher服务器创建,片刻后你就可以访问通过浏览器它的UI指出http:// your_rancher_server_ip :8080/
。 因为Rancher服务器对因特网是开放的,所以建议进行身份验证是个好主意。 在此步骤中,我们将设置基于Github OAuth的身份验证,这是Rancher当前支持的身份验证。
你会看到在右上角它说Access Control未配置后面的链接, 设置警告。 单击设置 ,并按照给那里注册Github上一个新的应用程序的说明,以及客户端ID和密钥复制到相应的文本字段。
当您完成,单击身份验证与Github上 ,然后授权在弹出窗口的应用程序 。 一旦你这样做,该页面将重新加载,并设置OAuth的指令将被配置授权部分进行更换。 添加应该允许访问Rancher的任何其他用户和组织。 如果你做任何改动,一个按钮,读取保存授权配置将出现。 完成后点击它。
一旦保存授权配置,在右上角的警告应该由你的Github上个人资料图片和项目选择菜单(最初表示默认值 )来代替。 单击默认打开项目选择菜单,然后单击管理项目 ,并最终创建一个项目 。 添加一个名为Jenkins的项目,然后再次使用项目选择菜单选择Jenkins项目。
这将有助于保持您的Rancher界面整洁,保持在Rancher上运行的各种项目孤立。 如果要在同一Rancher集群上运行Jenkins之外的其他服务,您可以创建其他项目(需要额外的计算节点)。 还要注意,默认项目特定于登录用户,因此如果您打算授予多个人访问您的Rancher代理,您不应该使用默认项目。
第2步 - 注册Rancher计算节点
现在服务器和身份验证已设置,我们可以注册一些计算节点以运行我们的Jenkins部署。
注 :在认证,Rancher计算节点无需提供注册标记注册。 但是,因为我们已启用身份验证,所有代理必须提供要添加到群集的注册令牌。
在RancherUI,点击主机 (在左边的菜单),然后注册一个新的主机 。 从弹出的窗口中复制Docker运行命令,然后关闭窗口。 返回到DigitalOcean控制面板,使用Docker 1.5.0图像创建两个额外的Droplet,就像Rancher服务器。 如果您的构建是资源密集型的,您可能希望为这两个Droplet选择更大的实例大小。
对于在这两个Droplet的用户数据,添加#!/bin/bash
其次Docker运行前面复制命令。 它应该看起来类似这一点。
#!/bin/bash
sudo docker run -d --privileged
-v /var/run/docker.sock:/var/run/docker.sock rancher/agent
http://your_rancher_server_ip:8080/v1/scripts/A2DE06535002ECCAAFCD:1426622400000:iniUzPiTnjyFaXs9lCKauvoZOMQ
长字符串的数字和字母在结尾将是不同的命令。 请确保您点击注册一个新的主机 ,因为令牌是对每一个项目的独特之前已经选择项目。
几分钟后,您应该可以在Rancher UI中看到两个Rancher计算节点。 你会看到你的Droplet的名字在那里说RancherAgent如下图所示。
第3步 - 启动Jenkins主节点
我们现在准备使用官方Jenkins图像启动Jenkins主节点。
要启动容器,单击添加容器要使用,并添加以下选项计算节点下:
- 使用主作为容器名称,在旁边的文本框中的名称 。
- 使用Jenkins作为源图像,在旁边的文本框中选择图片 。
接下来,单击+旁边的端口映射 。 在两个字段中填入8080,并保留TCP作为协议。 这将让我们访问Jenkins的Web UI。 再次单击+并在这两个领域中添加端口50000,并保留TCP作为协议。 这允许从站可以连接到主站。
下一步,单击高级选项 ,然后卷选项卡。 单击+旁边的卷 ,并指定/var/jenkins_home
在出现的文本框中。 在卷中使用Jenkins主目录可以在重新启动容器时保留配置,还允许使用另一个容器功能中的卷备份容器。
最后,单击创建开始您的Jenkins容器。
第4步 - 启动Jenkins从节点
在这一步中,我们将启动Jenkins从服务器。
在浏览器中http:// your_jenkins_master_ip :8080
加载UIJenkins。
在JenkinsUI,通过浏览的下一菜单管理Jenkins在左边,然后管理节点创建一个节点配置,并在最终的页面左侧最后新节点 。 在接下来的菜单,输入在文本框中旁边节点名你的Minion的名称(记住-我们会再次使用它在某一时刻),选择哑Minion作为类型,然后单击确定 。
您将被重定向到包含有关此节点的详细信息的页面。 对于远程根目录 ,键入/var/jenkins
。 发射方法 ,选择通过Java Web Start启动从代理商 。 您可能还需要更新执行人设定为比其1默认增加并行数较高的#允许建立在从服务器上。 其余设置可以保留为其默认值。 单击保存以提交从配置。
我们现在准备发射我们的Minion容器。 在Rancher用户界面,单击添加容器其余计算节点上,并添加以下选项:
- 使用Minion1作为容器名称,在名称旁边的文本框中。
- 使用乌斯曼/Jenkins-从作为源图像,旁边的选择图像的文本框。
然后单击高级选项 。 您可以在命令选项卡中开始了。 单击+旁边的环境瓦尔和添加具有名称为一个条目MASTER_HOST
和值 your_jenkins_master_ip
。 再次单击+,并添加与名称为另一个入口NODE
和值中的新节点菜单通过JenkinsUI早些时候在这一步中指定的你Jenkins的Minion的名字。
接下来,单击卷选项卡。 单击+旁边的卷 ,并指定/var/jenkins
在出现的文本框中。
最后,单击创建 。
该jenkins-slave
容器将下载从Jenkins主jar文件并运行Jenkins从节点。 当从出现时,你应该能够看到令人耳目一新的管理节点页面,在这里我们在UIJenkins离开后的状态。 您应该看到您的从节点具有响应时间值,并且在计算机图标上没有红色X,如下所示。
结论
在本文中,我们使用Docker和Rancher设置了Jenkins C1部署。 我们的Jenkins集群现在准备进一步配置和创建作业。
Docker为我们提供了一个一致的环境来运行Jenkins,Rancher提供了主机之间的网络连接,允许我们从Web UI中管理集群,而无需手动访问Droplet或调配服务器。 使用这个工具集,我们能够快速扩展我们的构建系统资源。 这对于在诸如发射的关键时刻保持不引人注意的构建系统是至关重要的。