如何在Ubuntu14.04上使用Rancher管理Jenkins
Rancher的一篇文章
介绍
有效的持续集成 (CI) 是任何成功的开发团队的核心要求。 因为 CI 不是一线服务,它通常在中间层或多余的硬件上运行。 为拉取请求、自动部署、验收测试、内容上传和许多其他任务添加构建可能会很快使构建机器的资源不堪重负——尤其是在接近启动时,当有大量提交和部署活动时。
在本文中,我们将构建一个分布式构建系统,使用 Docker 来创建和运行我们的 Jenkins 镜像和 Rancher 来编排我们的 Docker 集群。 Jenkins 是最著名的开源 CI 解决方案之一。 Docker 在软件容器中自动部署应用程序,而 Rancher 提供了一个完整的平台来管理生产中的 Docker。
本文介绍了一个专门基于云的 Jenkins 部署。 但是,另一种方法是使用内部 Jenkins 主服务器和云服务器,以便在需要更多资源时提供溢出容量。 这就是 Docker 和 Rancher 真正闪耀的地方:Docker 在任何节点上为我们提供了几乎相同的部署环境,而 Rancher 让我们可以将来自各种云提供商或内部服务器的节点组合成一个在其自己的 VPN 上运行的单个集群。 在本教程结束时,您应该能够轻松设置具有任意数量从属设备的 Dockerized Jenkins 部署。
先决条件
本教程将总共使用三个 Droplet:一个用于 Rancher 服务器,一个用于运行 Jenkins 主节点的 Rancher 计算节点,另一个用于运行 Jenkins 从节点的第二个 Rancher 计算节点。
我们将分别用 your_rancher_server_ip
、your_jenkins_master_ip
和 your_jenkins_slave_ip
来引用这些 Droplet 的 IP 地址; 在本教程中,无论您在哪里看到这些变量,都将它们替换为适当的 IP 地址。
最初,我们将为 Rancher 服务器创建一个 Droplet; 两个计算节点的创建将在后面的步骤中介绍。 因此,要开始本教程,您将需要:
- 一个带有 Docker 1.5.0 映像的 Ubuntu 14.04 Droplet。 由于此 Droplet 将专门用作 Rancher 服务器,因此您可以选择较小的 Droplet 大小。
您可以在 Droplet 创建页面的 Applications 选项卡中找到 Docker 1.5.0 镜像选项,在 选择镜像 下。 此 Droplet 还需要自定义用户数据。 要添加此内容,请单击 可用设置 部分中的 启用用户数据,然后在出现的文本框中输入以下脚本。 该脚本告诉 Droplet 在启动时运行 Rancher 服务器。
#!/bin/bash docker run -d --name rancher-server -p 8080:8080 rancher/server
第 1 步 — 配置身份验证
创建 Rancher 服务器后,您将能够通过指向 http://your_rancher_server_ip:8080/
的浏览器访问其 UI。 由于 Rancher 服务器对 Internet 开放,因此设置身份验证是一个好主意。 在这一步中,我们将设置基于 Github OAuth 的身份验证,这是 Rancher 目前支持的。
您将在右上角看到一条警告,上面写着 未配置访问控制 ,然后是 设置 的链接。 点击 Settings 并按照那里的说明在 Github 上注册一个新的应用程序,并将 Client ID 和 Secret 复制到相应的文本字段中。
完成后,在弹出的窗口中点击【X23X】Authenticate with Github【X51X】,然后【X63X】Authorize application【X88X】。 完成后,页面将重新加载,设置 OAuth 的说明将替换为 Configure Authorization 部分。 添加应该被授予访问 Rancher 的任何其他用户和组织。 如果您进行任何更改,将出现一个显示保存授权配置的按钮。 完成后单击它。
保存授权配置后,右上角的警告应替换为您的 Github 配置文件图像和项目选择菜单(最初显示 Default)。 点击【X6X】默认【X17X】打开项目选择菜单,然后点击【X70X】管理项目【X89X】,最后【X108X】创建项目【X128X】。 添加一个名为 Jenkins 的项目,然后再次使用项目选择菜单选择 Jenkins 项目。
这将通过保持您在 Rancher 上运行的各种项目的隔离来帮助保持您的 Rancher 界面整洁。 如果您想在同一个 Rancher 集群上运行除 Jenkins 之外的其他服务,您可以创建额外的项目(这需要额外的计算节点)。 另请注意,默认项目是特定于登录用户的,因此如果您打算让多个人访问您的 Rancher 代理,则不应使用默认项目。
第 2 步 — 注册 Rancher 计算节点
现在服务器和身份验证都设置好了,我们可以注册一些计算节点来运行我们的 Jenkins 部署。
注意:在认证之前,Rancher计算节点可以在不提供注册令牌的情况下进行注册。 但是,因为我们启用了身份验证,所以所有代理都必须提供要添加到集群的注册令牌。
在 Rancher UI 中,点击 Hosts(在左侧菜单中),然后点击 Register a new host。 从弹出的窗口中复制 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 计算节点。 您将在下图中看到 RancherAgent 的 Droplet 的名称。
第 3 步 — 启动 Jenkins 主节点
我们现在准备好使用官方 Jenkins 镜像启动我们的 Jenkins 主节点。
要启动容器,请单击要使用的计算节点下的添加容器,然后添加以下选项:
- 使用 Master 作为容器名称,在 Name 旁边的文本框中。
- 使用 jenkins 作为源图像,在 旁边的文本框中选择图像。
接下来,点击Port Map旁边的+。 在两个字段中填写 8080,并保留 TCP 作为协议。 这将使我们能够访问 Jenkins Web UI。 再次单击 +,在两个字段中添加端口 50000,并保留 TCP 作为协议。 这允许从站可以连接到主站。
接下来,单击 高级选项 ,然后单击 卷 选项卡。 点击Volumes旁边的+,在出现的文本框中指定/var/jenkins_home
。 将 Jenkins 主目录放在一个卷中可以让您在重新启动容器时保留您的配置,并且还允许您使用来自另一个容器功能的卷来备份您的容器。
最后,点击 Create 来启动你的 Jenkins 容器。
第 4 步 — 启动 Jenkins 从属节点
在这一步中,我们将启动 Jenkins 从站。
将浏览器指向 http://your_jenkins_master_ip:8080
以加载 Jenkins UI。
在 Jenkins UI 中,通过浏览到左侧的 Manage Jenkins,然后在下一个菜单中的 Manage Nodes,最后在 New Node 上创建节点配置最后一页的左边。 在下一个菜单中,在 Node name 旁边的文本框中输入您的从站名称(记住它 - 我们稍后会再次需要它),选择 Dumb Slave作为类型,然后单击 OK。
您将被重定向到包含有关此节点的详细信息的页面。 对于 远程根目录 ,键入 /var/jenkins
。 对于启动方法,选择通过Java Web Start启动从代理。 您可能还希望将 # of executors 设置更新为高于其默认值 1,以增加从站上允许的并行构建数。 其余设置可以保留为默认值。 点击保存提交slave配置。
我们现在准备启动我们的从容器。 在 Rancher UI 中,点击剩余计算节点上的 Add Container,并添加以下选项:
- 使用 Slave 1 作为容器名称,在 Name 旁边的文本框中。
- 使用 usman/jenkins-slave 作为源图像,在 旁边的文本框中选择图像。
然后单击高级选项。 您将从 Command 选项卡开始。 单击 Environment Vars 旁边的 + 并添加一个条目,其中 Name 为 MASTER_HOST
和 Value 为 your_jenkins_master_ip
。 再次单击 + 并添加另一个条目,其中 Name 作为 NODE
和 Value 作为 [X158X 中指定的 Jenkins 从站的名称]New Node 菜单在此步骤的前面通过 Jenkins UI。
接下来,单击 卷 选项卡。 点击Volumes旁边的+,在出现的文本框中指定/var/jenkins
。
最后点击创建。
jenkins-slave
容器将从 Jenkins 主节点下载一个 jar 文件并运行一个 Jenkins 从节点。 当 slave 启动时,您应该能够在刷新 Manage Nodes 页面后看到它的状态,我们在 Jenkins UI 中离开的地方。 您应该看到您的从节点具有响应时间值,并且计算机图标上方没有红色 X,如下所示。
结论
在本文中,我们使用 Docker 和 Rancher 设置了 Jenkins CI 部署。 我们的 Jenkins 集群现在已准备好进行进一步配置和创建构建作业。
Docker 为我们提供了运行 Jenkins 的一致环境,而 Rancher 提供主机之间的网络连接,允许我们从 Web UI 管理集群,而无需手动访问 Droplet 或配置服务器。 使用这个工具集,我们能够快速地向上和向下扩展我们的构建系统资源。 这对于在启动等关键时刻维护不显眼的构建系统至关重要。