自定义构建节点
本文档按照接入自定义构建节点时所使用的客户端,分为在使用 worker
和 cci-agent
服务时可能遇见的问题。
Worker
节点状态一直处于准备中如何解决?
- 在终端中输入命令
java -version
命令查看版本号是否为 8 或 11。 - 检查是否正确安装 Jenkins 服务。
若版本号有差异或漏装上述服务,请阅读环境依赖进行服务重装。
运行 qci_worker remove
命令删除旧有 Worker
服务,参考文档重新接入。
节点一直处于占用状态如何解决?
按照下图提示点击清理环境按钮。
若仍未恢复,运行 qci_worker remove
命令删除旧有 Worker
服务,参考文档重新接入。
节点处于离线状态如何解决?
执行命令 qci_worker up -d
。若仍无法解决问题,请尝试删除当前节点后,参考文档重新接入。
如何解决 Jenkins 启动异常?
当构建任务执行失败后出现「Jenkins 启动异常」错误提示符时,可以尝试重新构建。若无法恢复请运行 qci_worker remove
命令删除旧有 Worker
服务,使用一键生成接入命令方式重新接入。
Windows 系统使用一键脚本接入时失败
检查 powershell 版本是否 >= 5.1.17。
提示凭据不存在
若遇到凭据不存在问题,例如错误日志含有类似信息:CredentialId could not be found
,请清理 cci-agent
服务进程,同时删除主目录下的 .coding
文件夹。删除后参考文档接入 worker
服务。
安装时提示 qci_worker: command not found 错误
问题详情:
如下图所示,安装自定义节点时提示 qci_worker: command not found
错误。
解决办法:
- 在终端中执行
whereis qci_worker
或which qci_worker
命令查看qci_worker
的所在路径。 - 检查是否将
qci_worker
的路径添加至 PATH 中。
- 添加至 PATH 后重新执行安装命令。
执行构建时提示 npm not found
问题详情:
已在自定义构建节点中安装了 npm,但是在运行构建过程中依然报错 npm not found
。
解决办法:
此问题常见于接入自定义构建节点池后,再安装 npm 的构建节点,因为 qci_worker
未能读取 npm 的所在路径。
- 执行
qci_worker stop
命令停止服务。 - 再分别执行
ps -ef |grep jenkins
、ps -ef|grep qci
命令查看是否仍存在残留的 qci 、Jenkins 进程。若存在则手动 kill 对应的 PID 进程。 - 最后执行
qci_worker up -d
命令重新启动服务。
若问题依旧存在,请参考以下步骤:
执行
which npm
命令查看 npm 所在路径。执行
qci_worker stop
命令暂停服务。执行 ln -s + 在第一步运行 which npm 所得到的路径命令,例如执行
ln -s /usr/bin/npm
。执行
qci_worker up -d
命令重启 qci 服务。
自定义节点如何缓存目录?
- 在终端中运行
qci_worker config NODE_LOCAL_WORKSPACE_CACHE=True
命令指定本机中的缓存目录。 - 运行
qci_worker stop
命令停止服务。 - 运行
qci_worker up -d
命令重启服务。
构建运行完成后依旧会清除目录,下一次构建会把缓存放入本次构建的工作目录,缓存本地存储路径默认为:
~/codingci/jenkins_cache
。
cci-agent
如何在自定义构建节点安装插件?
自定义构建节点是以开源软件 Jenkins 为引擎进行构建的,Jenkins 提供了超过 1000 个插件支持构建、部署、自动化。CODING CI 自定义节点默认提供的 Jenkins 仅内置了最常用的部分插件,如果不能满足您项目的需求,您可以自行安装需要的插件。
首先需要您登陆 Jenkins,详见上一问的答案。
登录到 Jenkins 后,可以看到 Jenkins 管理界面,依次点击 【系统管理】–> 【插件管理】,即可进入插件管理页面。
左侧菜单栏中点击【系统管理】。
- 下拉页面,点击【插件管理】。
- 打开插件管理页面。
- 在插件管理页面,找到【可选插件】选项页,搜索并勾选需要安装的插件,点击页面下方的【下载待重启后安装】,在弹出的【更新中心】页面勾选
安装完成后重启 Jenkins
,等待 Jenkins 安装完成后自动重启,即可使用。
自定义构建节点配额
- 接入的自定义节点不会受到 CODING 团队配额限制;
- 自定义构建节点不计入团队每周构建次数配额限制;
- 自定义构建节点不受团队并行上限配额限制;
- 自定义构建节点不受超时配额限制;
如何设置自定义构建节点的缓存?
配置了自定义构建节点池的构建计划将使用构建节点自身的缓存。
使用自定义构建节点执行的构建计划,在每次执行的时候会创建一个独立的 WorkSpace
,构建结束后会将其清理。构建过程中产生在工作空间外的文件将会保留(如 maven / npm 等制品库的全局缓存)。
如何重复注册 cci-agent?
默认的情况下,如果在一台机器上重复注册 cci-agent 会提示节点已被注册,并且需要删除注册节点后才能重新注册。
这是因为注册节点需要提供 config 目录(默认为 ~/.config
)和端口号(默认为 15740),您只需要手动指定不冲突的 config 目录和端口号即可重复注册节点。
在进行操作之前,请确保您已经在【项目设置】->【开发者选项】->【项目令牌】申请了具备构建节点权限的项目令牌密码。
下面为使用 ~/.coding2
和 15741 端口
进行重复注册的示例操作。
./cci-agent init --config ~/.coding2 --pt <项目令牌密码>
./cci-agent up --config ~/.coding2 --jport 15741
自定义节点 Jenkins 服务无法启动
如果您的自定义节点 Jenkins 无法启动,如下情况报 Warning 时,可能是由于节点的操作系统为最小化安装的 CentOS (Minimal Install),而 Jenkins 的网页页面依赖一些图形化组件。
解决方案为执行一下命令:
yum install fontconfig
异常状态处理方式
在实际生产中,接入自定义构建节点可能会存在如客户端的网络环境,配置环境缺失等诸多不稳定因素,下面将罗列出已知异常状态的处理方式。
删除构建节点池
相关位置 | 构建记录错误提示 | 处理方式 |
---|---|---|
配置构建计划 | - | 构建计划节点池配置中不会出现已经被删除的构建节点池 |
已配置构建计划 | 配置页面上会提示构建节点池已被删除 | 在构建计划中已配置的构建节点池被删除,需要用户手动重新配置 |
触发构建任务 | 该构建计划配置的构建节点池 my-pool 已被删除,请重新配置 | 允许触发,但构建任务会立即失败 |
队列中、初始化、准备构建、构建中 | 该构建计划配置的构建节点池 my-pool 已被删除,请重新配置 | 这几种状态的构建任务会立即失败 |
删除处于”占用”状态的构建节点
相关位置 | 构建记录错误提示 | 处理方式 |
---|---|---|
队列中的构建任务 | - | 不受到影响,队列中的构建任务尚未分配具体的构建节点,在寻找到有效构建节点之前会一直处于队列中的状态 |
初始化、准备构建、构建中 | 构建节点 xxx 已离线 | 这几种状态的构建任务会立即失败 |
处于“占用”状态的构建节点掉线
由于客户端网络环境不稳定,构建节点可能会存在掉线的情况
掉线后客户端(构建节点)会尝试进行重试,服务端会尝试等待客户端重新连接
- 等待超时( 3 分钟)则会判断构建节点离线,并将构建任务标记为失败
- 若重连成功,客户端将继续上报构建的内容
相关位置 | 构建记录错误提示 | 处理方式 |
---|---|---|
队列中的构建任务 | - | 不受到影响,队列中的构建任务尚未分配具体的构建节点,在寻找到有效构建节点之前会一直处于队列中的状态 |
初始化、准备构建、构建中 | 构建节点 xxx 已离线 | 这几种状态的构建任务会立即失败 |
配置的构建节点池没有接入节点
相关位置 | 构建记录错误提示 | 处理方式 |
---|---|---|
配置构建计划 | - | 因为构建计划并不会直接关联构建节点,所以不影响构建计划对配置,若节点池内不存在构建节点 ,配置页面中会给出相应的警告。 |
已配置构建计划 | - | 因为构建计划并不会直接关联构建节点,所以不影响构建计划对配置,若节点池内不存在构建节点 ,配置页面中会给出相应的警告。 |
初始化、准备构建、构建中 | 该构建计划配置的构建节点池 my-pool 已被删除,请重新配置 | 这几种状态的构建任务会立即失败 |
取消构建计划授权
相关位置 | 构建记录错误提示 | 处理方式 |
---|---|---|
配置构建计划 | 会给出相对应的提示信息 | 不允许用户选中未授权的构建计划 |
已配置构建计划 | - | 构建记录列表页面和构建配置页面会给出未授权的提示信息,用户需要手动调整节点池配置 |
触发构建任务 | 该构建计划没有获得构建节点池 default 的授权,请授权 | 允许触发,但构建任务会立即失败 |
初始化、准备构建、构建中 | 该构建计划配置的构建节点池 my-pool 已被删除,请重新配置 | 这几种状态的构建任务会立即失败 |
如何获取登录密码?
在 agent 目录执行 ./cci-agent -up -h
命令可以看到 Jenkins 的用户名密码和端口。
自定义节点离线了怎么办?
你可以按照以下思路进行排查:
- 机器是否设置了休眠;
- ps -ef | grep cci-agent 看看进程是否存在;
- 可以删除节点,重新接入,或者 kill -9 进程 ID 杀掉进程,重新启动;
- 检查机器是否配置代理或者 VPN;
- 如果还是出现频繁掉线可以将 ~./coding/log 目录下的 log 文件打包提交工单咨询一下技术支持。
如何访问本地 Jenkins?
步骤一:访问 Jenkins
首先需要将您的设备作为自定义构建节点接入,具体操作步骤可以点击查看。
为了避免对外暴露端口,CODING CI 自定义节点默认启动的 Jenkins 只会监听本地回环地址(127.0.0.1),默认的监听端口为
15740
,此时,您只能在构建节点机器通过 localhost 或者 127.0.0.1 进行访问,具体的访问地址为 http://localhost:15740
步骤二:Jenkins 登录令牌
在浏览器中输入 Jenkins 访问地址,会看到登录页面。
在 agent 目录执行 ./cci-agent -up -h 可以看到 Jenkins 的用户名密码和端口。
如何访问其他服务器上的 Jenkins?
在装有 Jenkins 服务的自定义节点中运行以下命令:
qci_worker stop
qci_worker config JENKINS_HOST=0.0.0.0
qci_worker up -d
在浏览器中访问以下网址:
http://目标服务器 IP:15740

在阅读中是否遇到以下问题?*
您希望我们如何改进?*
如果您希望得到回复,请留下您的邮箱地址。