如何在 Ubuntu 16.04 上安装和配置 GoCD

介绍

GoCD是一个强大的连续集成和交付平台,旨在自动化测试和发布流程. 具有许多先进的功能,如比较构建,可视化复杂工作流程和自动构建版本跟踪,GoCD是一个灵活的工具,可以帮助团队为生产环境提供经过测试的软件。

在本指南中,我们将展示如何在Ubuntu 16.04上设置GoCD服务器,我们将安装服务器和代理来完成CI/CD的工作,使用项目提供的包。

前提条件

根据GoCD项目(https://docs.gocd.org/current/installation/system_requirements.html#gocd-server-requirements)的建议,您将需要一个Ubuntu 16.04服务器,具有至少2G的RAM和2个CPU核心,以完成本指南。 此外,(https://docs.gocd.org/current/installation/system_requirements.html#additional-requirements-for-gocd-server)您的服务器将需要一个专用分区或磁盘作为文物存储位置,我们将在本指南中使用/mnt/artifact-storage作为文物存储的安装点:

一旦您的服务器已配置为/mnt/artifact-storage的额外存储空间,请遵循我们的 Ubuntu 16.04初始服务器设置指南以设置具有sudo特权的非根用户,并启用基本防火墙。

安装 GoCD 服务器和代理

我们将从GoCD项目提供的专用存储库下载和安装服务器和代理包。

首先,我们将新的仓库定义添加到 APT 源配置目录中,键入:

1echo "deb https://download.gocd.org /" | sudo tee /etc/apt/sources.list.d/gocd.list

我们还需要向 APT 添加 GoCD GPG 密钥,以便可以验证 GoCD 包上的签名。您可以下载密钥并通过键入将其添加到您的系统中:

1curl https://download.gocd.org/GOCD-GPG-KEY.asc | sudo apt-key add -

现在我们可以更新本地包索引以下载新包列表并安装软件 GoCD 需要 Java 8 才能运行,所以我们将与 CI 服务器和代理一起安装 default-jre 包,我们还将安装 apache2-utils 包,我们将使用它来生成身份验证文件:

1sudo apt-get update
2sudo apt-get install default-jre go-server go-agent apache2-utils

依赖和连续集成软件将下载并安装在服务器上。

初次使用的GoCD的准备

在我们启动GoCD服务器之前,我们将完成命令行上的几个任务来准备。

首先,我们需要确保GoCD进程可以访问文物安装点,以便在那里存储资产。CI服务器将作为Go用户和组运行,因此我们可以相应地分配对/mnt/artifact-storage安装点的所有权:

1sudo chown -R go:go /mnt/artifact-storage

接下来,我们将创建并填写一个密码文件以获取身份验证信息。GoCD的 基于文件的身份验证插件使用htpasswd实用程序创建的用户身份验证格式。

下面的命令中的-B选项选择了bcrypt加密算法。-c选项告诉htpasswd在指定的路径上创建一个新的身份验证文件。命令以我们想要创建密码的用户名结束。

1sudo htpasswd -B -c /etc/go/authentication sammy

您将被要求输入并确认新用户的密码. 用户名和密码的加密版本将写入该文件:

1[secondary_label Output]
2New password:
3Re-type new password:
4Adding password for user sammy

<$>[注] :您可以将多个用户名和密码组合添加到文件中,以允许额外的登录。

1sudo htpasswd -B /etc/go/authentication next_user

在第一个用户之后使用-c选项将导致htpasswd取代所有现有身份证,而不是添加 <$>

一旦你有身份验证文件,我们可以启动GoCD服务器和代理流程,这可能需要一段时间才能完成:

1sudo systemctl start go-server go-agent

即使在命令输出后,该过程也不会完全启动和运行,首先,检查服务是否成功启动:

1sudo systemctl status go-*

如果您的输出看起来类似于此,则系统d 启动了这两个过程:

 1[secondary_label Output]
 2 go-agent.service - LSB: Go Agent
 3   Loaded: loaded (/etc/init.d/go-agent; bad; vendor preset: enabled)
 4   Active: active (exited) since Thu 2017-07-27 19:39:18 UTC; 1min 36s ago
 5     Docs: man:systemd-sysv-generator(8)
 6  Process: 8911 ExecStart=/etc/init.d/go-agent start (code=exited, status=0/SUCCESS)
 7
 8. . .
 9Jul 27 19:39:18 go5 systemd[1]: Started LSB: Go Agent.
10
11 go-server.service - LSB: Go Server
12   Loaded: loaded (/etc/init.d/go-server; bad; vendor preset: enabled)
13   Active: active (exited) since Thu 2017-07-27 19:39:33 UTC; 1min 21s ago
14     Docs: man:systemd-sysv-generator(8)
15  Process: 8867 ExecStop=/etc/init.d/go-server stop (code=exited, status=0/SUCCESS)
16  Process: 8907 ExecStart=/etc/init.d/go-server start (code=exited, status=0/SUCCESS)
17
18. . .
19Jul 27 19:39:33 go5 systemd[1]: Started LSB: Go Server.

接下来,我们应该等待服务连接到端口8153和8154。GoCD在第一个端口上收听HTTP流量,而第二个端口则收听HTTPS受保护的流量。

密切关注当前正在收听的端口,键入:

1sudo watch netstat -plnt

这将检查倾听的TCP端口,并每2秒更新屏幕.当GoCD开始倾听端口8153和8154时,屏幕应该是这样的:

1[secondary_label Output]
2Every 2.0s: netstat -plnt Thu Jul 27 20:16:20 2017
3
4Active Internet connections (only servers)
5Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
6tcp 0 0 0.0.0.0:22 0.0.0.0:*               LISTEN 1736/sshd
7tcp6 0 0 :::22                   :::*                    LISTEN 1736/sshd
8tcp6 0 0 :::8153                 :::*                    LISTEN 8942/java
9tcp6 0 0 :::8154                 :::*                    LISTEN 8942/java

一旦这些倾听端口显示,请按 CTRL-C 来退出进程显示器。

现在软件已经完全启动并运行,我们可以在UFW防火墙中打开GoCD的HTTPS端口(端口8154),我们不需要打开HTTP端口,因为我们希望所有连接都安全:

1sudo ufw allow 8154

<$>[警告] 警告: 打开端口 8154 后,GoCD Web 接口将在所有接口上可用。虽然我们已经准备通过创建htpasswd命令的/etc/go/authentication文件来锁定接口,但 GoCD 目前没有启用密码身份验证。这是我们将在下一节配置的第一个项目,您应该尽快完成此步骤,以确保您的 CI/CD 服务器安全。

我们的服务器现在正在运行,我们将连接到 Web 界面以继续我们的配置。

设置密码身份验证

随着GoCD服务器组件初始化并听取连接,以及我们的防火墙允许连接,我们可以在Web浏览器中连接到服务。

在您的浏览器中,指定https://协议,然后是您的服务器的域名或IP地址,并以:8154端口规格结束:

1https://server_domain_or_IP:8154

您的浏览器可能会显示一个警告,表示该服务的SSL证书不是由可信证书机构签署的:

Browser SSL warning

由于GoCD自动签署其证书,这是预期的行为. 点击 ADVANCED或在您的浏览器中可用的任何类似选项,然后选择继续请求。

当您最初连接到GoCD时,您将被带到管道定义屏幕上,而不是立即定义管道,我们应该优先使用我们先前用htpasswd创建的密码文件启用身份验证。

Select authorization config menu

在下面的页面上,点击右上角的 ** 添加 ** 按钮. 将出现一个屏幕,您可以填写您的身份验证提供商的详细信息。

首先,在 Id字段中输入新的授权方法的任意名称。 留下 Plugin Id选项设置为Password File Authentication Plugin for GoCD。 最后,在 Password file path字段中,输入我们用htpasswd创建的文件。 完成后,点击 检查连接以确保GoCD能够正确访问该文件:

Enter authentication and check connection

如果 GoCD 显示连接正确消息,请单击 ** 保存** 来实现新的身份验证。

您将被要求使用新方案进行身份验证,这可能首次呈现为标准浏览器登录框,或者您可能会被重定向到GoCD登录页面。

GoCD login page

您的 GoCD 安装现在受密码保护,以防止未经授权的访问。

设置网站URL和文物位置

现在,网页界面得到正确的保护,我们可以通过网页用户界面完成我们的CI服务器的配置。

在重新登录到 Web 界面后,请在顶部菜单中单击 ADMIN,然后从下载菜单中选择 Server Configuration:

GoCD server configuration menu item

您将被带到主配置页面,在那里我们可以调整一些设置。

GoCD 提供两种设置来确定 CI 服务器 URL:网站 URL安全网站 URL网站 URL是大多数情况下使用的默认网站 URL。安全网站 URL是当正常的网站 URL配置使用 HTTP 时使用的,而 GoCD 需要传输敏感数据。如果网站 URL使用 HTTPS 地址,则所有连接都加密,而安全网站 URL不需要设置。

由于我们只允许通过防火墙访问 HTTPS 端口,我们将填写 ** 网站 URL** 用 https:// 协议指定符,然后是我们的服务器的域名或 IP 地址,然后是 :8154

GoCD set site URL

接下来,向页面的 ** 管道管理** 部分滚动。 将 ** 文物目录位置设置为我们之前创建的 /mnt/artifact-storage 安装点。 如果您希望 GoCD 自动管理文物保留,您可以选择调整文物删除策略。

GoCD set artifact storage location

当你完成时,点击页面底部的保存按钮来实施你的更改。

您可能会在顶部菜单栏中看到一个警告:

GoCD warning indication

点击警告指示器将向您显示完整的警告消息,该消息告诉我们GoCD将不会使用/mnt/artifact-storage位置,直到重新启动。

GoCD warning detail

点击X以退出警告消息。

在我们重新启动服务器之前,让我们检查我们的代理商是否已成功注册到服务器上。

GoCD list of available agents

我们启动的代理程序已成功注册到服务器,其状态设置为Idle。这意味着代理程序已启用,但没有分配工作,这就是我们期望的。

现在我们已经确认我们的代理存在,我们可以重新启动GoCD服务器流程来完成文物的位置更改。

1sudo systemctl restart go-server

一旦该服务重新启动并恢复在端口8154上收听连接,您将能够重新连接到Web UI。

结论

在本指南中,我们已经安装并配置了运行在Ubuntu 16.04上的GoCD服务器和代理,我们在一个单独的分区上设置了专用文物存储空间,以处理生成的构建资产和配置身份验证以保护Web接口。

一旦 GoCD 启动并运行,一个很好的下一步是使用可信的 SSL 证书来保护您的安装。 请遵循我们在 如何配置 GoCD 使用 Let's Encrypt SSL 证书上的指南来了解如何设置此功能。

Published At
Categories with 技术
comments powered by Disqus