写点什么

搭建一套 gocd 的环境

作者:tcpgnl
  • 2022-10-18
    北京
  • 本文字数:2507 字

    阅读完需:约 1 分钟

搭建一套 gocd 的环境

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有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-serversudo yum install -y go-server
复制代码


安装成功信息



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


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



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


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


启动服务成功如下图所示



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


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


# 关闭 iptablessystemctl stop firewalld# 查看 iptables 状态systemctl status firewalld
复制代码


关闭截图如下:



我的 gocd-server 成功截图如下



此时我们成功完成了安装 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 进行绑定)



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


配置 gocd-agent 绑定 gocd-server


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


# 关闭 iptablessystemctl stop firewalld# 查看 iptables 状态systemctl status firewalld
复制代码


  • 使用你的 IDE 打开 /usr/share/go-agent/wrapper-config/wrapper-properties.conf

  • 根据这个文件中的指示配置 Gocd 服务端的地址

  • 保存并退出你的编译器

  • 运行 service go-agent [start|restart] 来 (重启) 启动你的 go-agent 服务


示例如下



修改后的内容



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


# 启动 go-agent 服务service go-agent start# 查看 go-agent 状态service go-agent status
复制代码


启动完成效果如下:



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


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



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


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



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



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


多个 agent 效果图如下



至此我们的安装 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)[https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-gocd-on-ubuntu-16-04#preparing-gocd-for-first-use]

发布于: 刚刚阅读数: 3
用户头像

tcpgnl

关注

还未添加个人签名 2019-10-28 加入

还未添加个人简介

评论

发布
暂无评论
搭建一套 gocd 的环境_CI/CD_tcpgnl_InfoQ写作社区