自定义节点相关
- 节点一直处于准备中状态
- 节点一直处于占用状态
- 节点处于离线状态
- Jenkins 无法启动 FontConfiguration.getVersion 空指针
- 接入节点时报错 Check pkg manager fail
- 安装时提示 qci_worker: command not found 错误
- 执行构建时提示 npm not found 或 go not found
- Windows 系统使用一键脚本接入时失败
- 采用 Windows 自定义节点,报错 Cannot run program “nohup”
- 构建失败报错:exec: “qci-plugin”: executable file not found
- 构建任务初始化超时
- 普通用户如何接入自定义节点
- 如何在虚拟环境启动 qci_worker
- 自定义构建节点配额
- 异常状态处理方式
- 如何访问本地 Jenkins
- 如何在自定义构建节点安装插件
- 自定义节点如何缓存目录
- 如何设置自定义构建节点的缓存
- 构建计划提供的环境没有需要的版本怎么办?
- 自定义节点一直卡在「初始化中」
- 自定义节点主机上已经安装了 go,但执行时提示 go 找不到?
节点一直处于准备中状态
- 在终端中输入命令
java -version
命令查看版本号是否为 8 或 11。 - 检查
~/codingci/cci_daemon.log
日志并查看 Jenkins 探活是否正常,如果不正常检查~/codingci/jenkins.log
,查看报错原因,忽略 Docker 插件相关报错。
若版本号有差异或漏装上述服务,请阅读环境依赖进行服务重装。
运行 qci_worker remove
命令删除旧有 Worker
服务,参考文档重新接入。
节点一直处于占用状态
按照下图提示点击清理环境按钮。
若仍未恢复,运行 qci_worker remove
命令删除旧有 Worker
服务,参考文档重新接入。
节点处于离线状态
可能是 worker 没有启动,可以查看一下 worker 的进程是否存在:
- 如果不存在,执行
qci_worker up -d
重新启动 worker。 - 如果存在,可以查看
~/codingci/cci_daemon.log
,查看报错日志。 - 若仍无法解决问题,请尝试删除当前节点后,参考文档重新接入。
Jenkins 无法启动 FontConfiguration.getVersion
空指针
如果您的自定义节点 Jenkins 无法启动,查看 ~/codingci/jenkins.log
如下情况报错时,可能是由于节点的操作系统为最小化安装的 CentOS (Minimal Install),而 Jenkins 的网页页面依赖一些图形化组件。
解决方案为执行以下命令:
yum install fontconfig
接入节点时报错 Check pkg manager fail
在接入自定义节点时,若节点中的 yum 包管理工具版本过低则有可能出现此错误码。在自定义节点中执行 yum --version 2
命令查看是否能够正常返回版本号。若版本过低则需执行 yum update
命令升级版本。
安装时提示 qci_worker: command not found 错误
问题详情:
如下图所示,安装自定义节点时提示 qci_worker: command not found
错误。
解决办法:
- 在终端中执行
whereis qci_worker
或which qci_worker
命令查看qci_worker
的所在路径。检查是否将qci_worker
的路径添加至 PATH 中。 - 在终端中执行
pip3 list | grep qci-worker
是否存在。如果存在执行pip3 uninstall qci-worker
然后输入n
,我们可以看到如图 - 将上图标注的路径路径就是可执行文件的路径,我们只需将
/Users/crush/Library/Python/3.9/bin
这个路径添加到 PATH 中,然后source .bashrc
或者source .zshrc
,就可以在终端中执行qci_worker --version
进行测试了。
- 添加至 PATH 后重新执行安装命令。
执行构建时提示 npm not found 或 go not found
问题详情:
已在自定义构建节点中安装了 npm,但是在运行构建过程中依然报错 npm not found
。
解决办法:
此问题常见于接入自定义构建节点池后,再安装 npm 的构建节点,因为 qci_worker
未能读取 npm 的所在路径。
- 新创建一个终端或 source .bashrc,执行
npm -v
确认命令是否在已经在 PATH 中了。 - 执行
qci_worker stop
命令停止服务。 - 最后执行
qci_worker up -d
命令重新启动服务,这样 Jenkins 启动就会加载最新的环境变量。
若问题依旧存在,请参考以下步骤:
执行
which npm
命令查看 npm 所在路径。执行
qci_worker stop
命令暂停服务。执行 ln -s + 在第一步运行 which npm 所得到的路径命令,例如执行
ln -s your /usr/bin/npm
。执行
qci_worker up -d
命令重启 qci_worker 服务。
Windows 系统使用一键脚本接入时失败
检查 powershell 版本是否 >= 5.1.17。
采用 Windows 自定义节点,报错 Cannot run program “nohup”
完整错误码:Cannot run program "nohup" (in directory "C:\codingci\tools\jenkins_home\workspace\xxxx")
完成的报错记录如下图所示:
这是因为采用 Windows 自定义构建节点时执行了 shell 脚本,将 shell 脚本换成 bat 脚本即可。
构建失败报错:exec: “qci-plugin”: executable file not found
运行持续集成任务失败后返回此错误码:
此错误码常见于使用自定义构建环境执行持续集成任务。因为自定义环境中的镜像没有预置 qci-plugin
环境。
建议不要在“开始”阶段中使用自定义构建环境,否则持续集成任务全局都会置于此自定义环境下执行,而是改用在特定的阶段中再使用自定义构建环境。
构建任务初始化超时
- 可能是 worker 和服务端的 WebSocket 连接不稳定造成。观察一下
cci_daemon.log
,重新手动触发一次任务,查看是否有接收到消息的日志。 - 可能有 worker daemon 进程启动子进程时报错,观察一下
cci_daemon.log
,重新手动触发一次任务,是否有异常报错的日志。
普通用户如何接入自定义节点
- 普通用户启动 qci_worker 和 jenkins:
- 在接入节点页面切换到手动接入的方式进行操作即可。
- 注意:linux 在执行初始化客户端操作前,授权配置文件的目录写入权限给普通用户(myuser)。
touch /etc/qci.conf chmod + myuser /etc/qci.conf
- 普通用户启动 qci_worker, root 用户启动 jenkins。
- 停掉 qci_worker
qci_worker stop
- 切换至 root 用户启动 jenkins
su root && java -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8 -jar /root/codingci/tools/jenkins.war --httpPort=15740 --httpListenAddress=127.0.0.1 >> /root/codingci/jenkins.log 2>&1;
- 切换普通用户启动 qci_worker
su myuser && qci_worker up -d
如何在虚拟环境启动 qci_worker
避免构建计划中安装了与 qci_worker 有冲突的依赖包,可以以虚拟环境的方式启动 qci_worker。
进入自定义节点的工作目录下,例如 ~/codingci。
cd ~/codingci
qci_worker stop
cd ~/codingci
pip3 install virtualenv
virtualenv qci_venv
source qci_venv/bin/activate
pip3 install qci_worker -i https://testli.coding.net/ci/pypi/simple
qci_worker up -d
#风险:开启的自动更新,可能更新会失败,这种模式可以关闭自动更新。
qci_worker config PACKAGE_AUTO_UPDATE=0
自定义构建节点配额
- 接入的自定义节点不会受到 CODING 团队配额限制;
- 自定义构建节点不计入团队每周构建次数配额限制;
- 自定义构建节点不受团队并行上限配额限制;
- 自定义构建节点不受超时配额限制;
异常状态处理方式
在实际生产中,接入自定义构建节点可能会存在如客户端的网络环境,配置环境缺失等诸多不稳定因素,下面将罗列出已知异常状态的处理方式。
删除构建节点池
相关位置 | 构建记录错误提示 | 处理方式 |
---|---|---|
配置构建计划 | - | 构建计划节点池配置中不会出现已经被删除的构建节点池 |
已配置构建计划 | 配置页面上会提示构建节点池已被删除 | 在构建计划中已配置的构建节点池被删除,需要用户手动重新配置 |
触发构建任务 | 该构建计划配置的构建节点池 my-pool 已被删除,请重新配置 | 允许触发,但构建任务会立即失败 |
队列中、初始化、准备构建、构建中 | 该构建计划配置的构建节点池 my-pool 已被删除,请重新配置 | 这几种状态的构建任务会立即失败 |
删除处于”占用”状态的构建节点
相关位置 | 构建记录错误提示 | 处理方式 |
---|---|---|
队列中的构建任务 | - | 不受到影响,队列中的构建任务尚未分配具体的构建节点,在寻找到有效构建节点之前会一直处于队列中的状态 |
初始化、准备构建、构建中 | 构建节点 xxx 已离线 | 这几种状态的构建任务会立即失败 |
处于“占用”状态的构建节点掉线
由于客户端网络环境不稳定,构建节点可能会存在掉线的情况。
掉线后客户端(构建节点)会尝试进行重试,服务端会尝试等待客户端重新连接
- 等待超时( 3 分钟)则会判断构建节点离线,并将构建任务标记为失败
- 若重连成功,客户端将继续上报构建的内容
相关位置 | 构建记录错误提示 | 处理方式 |
---|---|---|
队列中的构建任务 | - | 不受到影响,队列中的构建任务尚未分配具体的构建节点,在寻找到有效构建节点之前会一直处于队列中的状态 |
初始化、准备构建、构建中 | 构建节点 xxx 已离线 | 这几种状态的构建任务会立即失败 |
配置的构建节点池没有接入节点
相关位置 | 构建记录错误提示 | 处理方式 |
---|---|---|
配置构建计划 | - | 因为构建计划并不会直接关联构建节点,所以不影响构建计划对配置,若节点池内不存在构建节点 ,配置页面中会给出相应的警告。 |
已配置构建计划 | - | 因为构建计划并不会直接关联构建节点,所以不影响构建计划对配置,若节点池内不存在构建节点 ,配置页面中会给出相应的警告。 |
初始化、准备构建、构建中 | 该构建计划配置的构建节点池 my-pool 已被删除,请重新配置 | 这几种状态的构建任务会立即失败 |
取消构建计划授权
相关位置 | 构建记录错误提示 | 处理方式 |
---|---|---|
配置构建计划 | 会给出相对应的提示信息 | 不允许用户选中未授权的构建计划 |
已配置构建计划 | - | 构建记录列表页面和构建配置页面会给出未授权的提示信息,用户需要手动调整节点池配置 |
触发构建任务 | 该构建计划没有获得构建节点池 default 的授权,请授权 | 允许触发,但构建任务会立即失败 |
初始化、准备构建、构建中 | 该构建计划配置的构建节点池 my-pool 已被删除,请重新配置 | 这几种状态的构建任务会立即失败 |
如何访问本地 Jenkins
步骤一:访问 Jenkins
首先需要将您的设备作为自定义构建节点接入,具体操作步骤可以点击查看。
为了避免对外暴露端口,CODING CI 自定义节点默认启动的 Jenkins 只会监听本地回环地址(127.0.0.1),默认的监听端口为
15740
,此时,您只能在构建节点机器通过 localhost 或者 127.0.0.1 进行访问,具体的访问地址为 http://localhost:15740
步骤二:Jenkins 登录令牌
在浏览器中输入 Jenkins 访问地址,会看到登录页面。
用户名密码是coding:11bf48c0403ec88231b530b5f98a113cad
。
如何在自定义构建节点安装插件
自定义构建节点是以开源软件 Jenkins 为引擎进行构建的,Jenkins 提供了超过 1000 个插件支持构建、部署、自动化。CODING CI 自定义节点默认提供的 Jenkins 仅内置了最常用的部分插件,如果不能满足您项目的需求,您可以自行安装需要的插件。
首先需要您登陆 Jenkins,用户名密码是
coding:11bf48c0403ec88231b530b5f98a113cad
。登录到 Jenkins 后,可以看到 Jenkins 管理界面,依次点击 【系统管理】–> 【插件管理】,即可进入插件管理页面。
左侧菜单栏中点击【系统管理】。
- 下拉页面,点击【插件管理】。
- 打开插件管理页面。
- 在插件管理页面,找到【可选插件】选项页,搜索并勾选需要安装的插件,点击页面下方的【下载待重启后安装】,在弹出的【更新中心】页面勾选
安装完成后重启 Jenkins
,等待 Jenkins 安装完成后自动重启,即可使用。
自定义节点如何缓存目录
- 在终端中运行
qci_worker config NODE_LOCAL_WORKSPACE_CACHE=True
命令指定本机中的缓存目录。 - 运行
qci_worker stop
命令停止服务。 - 运行
qci_worker up -d
命令重启服务。
构建运行完成后依旧会清除目录,下一次构建会把缓存放入本次构建的工作目录,缓存本地存储路径默认为:
~/codingci/jenkins_cache
。
如何设置自定义构建节点的缓存
配置了自定义构建节点池的构建计划将使用构建节点自身的缓存。
使用自定义构建节点执行的构建计划,在每次执行的时候会创建一个独立的 WorkSpace
,构建结束后会将其清理。构建过程中产生在工作空间外的文件将会保留(如 maven / npm 等制品库的全局缓存)。
构建计划提供的环境没有需要的版本怎么办?
问题描述: 构建计划提供的环境没有需要的版本怎么办?
解决办法: CODING 提供的默认环境不一定能满足每个用户工程的编译需要,用户需要根据本地正常编译的环境配置 CODING 上的编译环境。可以通过 shell 命令步骤去执行安装需要的工具,最便捷的方案就是使用镜像的方式,把本地环境打包成镜像在 CODING 上指定这个镜像作为编译环境即可。具体操作可以参考默认构建计划。
自定义节点一直卡在「初始化中」
问题描述:
自定义节点的状态一直卡在「初始化中」。
解决方法:
- 执行以下命令,尝试重启 qci_worker。
qci_worker stop
qci_worker up -d
- 如果还是无法恢复正常,可以执行
qci_worker remove
移除节点重新接入。
自定义节点主机上已经安装了 go,但执行时提示 go 找不到?
问题描述:
自定义节点主机上已经安装了 go,但执行时提示 go 找不到?
解决方法:
- 执行以下命令,尝试重启 qci_worker。
qci_worker stop
qci_worker up -d
- 如果执行上述命令后问题依然存在,请执行如下步骤操作。
执行
which go
,查看 go 所在路径。执行
qci_worker stop
,停止 qci_worker。执行 ln -s 步骤 1 得到的 go 路径 /usr/bin/go。
执行
qci_worker up -d
,重启 qci_worker。
在阅读中是否遇到以下问题?*
您希望我们如何改进?*
如果您希望得到回复,请留下您的邮箱地址。