如何解决使用ServiceStage构建失败的问题?
软件工程构建失败的原因很多,可以按照以下场景排查定位。
构建任务调度到CCE集群的Containerd容器引擎节点后构建报错
问题描述
构建失败,构建日志显示如下错误提示信息中的一种:
- /proc/sys/user/max_user_namespaces needs to be set to non-zero.
- /proc/sys/user/max_user_namespaces=100 may be low. Consider setting to >= 1024.
原因分析
由于构建任务被调度到了CCE集群的Containerd容器引擎节点,需要使用rootless来保证构建的安全性。在此过程中需要创建namespaces,节点虚机的相应设置需要能够满足构建要求,而部分虚机镜像的max_user_namespaces默认设置为0或过小,导致构建失败报错。
解决方法
- 使用root用户登录执行构建任务的CCE集群下的所有Containerd容器引擎节点。
- 执行如下命令将虚机镜像的max_user_namespaces默认设置为1024并确认。
echo 1024 > /proc/sys/user/max_user_namespaces cat /proc/sys/user/max_user_namespaces
- 重新启动构建任务,请参考启动构建任务。
- 构建成功,操作结束。
- 构建失败,请联系技术支持工程师协助处理。
CCE集群节点配置污点和容忍策略后构建报错
问题描述
构建失败,构建日志显示如下错误提示信息:
0/1 nodes are available: 1 node(s) had untolerated taint {node.kubernetes.io/route-unschedulable: }. preemption: 0/1 nodes are available: 1 Preemption is not helpful for scheduling.
原因分析
由于构建任务被调度到了CCE集群的受限调度节点上,该节点进行了污点管理配置(如报错信息中显示的node.kubernetes.io/route-unschedulable)。污点能够使节点排斥某些特定的Pod,从而避免Pod调度到该节点上,同时该CCE集群中没有其他节点可供调度,导致构建失败报错。
解决方法
请参考管理节点污点(Taint),去除受限调度节点上的污点,保证CCE集群下至少有一个节点可供调度。
出现拉取不到代码的场景
如下图所示:
一般原因可能有三种。
构建的代码依赖自己的私有maven仓库
有以下两种解决方案。
- 在自己的项目的根目录下增加settings.xml文件,在settings.xml指定自己的私有maven仓库地址(如果自己的私有maven仓库是需要认证的,则需要在settings.xml配置上自己的认证信息,用户名密码等)。
- 在自己项目的pom.xml文件中,指定自己的私有maven仓库。
settings.xml和pom.xml所在路径示例如下。
项目代码依赖CSE的SDK和搭建在CodeArts上的私有maven仓库
解决方法如下:
- 在自己项目根目录下增加一个“settings.xml”文件。
- 登录CodeArts的私有依赖库,在左侧仓库列表选择指定的maven私有依赖库。
- 在右上角单击,在弹出菜单选择“配置指导”。
- 单击“下载配置文件”,下载“settings.xml”文件。
- 按照如下方法修改下载的“settings.xml”文件:
- 在<mirrorOf>中增加一个!HuaweiCloudSDK。
<mirror> <id>z_mirrors</id> <mirrorOf>*,!releases,!snapshots,!HuaweiCloudSDK</mirrorOf> <url>https://repo.hauweicloud.com/repository/maven</url> </mirror>
- <profiles>的<repositories>下面增加一个maven仓库。
<repository> <id>HuaweiCloudSDK</id> <url>https://repo.huaweicloud.com/repository/maven/huaweicloudsdk/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository>
- 在<mirrorOf>中增加一个!HuaweiCloudSDK。
- 将修改好的“settings.xml”放在自己项目的根目录后,进行构建即可。
创建软件包构建工程时自定义Dockerfile
选择软件包后,后台会自动上传到镜像的当前工作目录。Dockerfile的示例如下图所示: