文档首页/ 应用管理与运维平台 ServiceStage/ 常见问题/ 持续交付/ 如何解决使用ServiceStage构建失败的问题?
更新时间:2024-10-21 GMT+08:00

如何解决使用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或过小,导致构建失败报错。

解决方法

  1. 使用root用户登录执行构建任务的CCE集群下的所有Containerd容器引擎节点。
  2. 执行如下命令将虚机镜像的max_user_namespaces默认设置为1024并确认。

    echo 1024 > /proc/sys/user/max_user_namespaces
    cat /proc/sys/user/max_user_namespaces

  3. 重新启动构建任务,请参考启动构建任务

    • 构建成功,操作结束。
    • 构建失败,请联系技术支持工程师协助处理。

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集群下至少有一个节点可供调度。

出现拉取不到代码的场景

如下图所示:

一般原因可能有三种。

  • 如果是在自己的节点上构建应用,可能是该节点没有绑定弹性ip,如上图所示"192.168.x.x"的节点没有绑定弹性ip,解决方法:去该节点绑定弹性IP
  • 授权信息过期,代码源的私人令牌权限范围不够,或者授权信息已被移除等,例如:CodeArts的代码源,拉取不到代码,可能是创建授权的时候,用户名对应的密码输错了,导致拉取不到代码。解决方法:重新授权即可。
  • 自己搭建的代码源仓库,和构建的节点网络不通,例如:在集群A的某一个节点上搭建了一个私有的bitbucket,使用集群B构建,但是集群B和集群A不是同一个vpc,内网不通,导致构建拉取不到代码。解决方法:打通网络。

构建的代码依赖自己的私有maven仓库

有以下两种解决方案。

  • 在自己的项目的根目录下增加settings.xml文件,在settings.xml指定自己的私有maven仓库地址(如果自己的私有maven仓库是需要认证的,则需要在settings.xml配置上自己的认证信息,用户名密码等)。
  • 在自己项目的pom.xml文件中,指定自己的私有maven仓库。

settings.xml和pom.xml所在路径示例如下。

基于源码构建Dockerfile设置错误

如何写Dockerfile,可以参考官网,也可以参照ServiceStage模板生成的demo

项目代码依赖CSE的SDK和搭建在CodeArts上的私有maven仓库

解决方法如下:

  1. 在自己项目根目录下增加一个“settings.xml”文件。
  2. 登录CodeArts的私有依赖库,在左侧仓库列表选择指定的maven私有依赖库。
  3. 在右上角单击,在弹出菜单选择“配置指导”
  4. 单击“下载配置文件”,下载“settings.xml”文件。
  5. 按照如下方法修改下载的“settings.xml”文件:

    1. 在<mirrorOf>中增加一个!HuaweiCloudSDK。
      <mirror>
           <id>z_mirrors</id>
           <mirrorOf>*,!releases,!snapshots,!HuaweiCloudSDK</mirrorOf>
           <url>https://repo.hauweicloud.com/repository/maven</url>
      </mirror>
    2. <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>

  6. 将修改好的“settings.xml”放在自己项目的根目录后,进行构建即可。

创建软件包构建工程时自定义Dockerfile

选择软件包后,后台会自动上传到镜像的当前工作目录。Dockerfile的示例如下图所示: