# 计算资源

本系统提供了统一的计算资源管理模块,用以管理各子产品在执行额外计算任务时需要的计算资源。

# 使用场景

目前的使用场景只有流水线构建任务,在流水线管理菜单下,对流水线进行编辑,可以设置流水线的插件执行时需要的构建资源。 未来的其他子产品,如执行API或者压力测试,分布式代码扫描等需要大量计算资源的场景,都会复用此功能。 计算资源设置

# 主机集群

本平台支持传统的主机集群作为构建资源,虚拟机或者物理机都可以。主机集群管理提供了全部、我是管理员、我的收藏三个标签页。在“我是管理员”标签页下,对于有管理权限的主机集群,具有更多的管理操作功能。 主机集群

# 新建主机组

点击新建按钮,即可新建一个主机组。在新建的向导页面,可以设置主机组的基本属性。 新建主机集群

# 管理主机

进入“我是管理员” 标签页,可以查看有管理权限的主机组。 点击“查看节点”按钮即可对该主机组下的主机进行管理。 主机管理

# 添加Runner

为了对本系统任务进行分发和调度,主机上需安装本系统的客户端Runner, 按照安装时候的提示信息即可完成安装。
工作原理: 主机runner会问询服务器端任务,并结合自己的特点来决定是否自己可以执行该任务。
网络连通性要求:根据其工作原理,runner所在主机只要能访问本平台即可,而不需要该主机具备一个本系统可以直接访问它的IP。
添加Runner

# Runner的shell脚本类型设置

Shell脚本用于执行构建的所有步骤的命令(如下所示的三种),在安装向导中,按需要选择:

  1. git clone
  2. 构建命令
  3. 制作Docker镜像
Shell 状态 描述
bash 完全支持 Bash (Bourne-shell) shell,在Bash上下文中执行的所有命令(对于所有Unix系统)
sh 完全支持 Sh (Bourne-shell) shell,在sh上下文中执行的所有命令(所有Unix系统的默认设置)
powershell 完全支持 PowerShell,所有命令都在Windows PowerShell上下文中执行。
cmd 不推荐使用 Windows批处理,所有命令都在批处理上下文中执行。

# Runner的工作模式

添加Runner时,需要选择Runner的工作模式,请按需设置,设置完Runner所有配置后,会生成一个config.toml的配置文件, 大家可以根据实际情况修改。

对于所有Linux系统,配置文件的位置:

  • root用户:/etc/devops-ci/config.toml
  • 普通用户:~/.devops-ci/config.toml

对于Windows系统,配置文件的位置:

  • ./.devops-ci/config.toml

对于MacOS系统,配置文件的位置:

  • ~/.devops-ci/config.toml

# 主机模式(machine)

【注意】流水线的插件任务除了主机类型插件,绝大多数都是基于镜像执行的,纯主机模式不能执行此类任务,在流水线设置构建资源时需注意。否则会导致任务执行报错。
此种工作模式下的Runner只能执行下发的主机类型构建任务。
生成的配置文件部分样例如下,可以根据实际情况修改

[runner]
    url = "https://sampleurl.com"
    token = "我是token"
    name = "我是备注"
    concurrency = 20
    workspace = "$HOME/workspace"
    executor = "machine"
    shell = "bash"

# docker模式(docker)

此种工作模式下的Runner可以执行下发的需要容器环境才能执行的任务,需要在runner上先自行安装docker。
生成的配置文件部分样例如下,可以根据实际情况修改

[runner]
    url = "https://sampleurl.com"
    token = "我是token"
    name = "我是备注"
    concurrency = 20
    workspace = "$HOME/workspace"
    executor = "docker"
    shell = "bash"
    [runner.docker]
      tls_verify = false
      disable_entrypoint_overwrite = false
      oom_kill_disable = false
      disable_cache = false
      volumes = ["/root/.m2/repository:/root/.m2/repository:rw","/root/cache/npm:/root/.npm:rw"]
      shm_size = 0

# K8S集群

除了主机集群,本系统还支持使用Kubernetes集群作为构建资源 K8S集群

# 新建

点击新建按钮,即可创建新的K8S集群,但是此时只是一个名字,并没有实际的集群可以使用。
需要在真正的实体K8S集群上安装runner,并建立和平台的通信后,才会纳入平台的统一管理并可以真正使用。

# 安装Agent

新建完毕后,查看集群详情,按提示安装Agent

# 关键字

以下关键字有助于定义Runner在Kubernetes中的行为:

  • namespace: 运行Kubernetes Pods和Job的命名空间。

  • service_account: 用于进行Kubernetes API调用的默认服务帐户。

  • privileged: 使用特权运行容器(true或false)。

  • cpu_request: 构建容器请求的CPU。

  • cpu_limit: 构建容器CPU的上限。

  • memory_request: 构建容器请求的内存。

  • memory_limit: 构建容器内存的上限。

  • helper_cpu_request: 构建辅助容器请求的CPU。

  • helper_cpu_limit: 构建辅助容器CPU的上限。

  • helper_memory_request: 构建辅助容器请求的内存。

  • helper_memory_limit: 构建辅助容器内存的上限。

  • pull_policy: 拉去镜像的策略: never, if-not-present, always。默认:always

  • image_pull_secrets: 用于拉取Docker镜像的密钥。

  • terminationGracePeriodSeconds: 发送Pod中运行的进程之后的持续时间以及终止信号以及使用kill信号强行终止进程的时间。

  • poll_interval: 多久检查一次它刚刚创建的Kubernetes Pod的状态(默认3秒)。

  • poll_timeout: 运行者尝试连接到刚创建的容器超时之前需要经过的时间(以秒为单位),用于排队一次集群可以处理的更多构建(默认180秒)。

  • pod_security_context: 通过配置文件进行配置,这将为构建容器设置容器安全上下文。阅读有关安全策略的更多信息

  • volumes: 通过配置文件配置,将在构建容器中安装的卷的列表。 阅读有关使用卷的更多信息

# Kubernetes缓存

如前所述,卷可以安装在构建容器中。 目前HostPathPVCConfigMapSecret卷类型支持。用户可以为每个卷配置任意数量的卷。

# Host Path volumes

HostPath volume (opens new window) 配置Kubernetes挂载容器内部 的指定主机路径,卷可以用以下选项:

字段 类型 是否必选 描述
name string 卷名称
mount_path string 容器内部应安装卷的路径
host_path string 主机路径,如果未指定,则将其设置为与mount_path相同的路径
read_only boolean 将卷设置为只读模式(默认为false)
# PVC volumes

PVC volume (opens new window) 配置Kubernetes使用 PersistentVolumeClaim 在Kubernetes集群中定义的代码并将其安装在容器内。卷可以使用以下选项进行配置:

字段 类型 是否必选 描述
name string 卷的名称,同时应使用的_PersistentVolumeClaim_的名称
mount_path string 容器内部应安装卷的路径
read_only boolean 将卷设置为只读模式(默认为false)

# ConfigMap volumes

ConfigMap volume (opens new window) 卷配置Kubernetes 使用_configMap_在Kubernetes集群中定义的代码并将其安装在容器内。

字段 类型 是否必选 描述
name string 卷的名称,同时应使用的_configMap_的名称
mount_path string 容器内部应安装卷的路径
read_only boolean 将卷设置为只读模式(默认为false)
items map[string]string 使用的_configMap_中键值的映射。
# Secret volumes

Secret volume (opens new window) 配置Kubernetes使用集群中定义的_secret_并将其安装在容器内部。

字段 类型 是否必选 描述
name string 卷的名称,同时应使用的_secret_的名称
mount_path string 容器内部应安装卷的路径
read_only boolean 将卷设置为只读模式(默认为false)
items map[string]string 使用的_secret_中键值的映射。
# Empty Dir volumes

_emptyDir_卷 (opens new window) 配置Kubernetes在容器内部安装emptyDir。

字段 类型 是否必选 描述
name string 卷的名称
mount_path string 容器内部应安装卷的路径
medium string “内存”将提供一个tmpfs,否则默认为节点磁盘存储(默认为“”)
# Pod Security Context

Pod Security Context (opens new window) 配置job在构建Pod上设置Pod安全策略。

字段 类型 是否必选 描述
fs_group int 一个特殊的组,适用于容器中的所有容器
run_as_group int 用于运行容器entrypoint的GID
run_as_non_root boolean 指示容器必须以非root用户身份运行
run_as_user int 用于运行容entrypoint的UID
supplemental_groups int list 除容器的主要GID之外,应用于每个容器中运行的第一个过程的组的列表