这是我参与8月更文挑战的第7天,活动详情查看:8月更文挑战
Gocd 是一个强大的持续集成和交付平台,旨在自动化测试和发布过程。 Gocd 具有许多高级特性,比如比较构建、可视化复杂的工作流程和自动化构建版本跟踪,它是一个灵活的工具,可以帮助团队向生产环境交付经过良好测试的软件。
下面演示如何在 Ubuntu 16.04上设置 GoCD 服务器。 我们将安装服务器和一个代理来完成 ci / cd 工作,使用项目提供的包。 然后,我们将配置身份验证并修改一些基本选项来设置服务器。
先决条件
根据 GoCD 项目的建议,你需要一个 Ubuntu 16.04服务器,至少2 g RAM 和2个 CPU 内核来完成本指南。 此外,为了在不损坏数据的情况下处理构建构件,服务器将需要一个专用分区或磁盘作为构件存储位置。 在本指南中,我们将使用 / mnt / artifact-storage 作为 artifact 存储的挂载点:
一旦您的服务器配置了安装在 / mnt / artifact-storage 上的附加存储,请按照我们的 Ubuntu 16.04初始服务器设置指南设置具有 sudo 特权的非 root 用户并启用基本防火墙。 完成这些步骤后,继续阅读本指南。
安装 GoCD 服务器和代理
我们将从 GoCD 项目提供的专用存储库开始下载和安装服务器和代理程序包。
首先,我们将新的存储库定义添加到 APT sources 配置目录,输入:
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 需要运行 java8,因此我们将随 CI 服务器和代理一起安装 default-jre 包。 我们还将安装 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
系统将提示您为新用户输入并确认密码。 用户名和密码的加密版本将被写入文件:
Output
New password:
Re-type new password:
Adding password for user sammy
注意: 您可以向文件添加多个用户名和密码组合,以允许其他登录。 但是,在添加第一个用户之后,您需要调用 htpasswd 命令,而不需要使用-c 选项: sudo htpasswd-b / etc / go / authentication next user Using the-c option,在第一个用户之后使用-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时,屏幕应该是这样的:
Output
Every 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: / / protocol,然后是服务器的域名或 IP 地址,最后是: 8154端口规范:
https://server_domain_or_IP:8154
您的浏览器可能会显示一个警告,指出服务的 SSL 证书没有被可信的证书颁发机构签署:
由于 GoCD 自签署其证书,这是预期的行为。 点击 ADVANCED 或者其他类似的选项,然后选择继续这个请求。
当您最初连接到 GoCD 时,您将被带到管道定义屏幕。 与其马上定义管道,我们应该优先考虑使用先前使用 htpasswd 创建的密码文件启用身份验证。 单击顶部导航菜单中的 ADMIN,然后在 Security 子菜单中选择 Authorization Configuration:
在下面的页面上,单击右上角的 Add 按钮。 将出现一个屏幕,您可以在其中填写身份验证提供程序的详细信息。
首先,在 Id 字段中为新授权方法输入一个任意名称。 将 Plugin Id 选择设置为“ Password File Authentication Plugin for GoCD”。 最后,在“密码文件路径”框中,键入 / etc / go / authentication,即我们用 htpasswd 创建的文件。 完成后,单击检查连接,确保 GoCD 可以正确访问文件:
如果 GoCD 显示“ connectionok”消息,请单击“保存”以实现新的身份验证。
您将被要求使用新方案进行身份验证。 这可能会作为一个标准的浏览器登录框第一次或您可能被重定向到 GoCD 登录页面。 使用您配置的用户名和密码登录:
您的 GoCD 安装现在是密码保护,以防止未经授权的访问。
设置站点 URL 和工件位置
既然 web 界面已经安全,我们可以通过 web UI 完成 CI 服务器的配置。
登录到 web 界面后,点击顶部菜单中的 ADMIN,然后从下拉菜单中选择 Server Configuration:
您将被带到主配置页面,在那里我们可以调整一些设置。
我们应该查看的第一项是页面的 Server Management 部分中的 Site URL。 Gocd 提供了确定 CI 服务器 URL 的两个设置: “ Site URL”和“ Secure Site URL”。 “网站地址”是在大多数情况下使用的默认网站地址。 当常规的“ Site URL”配置为使用 HTTP 和 GoCD 传输敏感数据时,使用“ Secure Site URL”。 如果“网站 URL”使用 HTTPS 地址,则所有连接都是加密的,不需要设置“安全网站 URL”。
因为我们只允许通过防火墙访问 HTTPS 端口,所以我们将使用 HTTPS: / / protocol specifier 填写 Site URL,然后是服务器的域名或 IP 地址,最后是: 8154。 我们将保留 Secure Site URL 空白,因为我们的正常 URL 已经是安全的:
接下来,向下滚动到页面的 Pipeline Management 部分。 将 Artifacts Directory Location 设置为我们前面创建的 / mnt / artifact-storage 挂载点。 如果希望 GoCD 自动管理工件保留,则可以选择性地调整工件删除策略。 手动管理工件的方法是“永远不要” :
完成后,单击页面底部的 SAVE 按钮以实现更改。
你可能会注意到在顶部的菜单栏中有一个警告:
单击警告指示器将显示完整的警告消息,告诉我们 GoCD 在重新启动之前不会使用 / mnt / artifact-storage 位置。
单击 x 退出警告消息。
在重新启动服务器之前,让我们检查一下我们的代理是否已经在服务器上成功注册。 单击顶部菜单中的 agent 项。 你会被带到代理人名单:
我们启动的代理进程已经成功地向服务器注册,其状态设置为“ Idle”。 这意味着启用了代理,但没有分配任何工作,这正是我们所期望的。
现在我们已经确认了代理的存在,我们可以重新启动 GoCD 服务器进程来完成工件位置的更改。 回到命令行,通过输入以下命令重新启动服务:
sudo systemctl restart go-server
一旦服务重新启动并恢复监听端口8154上的连接,您将能够重新连接到 web UI。
总结
我们已经安装并配置了一个运行在 Ubuntu 16.04上的 GoCD 服务器和代理。 我们在一个单独的分区上设置了一个专用的工件存储空间来处理生成的构建资产,并配置了身份验证来保护 web 界面。