GoCD是一个功能强大的持续集成和交付平台,旨在自动化测试和发布流程。GoCD具有许多高级功能,例如比较构建,可视化复杂工作流以及自动构建版本跟踪,是一种灵活的工具,可以帮助团队将经过良好测试的软件提供给生产环境。
在本教程中,我们将演示如何在Ubuntu 16.04上设置GoCD服务器。我们将使用项目提供的软件包安装服务器和代理以完成CI/CD工作。之后,我们将配置身份验证并修改一些基本选项来设置我们的服务器。
根据GoCD项目的建议,您将需要一台至少具有2G RAM和2个CPU内核的Ubuntu 16.04服务器来完成本教程。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后在购买服务器。此外,为了在不破坏数据的情况下处理构建工件,您的服务器将需要专用分区或磁盘作为工件存储位置。我们将在本教程中使用/mnt/artifact-storage
作为工件存储的挂载点。本例通过控制台购买一块弹性普通云盘,有关如何创建云硬盘的更多内容,可以参考 创建云硬盘。
1) 登录云硬盘控制台,单击【+ 新建】开始购买。
2) 在弹出框中选择【华北地区(北京)】-【北京一区】、【包年包月】、【云硬盘】、【20GB】,并选择购买一个月,单击【确定】按钮。
3) 在支付页面单击【确认支付】完成购买。您可在云硬盘列表页查看已购买的云硬盘,您刚刚购买的弹性云盘默认未命名,并显示为待挂载状态。单击编辑小图标,将它命名为“cbs-test”。
一旦您的服务器配置了在/mnt/artifact-storage
上安装的附加存储,您需要在服务器上启用防火墙,您可以直接在腾讯云控制台中的安全组进行设置。完成这些步骤后,请继续阅读本教程。
我们将从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流程可以访问工件挂载点,以便它可以在那里存储文件。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
系统将提示您输入并确认新用户的密码。用户名和密码的加密版本将写入文件:
New password:
Re-type new password:
Adding password for user sammy
注意:您可以向文件添加多个用户名和密码组合,以允许其他登录。但是,添加第一个用户后,您将需要在不使用
-c
选项的情况下调用htpasswd
命令: sudo htpasswd -B /etc/go/authentication next_user 在第一个用户之后使用-c
选项将导致htpasswd
替换所有现有凭据。
获得身份验证文件后,我们就可以启动GoCD服务器和代理进程。这可能需要一段时间才能完成:
sudo systemctl start go-server go-agent
首先,检查服务是否已成功启动:
sudo systemctl status go-*
如果您的输出看起来与此类似,则两个进程都是由systemd初始化的::
● 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
时,屏幕应如下所示:
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 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,然后在Security子菜单中选择Authorization Configuration:
在随后的页面上,单击右上角的“添加”按钮。将出现一个屏幕,您可以在其中填写身份验证提供程序的详细信息。
首先,在Id字段中输入新授权方法的任意名称。将插件ID选项设置为“Password File Authentication Plugin for GoCD ”。最后,在“Password file path ”框中,输入/etc/go/authentication
,我们使用htpasswd
创建的文件。完成后,单击“检查连接”以确保GoCD可以正确访问该文件:
如果GoCD显示“连接正常”消息,请单击“ 保存”以设置新身份验证。您将被要求使用新方案进行身份验证。使用您配置的用户名和密码登录:
您的GoCD安装现在受密码保护,以防止未经授权的访问。
现在Web界面已得到妥善保护,我们可以通过Web UI完成CI服务器的配置。重新登录Web界面后,单击顶部菜单中的ADMIN,然后从下拉菜单中选择Server Configuration:
您将进入主配置页面,我们可以在其中调整一些设置。
我们应该看的第一项是页面的“服务器管理”部分中的站点URL。GoCD提供了两个确定CI服务器URL的设置:“站点URL”和“安全站点URL”。“站点URL”是大多数情况下使用的默认站点URL。当常规“站点URL”配置为使用HTTP并且GoCD需要传输敏感数据时,使用“安全站点URL”。如果“站点URL”使用HTTPS地址,则所有连接都将加密,并且不需要设置“安全站点URL”。
由于我们只允许通过防火墙访问HTTPS端口,因此我们将使用https://
协议说明填写站点URL,然后填写服务器的域或IP地址,接着填写:8154
。我们将安全站点URL留空,因为我们的普通URL已经安全:
接下来,向下滚动到页面的Pipeline Management部分。将Artifacts Directory Location设置为我们之前创建的/mnt/artifact-storage
挂载点。如果您希望GoCD自动管理保留,您可以选择调整工件删除策略。将其保留为“从不”以手动管理工件:
完成后,单击页面底部的“ 保存”按钮以实现更改。您可能会在顶部菜单栏中看到警告:
单击警告指示器将显示完整警告消息,告知我们GoCD在重新启动之前不会使用/mnt/artifact-storage
位置。
单击X以退出警告消息。在我们重新启动服务器之前,让我们检查我们的代理是否已成功注册到服务器。单击顶部菜单中的AGENTS项。您将被带到代理商列表:
我们启动的代理进程已成功注册到服务器,其状态设置为“空闲”。现在我们已经确认我们的代理存在,我们可以重新启动GoCD服务器进程以完成工件位置更改。返回命令行,输入以下命令重新启动服务:
sudo systemctl restart go-server
一旦服务重新启动并继续侦听端口8154上的连接,您就可以重新连接到Web UI。
在本教程中,我们已经安装并配置了在Ubuntu上运行的GoCD服务器和代理。我们在单独的分区上设置专用工件存储空间,以处理生成的构建,并配置身份验证以保护Web界面。一旦GoCD启动并运行,下一步就是使用受信任的SSL证书保护您的安装。SSL证书:如何设置此证书取决于你是否拥有可解析该服务器的域名。
更多Linux教程请前往腾讯云+社区学习更多知识。
参考文献:《How To Install and Configure GoCD on Ubuntu 16.04》
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。