# 计算资源
本系统提供了统一的计算资源管理模块,用以管理各子产品在执行额外计算任务时需要的计算资源。
# 使用场景
目前的使用场景只有流水线构建任务,在流水线管理菜单下,对流水线进行编辑,可以设置流水线的插件执行时需要的构建资源。 未来的其他子产品,如执行API或者压力测试,分布式代码扫描等需要大量计算资源的场景,都会复用此功能。
# 主机集群
本平台支持传统的主机集群作为构建资源,虚拟机或者物理机都可以。主机集群管理提供了全部、我是管理员、我的收藏三个标签页。在“我是管理员”标签页下,对于有管理权限的主机集群,具有更多的管理操作功能。
# 新建主机组
点击新建按钮,即可新建一个主机组。在新建的向导页面,可以设置主机组的基本属性。
# 管理主机
进入“我是管理员” 标签页,可以查看有管理权限的主机组。 点击“查看节点”按钮即可对该主机组下的主机进行管理。
# 添加Runner
为了对本系统任务进行分发和调度,主机上需安装本系统的客户端Runner, 按照安装时候的提示信息即可完成安装。
工作原理: 主机runner会问询服务器端任务,并结合自己的特点来决定是否自己可以执行该任务。
网络连通性要求:根据其工作原理,runner所在主机只要能访问本平台即可,而不需要该主机具备一个本系统可以直接访问它的IP。
# Runner的shell脚本类型设置
Shell脚本用于执行构建的所有步骤的命令(如下所示的三种),在安装向导中,按需要选择:
git clone
- 构建命令
- 制作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集群上安装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缓存
如前所述,卷可以安装在构建容器中。 目前HostPath,PVC,ConfigMap 和Secret卷类型支持。用户可以为每个卷配置任意数量的卷。
# 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之外,应用于每个容器中运行的第一个过程的组的列表 |