搭建一套 gocd 的环境

Posted by Li Hui on Thursday, June 9, 2022

gocd作为一个一体化的CICD工具在世界五百强中占有很大的分量,我的公司是 Thoughtworks 正是开发维护gocd的公司,我的日常工作中也是使用的gocd, 翻了一些网站,对于gocd的介绍比较少, 恰逢最近我在学习一下gocd 的知识,因此总结一下 gocd 的使用并分享出来。

私以为,对于一个软件来说最重要的其实是使用,而后才是安装,再其次是理解其原理,debug,或者说通过debug了解其原理,进而去翻看其代码。不能只顾着学习如何安装,如何理解其代码,而忘记了软件的最终目的其实是为了简化繁杂的工作。

上面虽然说的流程是先学习如何使用,再学习安装,但是现实情况似乎并不是如想象中那么理想,现实生活中,并没有一个我们可以随意测试的环境,供我们去试错,从试错中学习,因此问题又归结到了安装搭建环境上。这是一个很难绕开的地方,希望以后可以有方案来绕开,当然我们现在看到的一些 managed 的服务做到了这一点,比如managed Kubernetes managed mysql 等等都可以避免我们再不熟悉任何情况的时候手动安装所带来的打击。

我们回归正题,我们本次主要采用 Linode (我也尝试了vultr厂商,但是开了三台机器都无法ssh到机器上,遂放弃,估计是因为特殊上网用vultr的太多导致的问题) 这家云服务厂商来搭建我们的 gocd 环境,因为其可以随开随用,随关随停,不会产生额外的成本,其他的云服务厂商如Linode, digitalOcean 都是云服务厂商对开发者比较友好的公司,如果您暂时没有相关的账号,可以通过我们的连接注册,您也可以得到相关的优惠,同时也相当于通过厂商赞助我,减少我的云服务的实际成本,如果您还未注册,可以通过我的链接进行注册,vultr $10 注册优惠地址vultr $100 优惠注册地址,不过$100有14天的有效期 ,linode $100 60天有效期 。不过这里提一句,如果大家没有达到相应花费的话,并不会给我奖励云服务免费金额,不过还是希望大家有效利用云服务厂商所给的福利进行学习提升自我能力。

gocd 有一个需要首先明确的地方是,其架构为 master-slave 架构(这个与kubernetes有相似之处),master 节点主要用于管理系统, 分配任务 并且提供用户界面

我们本次采用的策略是,一个 master 节点 两个 slave的模式进行演示,本文的主要的目的是采用CentOS系统安装运行gocd,并且连接 node节点。

gocd 官网也有这些具体的教程,我们通过实例来讲述其中的安装步骤 主要分为三个部分 1. 安装go-server 2. 安装go-agent 3. 联通go-server 和go-agent

1. 安装 go-server

首先我们ssh到机器上 具体内容 参照 https://docs.gocd.org/current/installation/install/server/linux.html

# 添加yum源
sudo curl https://download.gocd.org/gocd.repo -o /etc/yum.repos.d/gocd.repo
# 安装go-server
sudo yum install -y go-server

安装成功信息

image-20220609003435010

通过以上步骤 我们的gocd server 安装完成后,下面我们开始启动 gocd-server

gocd-server 主要通过 service 进行启动 脚本如下

ScriptDescription
service go-server console在前台启动GoCD server
service go-server start在后台作为守护进程启动 GoCD server
service go-server stop停止 GoCD server
service go-server restart重启 gocd server

因此对于我们现在来说 直接使用 service go-server start 启动即可

# 启动 gocd-server 服务
service go-server start
# 检测服务状态
service go-server status

启动服务成功如下图所示

image-20220609003652565

此时我们可以通过 http://{{ip-address}}:8153/go 即可访问我们的 gocd-server 端

这里有一个地方需要注意一下 因为 Linode上的CentOS7 默认开启了 iptables 做端口的保护,在我们测试的阶段,可以暂时关闭 iptables 具体命令如下

# 关闭 iptables
systemctl stop firewalld
# 查看 iptables 状态
systemctl status firewalld

关闭截图如下:

image-20220609005201766

我的 gocd-server 成功截图如下

image-20220609005323497

此时我们成功完成了安装 gocd-server 端

2. 安装 go-agent 客户端并联通

下面我们开始 准备go-agent 客户端

安装过程和gocd-server类似

# 添加yum源
sudo curl https://download.gocd.org/gocd.repo -o /etc/yum.repos.d/gocd.repo
# 安装 gocd-agent 服务
sudo yum install -y go-agent

启动命令如下(不过在启动之前首先需要修改 gocd 的配置 让其和gocd-server进行绑定)

ScriptDescription
service go-agent console在前台启动 GoCD agent
service go-agent start在后台作为守护进程启动 GoCD agent
service go-agent stop停止 GoCD agent
service go-agent restart重启 GoCD agent

service utilizes the service manager (e.g systemd, upstart, init.d) used by your OS.

配置 gocd-agent 绑定 gocd-server

在配置之前我们首先关闭防火墙

# 关闭 iptables
systemctl stop firewalld
# 查看 iptables 状态
systemctl status firewalld
  • 使用你的IDE打开 /usr/share/go-agent/wrapper-config/wrapper-properties.conf
  • 根据这个文件中的指示配置 Gocd 服务端的地址
  • 保存并退出你的编译器
  • 运行 service go-agent [start|restart] 来 (重启) 启动你的 go-agent 服务

示例如下

image-20220609084643580

修改后的内容

image-20220609084858716

这样我们就可以启动 go-agent 的服务了

# 启动 go-agent 服务
service go-agent start
# 查看 go-agent 状态
service go-agent status

启动完成效果如下:

image-20220609085121868

我们去在 gocd-server 检查下是否注册成功。此时还是进入 gocd-server的地址进行查看

我们点击顶部标签 agent 我们发现刚才的agent 已经在pending状态 效果如下

check-go-agent-in-server

为什么是pending状态呢 而不是直接使用的状态呢,因为通过上述的流程我们来看,其实我们并没有什么防护性质的机制来保证其他人的 agent 不能注册到我们的server 上 如果我们的代码直接在其他人机器上运行,就很难谈安全性,因此需要我们手动启动这个服务,那如何手动启动呢?

框选这个 agent 点击 enable 即可 效果如下

enable-go-agent-in-server

启动之后 agent的状态从 pending 转换成为 Idle 状态,效果如下

enabled-go-agent-in-server

如果我们想配置多个agent 重复上述代码即可

多个agent 效果图如下

check-two-go-agent-in-server

至此我们的安装 go-agent 的服务并与 server 联通完成

接下来我会录制这一部分的视频上传到网络上,添加到这部分

其实到这里我们只完成了 gocd 环境的搭建,还没有进行测试,后续的文章,会添加相应运行的内容


后话:基于Linux 服务管理(比如service和systemctl)

参考文章

  1. https://kishore-devaraj.github.io/curio/gocd-101/
  2. https://docs.gocd.org/current/installation/install/server/linux.html
  3. https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-gocd-on-ubuntu-16-04#preparing-gocd-for-first-use