如何在Ubuntu16.04上安装和配置GoCD
介绍
GoCD 是一个强大的持续集成和交付平台,旨在自动化测试和发布过程。 GoCD 具有许多高级功能,例如比较构建、可视化复杂工作流程和自动化构建版本跟踪的能力,是一种灵活的工具,可以帮助团队将经过良好测试的软件交付到生产环境。
在本指南中,我们将演示如何在 Ubuntu 16.04 上设置 GoCD 服务器。 我们将使用项目提供的包安装服务器和代理以完成 CI/CD 工作。 之后,我们将配置身份验证并修改一些基本选项来设置我们的服务器。
先决条件
根据 GoCD 项目 的建议,您需要一个 Ubuntu 16.04 服务器,具有 至少 2G 的 RAM 和 2 个 CPU 内核 来完成本指南。 此外, 为了在不损坏数据的情况下处理构建工件,您的服务器将需要一个专用分区或磁盘作为工件存储位置。 在本指南中,我们将使用 /mnt/artifact-storage
作为工件存储的挂载点:
- 如果您使用 DigitalOcean 作为服务器主机,则可以使用块存储卷作为工件存储位置。 按照本指南了解 如何配置、格式化和安装 DigitalOcean 块存储卷 。
- 如果您 不是 使用 DigitalOcean,请按照本指南学习 如何在通用主机 上分区、格式化和挂载设备。
一旦您的服务器配置了在 /mnt/artifact-storage
上安装的附加存储,请按照我们的 Ubuntu 16.04 初始服务器设置指南 设置具有 sudo
权限的非 root 用户并启用基本防火墙。 完成这些步骤后,请继续阅读本指南。
安装 GoCD 服务器和代理
我们将首先从 GoCD 项目提供的专用存储库下载和安装服务器和代理程序包。
首先,我们通过键入以下命令将新的存储库定义添加到 APT 源配置目录:
echo "deb https://download.gocd.org /" | sudo tee /etc/apt/sources.list.d/gocd.list
我们还需要将 GoCD GPG 密钥添加到 APT,以便可以验证 GoCD 包上的签名。 您可以通过键入以下内容下载密钥并将其添加到系统中:
curl https://download.gocd.org/GOCD-GPG-KEY.asc | sudo apt-key add -
现在我们可以更新本地包索引以下拉新包列表并安装软件。 GoCD 需要 Java 8 才能运行,因此我们将安装 default-jre
软件包以及 CI 服务器和代理。 我们还将安装 apache2-utils
包,我们将使用它来生成身份验证文件:
sudo apt-get update sudo apt-get install default-jre go-server go-agent apache2-utils
依赖项和持续集成软件将被下载并安装在服务器上。
准备 GoCD 以供首次使用
在我们启动 GoCD 服务器之前,我们将在命令行上完成一些任务以做好准备。
首先,我们需要确保 GoCD 进程可以访问工件挂载点,以便它可以在那里存储资产。 CI 服务器将以 go
用户和组的身份运行,因此我们可以相应地分配 /mnt/artifact-storage
挂载点的所有权:
sudo chown -R go:go /mnt/artifact-storage
接下来,我们将为身份验证信息创建并填充密码文件。 GoCD 的 基于文件的身份验证插件 使用由 htpasswd
实用程序创建的用户身份验证格式。
下面命令中的 -B
选项选择 bcrypt
加密算法。 -c
选项告诉 htpasswd
在指定的路径创建一个新的身份验证文件。 该命令以我们要为其创建密码的用户名结尾。 此用户名与操作系统的用户完全分开,因此您可以使用任何您想要的值:
sudo htpasswd -B -c /etc/go/authentication sammy
系统将提示您输入并确认新用户的密码。 用户名和密码的加密版本将写入文件:
OutputNew password: Re-type new password: Adding password for user sammy
注意:您可以在文件中添加多个用户名和密码组合以允许额外的登录。 但是,在添加第一个用户后,您需要调用 htpasswd
命令而不使用 -c
选项:
sudo htpasswd -B /etc/go/authentication next_user
在第一个用户之后使用 -c
选项将导致 htpasswd
替换所有现有凭据,而不是添加到它们。
获得身份验证文件后,我们可以启动 GoCD 服务器和代理进程。 这可能需要一段时间才能完成:
sudo systemctl start go-server go-agent
即使在命令退出后,该进程也不会完全启动并运行。 首先,检查服务是否启动成功:
sudo systemctl status go-*
如果您的输出看起来与此类似,则两个进程均由 systemd 初始化:
Output● go-agent.service - LSB: Go Agent Loaded: loaded (/etc/init.d/go-agent; bad; vendor preset: enabled) Active: active (exited) since Thu 2017-07-27 19:39:18 UTC; 1min 36s ago Docs: man:systemd-sysv-generator(8) Process: 8911 ExecStart=/etc/init.d/go-agent start (code=exited, status=0/SUCCESS) . . . Jul 27 19:39:18 go5 systemd[1]: Started LSB: Go Agent. ● go-server.service - LSB: Go Server Loaded: loaded (/etc/init.d/go-server; bad; vendor preset: enabled) Active: active (exited) since Thu 2017-07-27 19:39:33 UTC; 1min 21s ago Docs: man:systemd-sysv-generator(8) Process: 8867 ExecStop=/etc/init.d/go-server stop (code=exited, status=0/SUCCESS) Process: 8907 ExecStart=/etc/init.d/go-server start (code=exited, status=0/SUCCESS) . . . Jul 27 19:39:33 go5 systemd[1]: Started LSB: Go Server.
接下来,我们应该等待服务绑定到端口 8153 和 8154。 GoCD 在第一个端口上监听 HTTP 流量,第二个端口监听受 HTTPS 保护的流量。 虽然这些过程已经完成,但它们可能还没有开始接受网络流量。
通过键入以下内容来密切注意当前正在侦听哪些端口:
sudo watch netstat -plnt
这将检查侦听的 TCP 端口并每 2 秒更新一次屏幕。 当 GoCD 开始监听端口 8153 和 8154 时,屏幕应如下所示:
OutputEvery 2.0s: netstat -plnt Thu Jul 27 20:16:20 2017 Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1736/sshd tcp6 0 0 :::22 :::* LISTEN 1736/sshd tcp6 0 0 :::8153 :::* LISTEN 8942/java tcp6 0 0 :::8154 :::* LISTEN 8942/java
显示这些监听端口后,点击 CTRL-C 退出进程监视器。
现在软件已经完全启动并运行了,我们可以在 UFW 防火墙中打开 GoCD 的 HTTPS 端口(端口 8154)。 我们不需要打开 HTTP 端口,因为我们希望所有连接都是安全的:
sudo ufw allow 8154
警告: 一旦端口 8154 打开,GoCD 网络界面将可在所有界面上访问。 虽然我们已经准备好通过使用 htpasswd
命令创建 /etc/go/authentication
文件来锁定界面,但目前在 GoCD 中未启用密码验证。 这是我们将在下一节中配置的第一项,您应该尽快完成该步骤以保护您的 CI/CD 服务器。
我们的服务器现已启动并运行。 我们将连接到 Web 界面以继续我们的配置。
设置密码验证
初始化 GoCD 服务器组件并侦听连接后,我们的防火墙允许连接,我们可以在 Web 浏览器中连接到服务。
在您的浏览器中,指定 https://
协议,后跟服务器的域名或 IP 地址,并以 :8154
端口规范结尾:
https://server_domain_or_IP:8154
您的浏览器可能会显示一条警告,表明该服务的 SSL 证书未由受信任的证书颁发机构签名:
由于 GoCD 自签名其证书,这是预期的行为。 单击 ADVANCED 或浏览器中可用的任何类似选项,然后选择继续处理请求。
当您最初连接 GoCD 时,您将被带到管道定义屏幕。 与其立即定义管道,不如优先使用我们之前使用 htpasswd
创建的密码文件启用身份验证。 点击顶部导航菜单中的ADMIN,然后在Security子菜单中选择Authorization Configuration:
在接下来的页面中,点击右上角的【X36X】添加【X43X】按钮。 将出现一个屏幕,您可以在其中填写身份验证提供商的详细信息。
首先,在 Id 字段中输入新授权方法的任意名称。 将 Plugin Id 选项设置为“GoCD 的密码文件验证插件”。 最后,在密码文件路径框中,输入/etc/go/authentication
,我们用htpasswd
创建的文件。 完成后,点击检查连接,确保GoCD可以正确访问文件:
如果 GoCD 显示“Connection OK”消息,单击保存 以实施新的认证。
您将被要求使用新方案进行身份验证。 这可能会在第一次显示为标准浏览器登录框,或者您可能会被重定向到 GoCD 登录页面。 使用您配置的用户名和密码登录:
您的 GoCD 安装现在受密码保护,以防止未经授权的访问。
设置站点 URL 和工件位置
现在 Web 界面已得到适当保护,我们可以通过 Web UI 完成 CI 服务器的配置。
重新登录Web界面后,单击顶部菜单中的ADMIN,然后从下拉菜单中选择服务器配置:
您将被带到主配置页面,我们可以在其中调整一些设置。
我们应该查看的第一项是页面的 服务器管理 部分中的 站点 URL。 GoCD 提供了两个设置来确定 CI 服务器 URL:“站点 URL”和“安全站点 URL”。 “站点 URL”是大多数情况下使用的默认站点 URL。 当常规“站点 URL”配置为使用 HTTP 并且 GoCD 需要传输敏感数据时,使用“安全站点 URL”。 如果“站点 URL”使用 HTTPS 地址,则所有连接都被加密,不需要设置“安全站点 URL”。
由于我们只允许通过防火墙访问 HTTPS 端口,我们将使用 https://
协议说明符填写 Site URL,然后是我们的服务器的域或 IP 地址,然后是 [ X205X]。 我们将 Secure Site URL 留空,因为我们的正常 URL 已经是安全的:
接下来,向下滚动到页面的 Pipeline Management 部分。 将 Artifacts Directory Location 设置为我们之前创建的 /mnt/artifact-storage
挂载点。 如果您希望 GoCD 自动管理工件保留,您可以选择调整工件删除策略。 将其保留为“从不”以手动管理工件:
完成后,单击页面底部的 SAVE 按钮以实施您的更改。
您可能会注意到顶部菜单栏中的警告:
单击警告指示器将向您显示完整的警告消息,告诉我们 GoCD 在重新启动之前不会使用 /mnt/artifact-storage
位置。
点击 X 退出警告信息。
在我们重新启动服务器之前,让我们检查一下我们的代理是否已成功注册到服务器。 单击顶部菜单中的 AGENTS 项。 您将被带到代理列表:
我们启动的代理进程已成功注册到服务器,其状态设置为“空闲”。 这意味着启用了代理,但没有分配任何工作,这是我们所期望的。
现在我们已经确认我们的代理存在,我们可以重新启动 GoCD 服务器进程以完成工件位置更改。 返回命令行,键入以下内容重新启动服务:
sudo systemctl restart go-server
一旦服务重新启动并继续侦听端口 8154 上的连接,您将能够重新连接到 Web UI。
结论
在本指南中,我们安装并配置了在 Ubuntu 16.04 上运行的 GoCD 服务器和代理。 我们在单独的分区上设置了一个专用的工件存储空间来处理生成的构建资产和配置的身份验证以保护 Web 界面。
GoCD 启动并运行后,下一步是使用受信任的 SSL 证书保护您的安装。 请按照我们关于 如何使用 Let's Encrypt SSL 证书 配置 GoCD 的指南来了解如何进行设置。