介绍
GoCD是一个强大的连续集成和交付平台,旨在自动化测试和发布流程。 凭借许多高级功能,如比较构建的能力,可视化复杂的工作流程和自动化构建版本跟踪,GoCD是一个灵活的工具,可帮助团队将经过良好测试的软件提供给生产环境。
在本指南中,我们将演示如何在Ubuntu 16.04上设置GoCD服务器。 我们将使用项目提供的软件包安装服务器和代理完成CI / CD的工作。 之后,我们将配置身份验证并修改一些基本选项来设置我们的服务器。
先决条件
根据GoCD项目的建议,您将需要一个至少2G内存和2个CPU内核的Ubuntu 16.04服务器来完成本指南。 另外, 为了处理构建工件而不破坏数据 ,您的服务器将需要专用的分区或磁盘作为工件存储位置。 本指南将使用/mnt/artifact-storage
作为/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运行,所以我们将和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
系统将提示您输入并确认新用户的密码。 用户名和密码的加密版本将写入文件:
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 Web界面。 当我们准备通过使用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 ,然后在安全子菜单中选择授权配置 :
在随后的页面上,单击右上角的添加按钮。 将出现一个屏幕,您可以在其中填写身份验证提供商的详细信息。
首先,在Id字段中输入新的授权方法的任意名称。 将插件ID选择设置为“GoCD的密码文件验证插件”。 最后,在密码文件路径框中,键入/etc/go/authentication
,我们使用htpasswd
创建的文件。 完成后,单击检查连接以确保GoCD可以正确访问文件:
如果GoCD显示“连接确定”消息,请单击保存以实现新的身份验证。
您将被要求使用新方案进行身份验证。 这可能是第一次显示为标准浏览器登录框,或者您可能会被重定向到GoCD登录页面。 使用您配置的用户名和密码登录:
您的GoCD安装现在受到密码保护,以防止未经授权的访问。
设置站点URL和工件位置
现在Web界面已经正确安全,我们可以通过Web UI完成CI服务器的配置。
登录到Web界面后,单击顶部菜单中的ADMIN ,然后从下拉菜单中选择服务器配置 :
您将被带到主配置页面,我们可以调整一些设置。
我们应该查看的第一个项目是页面的服务器管理部分中的站点URL 。 GoCD提供了两个确定CI服务器URL的设置:“站点URL”和“安全站点URL”。 “网站网址”是大多数情况下使用的默认网站网址。 当常规“站点URL”配置为使用HTTP和GoCD需要传输敏感数据时,将使用“安全站点URL”。 如果“站点URL”使用HTTPS地址,则所有连接都将被加密,并且不需要设置“安全站点URL”。
由于我们只允许通过防火墙访问HTTPS端口,因此我们将使用https://
协议说明符填写站点URL ,后跟服务器的域或IP地址,后跟:8154
。 我们将会将安全网站网址留空,因为我们的正常网址已经安全:
接下来,向下滚动到页面的流水线管理部分。 将工件目录位置设置为我们之前创建的/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证书来保护安装。 请关注如何配置GoCD的指南,让我们加密SSL证书来了解如何设置。