华为云用户手册

  • DataArts Studio 控制台功能依赖的角色或策略 DataArts Studio服务各组件功能所需依赖服务的权限如表2所示。在实际授权场景中,推荐为开发者用户配置DataArts Studio服务级别的依赖服务最小权限(可参考如何最小化授权 IAM 用户使用DataArts Studio,为用户配置最小权限),开发者用户的最小依赖服务权限如表3所示。 在实际授权场景中,DAYU Administrator和DAYU User系统角色已经预置了依赖服务的管理员权限。为了避免普通用户/用户组被授予DAYU User系统角色导致其拥有的依赖服务权限过大的风险,您可以在为用户组授权DAYU User系统角色后,手动删除用户组的周边依赖权限,再为用户组授予所需依赖服务的最小权限合集。 表2 DataArts Studio控制台依赖服务的角色或策略 控制台功能 依赖服务 需配置角色/策略 具体功能 管理中心 BSS bss:coupon:view bss:renewal:update bss:discount:view bss:order:view bss:order:pay bss:order:update 创建增量包或DataArts Studio实例 KMS kms:cmk:get kms:cmk:list kms:cmk:create kms:cmk:decrypt kms:cmk:encrypt kms:dek:create kms:dek:encrypt kms:dek:decrypt 创建数据连接时,使用KMS加解密 DWS dws:cluster:list dws:cluster:getDetail dws:openAPICluster:getDetail 创建DWS数据连接 MRS mrs:cluster:get mrs:cluster:list 创建MRS数据连接 VPC vpc:publicIps:get vpc:publicIps:list vpc:vpcs:get vpc:subnets:get 创建MRS数据连接 RDS rds:*:get rds:*:list 创建RDS数据连接 数据集成 VPC vpc:publicIps:get vpc:publicIps:list vpc:vpcs:get vpc:vpcs:list vpc:subnets:get vpc:securityGroups:get vpc:firewalls:list vpc:routeTables:list vpc:subNetworkInterfaces:list 创建 CDM 集群或DataArts Studio实例 E CS ecs:flavors:get ecs:cloudServerFlavors:get ecs:availabilityZones:list 创建CDM集群或DataArts Studio实例 CDM cdm:cluster:create 创建CDM集群 KMS kms:cmk:get kms:cmk:list kms:cmk:create kms:cmk:decrypt kms:cmk:encrypt kms:dek:create kms:dek:encrypt kms:dek:decrypt 创建数据连接时,使用KMS加解密 MRS mrs:cluster:get mrs:cluster:list mrs:job:get mrs:job:list 创建MRS数据连接 DWS dws:cluster:list dws:cluster:getDetail dws:openAPICluster:getDetail 创建DWS数据连接 CDM cdm:cluster:get cdm:cluster:list cdm:link:operate cdm:job:operate 通过CDM控制台操作时,需要CDM服务权限 CES ces:*:get ces:*:list 查看CES监控 CSS css:*:get css:*:list 创建CSS连接 CloudTable cloudtable:*:get cloudtable:*:list 创建CloudTable连接 RDS rds:*:get rds:*:list 创建RDS连接 Config rms:resources:list 创建CDM集群 数据开发 OBS obs:object:GetObject obs:object:PutObject obs:bucket:GetBucketLocation obs:bucket:ListAllMyBuckets obs:bucket:ListBucket obs:bucket:CreateBucket 运行脚本、运行作业以及备份作业 SMN smn:topic:publish smn:topic:list 作业通知 KMS kms:cmk:get kms:cmk:list kms:cmk:create kms:cmk:decrypt kms:cmk:encrypt kms:dek:create kms:dek:encrypt kms:dek:decrypt 创建数据连接时,使用KMS加解密 MRS mrs:cluster:get mrs:cluster:list mrs:job:submit mrs:job:delete mrs:job:stop mrs:sql:execute mrs:sql:cancel mrs:job:get mrs:job:list MRS类型作业节点运行: MRS Presto SQL、MRS Spark、MRS Spark Python、MRS Flink Job、 MRS MapReduce MRS Spark SQL、MRS Hive SQL DLI dli:queue:submitJob dli:jobs:create dli:jobs:update dli:jobs:get dli:jobs:list dli:jobs:listAll DLI类型作业节点运行: DLI SQL、DLI Spark OBS obs:object:GetObject obs:object:PutObject obs:object:DeleteObject obs:bucket:GetBucketLocation obs:bucket:ListAllMyBuckets obs:bucket:ListBucket obs:bucket:ListBucketVersions obs:bucket:CreateBucket obs:bucket:DeleteBucket OBS类型作业节点运行: Create OBS、Delete OBS、OBS Manager DWS dws:cluster:list dws:cluster:getDetail dws:openAPICluster:getDetail 创建DWS数据连接 CDM cdm:cluster:get cdm:cluster:list cdm:job:operate 数据连接需要Agent的相关脚本、作业,以及CDM作业运行: RDS SQL、DWS SQL、Hive SQL、SPARK SQL、Shell、Python CES ces:metricData:list 运维概览,查询DLI队列CPU GES ges:graph:access ges:graph:operate ges:graph:list ges:graph:getDetail ges:metadata:create ges:metadata:operate ges:metadata:delete ges:metadata:list ges:metadata:getDetail ges:jobs:list ges:jobs:getDetail Import GES作业节点运行 ECS ecs:servers:list ecs:servers:get ecs:servers:stop ecs:servers:start ecs:cloudServers:list Open/Close Resource作业节点运行,创建主机连接 DLI dli:queue:submitJob dli:queue:cancelJob dli:group:useGroup dli:group:getGroup dli:group:updateGroup dli:group:deleteGroup dli:group:listAllGroup dli:database:createDatabase dli:database:dropDatabase dli:database:displayDatabase dli:database:displayAllDatabases dli:database:explain dli:database:createView dli:database:createTable dli:database:displayAllTables dli:database:createFunction dli:database:describeFunction dli:database:showFunctions dli:database:dropFunction dli:table:select dli:table:update dli:table:delete dli:table:dropTable dli:table:describeTable dli:table:showCreateTable dli:table:showPartitions dli:table:showSegments dli:table:showTableProperties dli:table:insertOverwriteTable dli:table:insertIntoTable dli:table:compaction dli:table:truncateTable dli:table:alterView dli:table:alterTableRename dli:table:alterTableAddColumns dli:table:alterTableDropColumns dli:table:alterTableChangeColumn dli:table:alterTableSetLocation dli:table:alterTableAddPartition dli:table:alterTableRenamePartition dli:table:alterTableSetProperties dli:table:alterTableRecoverPartition dli:table:alterTableDropPartition dli:column:select dli:jobs:create dli:jobs:delete dli:jobs:start dli:jobs:stop dli:jobs:update dli:jobs:export dli:jobs:get dli:jobs:list dli:jobs:listAll dli:resource:useResource dli:resource:updateResource dli:resource:deleteResource dli:resource:getResource dli:resource:listAllResource dli:variable:update dli:variable:delete DLI类型作业/脚本运行 IAM iam:agencies:listAgencies 获取作业委托 DIS DIS Operator DIS User DIS类型作业节点运行: DIS Stream、DIS Dump、DIS Client SWR SWR Admin 仅当在数据开发组件作业中使用DLI Spark节点选择自定义镜像时,需要 容器镜像服务 中的镜像读取权限。 推荐通过镜像授权管理,添加所需镜像的读取权限。不推荐直接为用户授予SWR Admin系统角色, 可能存在权限过大的风险。 数据目录 OBS obs:object:GetObject obs:bucket:GetBucketStorage obs:bucket:GetBucketLocation obs:bucket:ListAllMyBuckets obs:bucket:ListBucket OBS元数据采集 DIS dis:streams:list dis:transferTasks:list DIS元数据采集 CSS css:cluster:list CSS元数据采集 GES ges:graph:list ges:graph:getDetail ges:metadata:list ges:metadata:getDetail GES元数据采集 DLI dli:database:displayDatabase dli:database:displayAllDatabases dli:table:select dli:table:describeTable dli:table:showPartitions dli:table:showTableProperties dli:jobs:create dli:jobs:get DLI元数据采集&数据概要分析 CDM cdm:cluster:list CSS元数据采集 数据质量 SMN smn:topic:publish smn:topic:list 配置作业通知 OBS obs:object:GetObject obs:object:PutObject obs:bucket:GetBucketLocation obs:bucket:ListAllMyBuckets obs:bucket:ListBucket obs:bucket:CreateBucket 导出质量报告 MRS mrs:job:submit mrs:sql:execute mrs:sql:cancel mrs:job:get MRS质量作业运行 DLI dli:queue:submitJob dli:jobs:get dli:jobs:listAll DLI质量作业运行 数据安全 DLI dli:queue:submitJob dli:queue:cancelJob dli:database:displayDatabase dli:database:displayAllDatabases dli:database:displayAllTables dli:table:describeTable dli:jobs:create dli:jobs:stop dli:jobs:get dli:resource:deleteResource dli:resource:getResource dli:resource:listAllResource DLI权限管控 DWS dws:cluster:list dws:cluster:getDetail dws:openAPICluster:getDetail DWS权限管控 MRS mrs:cluster:list mrs:job:submit mrs:job:stop MRS权限管控 KMS kms:cmk:list kms:cmk:encrypt kms:cmk:decrypt 使用KMS加解密 CDM 任意cdm权限,例如cdm:cluster:get DWS和MRS权限管控 表3 开发者用户的依赖服务最小权限合集 权限类型 角色与策略权限-系统角色 角色与策略权限-自定义策略 角色与策略权限-自定义策略 是否必配 必配 必配 必配 权限 DIS Operator DIS User (可选,不推荐)SWR Admin 说明: 仅当在数据开发组件作业中使用DLI Spark节点选择自定义镜像时,需要容器 镜像服务 中的镜像读取权限。 推荐通过镜像授权管理,添加所需镜像的读取权限。不推荐直接为用户授予SWR Admin系统角色, 可能存在权限过大的风险。 依赖的全局级(global级)云服务的自定义策略DataArtsStudio_PermissionsOfDependentServices_global: { "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "obs:object:GetObject", "obs:object:PutObject", "obs:object:DeleteObject", "obs:bucket:GetBucketStorage", "obs:bucket:GetBucketLocation", "obs:bucket:ListAllMyBuckets", "obs:bucket:ListBucket", "obs:bucket:ListBucketVersions", "obs:bucket:CreateBucket", "obs:bucket:DeleteBucket", "rms:resources:list", "iam:agencies:listAgencies" ] } ] } 依赖的项目级(region级)云服务的自定义策略DataArtsStudio_PermissionsOfDependentServices_region: { "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "cdm:cluster:get", "cdm:cluster:list", "cdm:cluster:create", "cdm:link:operate", "cdm:job:operate", "ces:*:get", "ces:*:list", "cloudtable:*:get", "cloudtable:*:list", "css:*:get", "css:*:list", "dis:streams:list", "dis:transferTasks:list", "dli:queue:submitJob", "dli:queue:cancelJob", "dli:table:insertOverwriteTable", "dli:table:insertIntoTable", "dli:table:alterView", "dli:table:alterTableRename", "dli:table:compaction", "dli:table:truncateTable", "dli:table:alterTableDropColumns", "dli:table:alterTableSetProperties", "dli:table:alterTableChangeColumn", "dli:table:showSegments", "dli:table:alterTableRecoverPartition", "dli:table:dropTable", "dli:table:update", "dli:table:alterTableDropPartition", "dli:table:alterTableAddPartition", "dli:table:alterTableAddColumns", "dli:table:alterTableRenamePartition", "dli:table:delete", "dli:table:alterTableSetLocation", "dli:table:describeTable", "dli:table:showPartitions", "dli:table:showCreateTable", "dli:table:showTableProperties", "dli:table:select", "dli:resource:updateResource", "dli:resource:useResource", "dli:resource:getResource", "dli:resource:listAllResource", "dli:resource:deleteResource", "dli:database:explain", "dli:database:createDatabase", "dli:database:dropFunction", "dli:database:createFunction", "dli:database:displayAllDatabases", "dli:database:displayAllTables", "dli:database:displayDatabase", "dli:database:describeFunction", "dli:database:createView", "dli:database:createTable", "dli:database:showFunctions", "dli:database:dropDatabase", "dli:group:useGroup", "dli:group:updateGroup", "dli:group:listAllGroup", "dli:group:getGroup", "dli:group:deleteGroup", "dli:column:select", "dli:jobs:start", "dli:jobs:export", "dli:jobs:update", "dli:jobs:list", "dli:jobs:listAll", "dli:jobs:get", "dli:jobs:delete", "dli:jobs:create", "dli:jobs:stop", "dli:variable:update", "dli:variable:delete", "dws:cluster:list", "dws:cluster:getDetail", "dws:openAPICluster:getDetail", "ecs:servers:get", "ecs:servers:list", "ecs:servers:stop", "ecs:servers:start", "ecs:flavors:get", "ecs:cloudServerFlavors:get", "ecs:cloudServers:list", "ecs:availabilityZones:list", "ges:graph:access", "ges:metadata:create", "ges:jobs:list", "ges:graph:operate", "ges:jobs:getDetail", "ges:graph:getDetail", "ges:graph:list", "ges:metadata:list", "ges:metadata:getDetail", "ges:metadata:delete", "ges:metadata:operate", "kms:cmk:get", "kms:cmk:list", "kms:cmk:create", "kms:cmk:decrypt", "kms:cmk:encrypt", "kms:dek:create", "kms:dek:encrypt", "kms:dek:decrypt", "mrs:cluster:get", "mrs:cluster:list", "mrs:job:get", "mrs:job:list", "mrs:job:submit", "mrs:job:stop", "mrs:job:delete", "mrs:sql:execute", "mrs:sql:cancel", "rds:*:get", "rds:*:list", "smn:topic:publish", "smn:topic:list", "vpc:publicIps:list", "vpc:publicIps:get", "vpc:vpcs:get", "vpc:vpcs:list", "vpc:subnets:get", "vpc:securityGroups:get", "vpc:firewalls:list", "vpc:routeTables:list", "vpc:subNetworkInterfaces:list" ] } ] }
  • DataArts Studio权限 默认情况下,管理员创建的IAM用户没有任何权限,需要将其加入用户组,并给用户组授予策略或角色,才能使得用户组中的用户获得对应的权限,这一过程称为授权。授权后,用户就可以基于被授予的权限对云服务进行操作。 DataArts Studio部署时通过物理区域划分,为项目级服务。授权时,“作用范围”需要选择“区域级项目”,然后在指定区域对应的项目中设置相关权限,并且该权限仅对此项目生效;如果在“所有项目”中设置权限,则该权限在所有区域项目中都生效。访问DataArts Studio时,需要先切换至授权区域。 DataArts Studio仅支持基于系统角色的授权,不支持策略授权。为了实现精细的权限管控,DataArts Studio提供了系统角色+工作空间角色授权的能力,由工作空间角色授权具体的操作权限,并支持自定义不同权限点的工作空间角色。 IAM提供了以下两种授权机制。注意,DataArts Studio仅支持其中的IAM角色方式,不支持IAM策略。 IAM角色:IAM最初提供的一种根据用户的工作职能定义权限的粗粒度授权机制。该机制以服务为粒度,提供有限的服务相关角色用于授权。传统的IAM角色并不能满足用户对精细化授权的要求,无法完全达到企业对权限最小化的安全管控要求。 IAM策略:IAM最新提供的一种细粒度授权的能力,可以精确到具体服务的操作、资源以及请求条件等。基于策略的授权是一种更加灵活的授权方式,能够满足企业对权限最小化的安全管控要求。 如图1和表1所示,DataArts Studio的IAM系统角色包括DAYU Administrator、DAYU User和DataArts Studio User;工作空间角色是基于IAM角色DAYU User或DataArts Studio User进一步授予的,权限列表列出了DataArts Studio常用操作与工作空间角色的授权关系,您可以参照这些权限列表选择合适的角色。 图1 权限体系 表1 DataArts Studio系统角色 系统角色名称 描述 类别 DAYU Administrator 实例管理员,拥有对DataArts Studio实例及工作空间的所有管理权限、依赖服务权限,以及所有工作空间内的所有业务操作权限。 说明: Tenant Administrator具有除 统一身份认证 服务外,其他所有服务的所有执行权限。即Tenant Administrator权限的用户也拥有对DataArts Studio的所有执行权限。 系统角色 DAYU User 普通用户,具备DataArts Studio实例及工作空间的查看权限,以及依赖服务权限。普通用户需要被授予任一工作空间角色后,才能拥有对应角色的业务操作权限。 工作空间有管理员、开发者、部署者、运维者和访客五种预置角色和自定义角色,每种角色的介绍如下,具体操作权限请参见权限列表。 管理员:工作空间管理员,拥有工作空间内所有的业务操作权限。建议将项目负责人、开发责任人、运维管理员设置为管理员角色。 开发者:开发者拥有工作空间内创建、管理工作项的业务操作权限。建议将任务开发、任务处理的用户设置为开发者。 运维者:运维者具备工作空间内运维调度等业务的操作权限,但无法更改工作项及配置。建议将运维管理、状态监控的用户设置为运维者。 访客:访客可以查看工作空间内的数据,但无法操作业务。建议将只查看空间内容、不进行操作的用户设置为访客。 部署者:企业模式独有,具备工作空间内任务包发布的相关操作权限。在企业模式中,开发者提交脚本或作业版本后,系统会对应产生发布任务。开发者确认发包后,需要部署者审批通过,才能将修改后的作业同步到生产环境。 自定义角色:如果预置角色不能满足您的需求,您也可以创建自定义角色。自定义角色的权限可自由配置,实现业务操作权限最小化。 系统角色 DataArts Studio User 普通用户,具备DataArts Studio实例及工作空间的查看权限,但不具备依赖服务权限。普通用户需要被授予依赖服务权限+任一工作空间角色后,才能拥有对应角色的业务操作权限。 依赖服务权限详见表2。 工作空间有管理员、开发者、部署者、运维者和访客五种预置角色和自定义角色,每种角色的介绍如下,具体操作权限请参见权限列表。 管理员:工作空间管理员,拥有工作空间内所有的业务操作权限。建议将项目负责人、开发责任人、运维管理员设置为管理员角色。 开发者:开发者拥有工作空间内创建、管理工作项的业务操作权限。建议将任务开发、任务处理的用户设置为开发者。 运维者:运维者具备工作空间内运维调度等业务的操作权限,但无法更改工作项及配置。建议将运维管理、状态监控的用户设置为运维者。 访客:访客可以查看工作空间内的数据,但无法操作业务。建议将只查看空间内容、不进行操作的用户设置为访客。 部署者:企业模式独有,具备工作空间内任务包发布的相关操作权限。在企业模式中,开发者提交脚本或作业版本后,系统会对应产生发布任务。开发者确认发包后,需要部署者审批通过,才能将修改后的作业同步到生产环境。 自定义角色:如果预置角色不能满足您的需求,您也可以创建自定义角色。自定义角色的权限可自由配置,实现业务操作权限最小化。 系统角色
  • 访问控制 您可以使用统一身份认证服务(Identity and Access Management,简称IAM)进行精细的权限管理。该服务提供用户身份认证、权限分配、访问控制等功能,可以帮助您安全地控制华为云资源的访问。关于IAM的详细介绍,请参见IAM产品介绍。 DataArts Studio仅支持基于系统角色的授权,不支持策略授权。为了实现精细的权限管控,DataArts Studio提供了系统角色+工作空间角色授权的能力,由工作空间角色授权具体的操作权限,并支持自定义不同权限点的工作空间角色。 如图1和表1所示,DataArts Studio的IAM系统角色包括DAYU Administrator、DAYU User和DataArts Studio User;工作空间角色是基于IAM角色DAYU User或DataArts Studio User进一步授予的,权限列表列出了DataArts Studio常用操作与工作空间角色的授权关系,您可以参照这些权限列表选择合适的角色。 图1 权限体系 表1 DataArts Studio系统角色 系统角色名称 描述 类别 DAYU Administrator 实例管理员,拥有对DataArts Studio实例及工作空间的所有管理权限、依赖服务权限,以及所有工作空间内的所有业务操作权限。 说明: Tenant Administrator具有除统一身份认证服务外,其他所有服务的所有执行权限。即Tenant Administrator权限的用户也拥有对DataArts Studio的所有执行权限。 系统角色 DAYU User 普通用户,具备DataArts Studio实例及工作空间的查看权限,以及依赖服务权限。普通用户需要被授予任一工作空间角色后,才能拥有对应角色的业务操作权限。 工作空间有管理员、开发者、部署者、运维者和访客五种预置角色和自定义角色,每种角色的介绍如下,具体操作权限请参见权限列表。 管理员:工作空间管理员,拥有工作空间内所有的业务操作权限。建议将项目负责人、开发责任人、运维管理员设置为管理员角色。 开发者:开发者拥有工作空间内创建、管理工作项的业务操作权限。建议将任务开发、任务处理的用户设置为开发者。 运维者:运维者具备工作空间内运维调度等业务的操作权限,但无法更改工作项及配置。建议将运维管理、状态监控的用户设置为运维者。 访客:访客可以查看工作空间内的数据,但无法操作业务。建议将只查看空间内容、不进行操作的用户设置为访客。 部署者:企业模式独有,具备工作空间内任务包发布的相关操作权限。在企业模式中,开发者提交脚本或作业版本后,系统会对应产生发布任务。开发者确认发包后,需要部署者审批通过,才能将修改后的作业同步到生产环境。 自定义角色:如果预置角色不能满足您的需求,您也可以创建自定义角色。自定义角色的权限可自由配置,实现业务操作权限最小化。 系统角色 DataArts Studio User 普通用户,具备DataArts Studio实例及工作空间的查看权限,但不具备依赖服务权限。普通用户需要被授予依赖服务权限+任一工作空间角色后,才能拥有对应角色的业务操作权限。 依赖服务权限详见表2。 工作空间有管理员、开发者、部署者、运维者和访客五种预置角色和自定义角色,每种角色的介绍如下,具体操作权限请参见权限列表。 管理员:工作空间管理员,拥有工作空间内所有的业务操作权限。建议将项目负责人、开发责任人、运维管理员设置为管理员角色。 开发者:开发者拥有工作空间内创建、管理工作项的业务操作权限。建议将任务开发、任务处理的用户设置为开发者。 运维者:运维者具备工作空间内运维调度等业务的操作权限,但无法更改工作项及配置。建议将运维管理、状态监控的用户设置为运维者。 访客:访客可以查看工作空间内的数据,但无法操作业务。建议将只查看空间内容、不进行操作的用户设置为访客。 部署者:企业模式独有,具备工作空间内任务包发布的相关操作权限。在企业模式中,开发者提交脚本或作业版本后,系统会对应产生发布任务。开发者确认发包后,需要部署者审批通过,才能将修改后的作业同步到生产环境。 自定义角色:如果预置角色不能满足您的需求,您也可以创建自定义角色。自定义角色的权限可自由配置,实现业务操作权限最小化。 系统角色
  • 执行变更流水线 访问CodeArts Pipeline首页,进入项目下流水线。 单击“微服务”,进入微服务列表页面。 单击微服务名称,进入微服务“概览”页面。 单击“流水线”,进入微服务流水线列表页面。 单击流水线名称,进入流水线“执行历史”页面。 单击右上角“执行”,弹出“执行配置”对话框,进行如下配置。 图2 配置变更流水线执行信息 变更列表:变更列表展示阶段状态为“待发布”和“发布中”的变更,运行变更流水线时需要选择一个或多个变更。 运行参数配置:如果流水线配置了运行时参数,请根据需要设置参数值并保存,可参考流水线参数应用示例。 执行阶段配置:流水线支持选择任务执行,可以选择一个或多个,默认执行全部任务。 执行描述:填写本次运行的调试信息。 配置完成后,单击“执行”,进入变更流水线执行详情页面。 图3 执行变更流水线 变更流水线运行时会默认添加“合并集成分支”和“合并主干”阶段。 合并集成分支:变更流水线会自动从主干分支拉出一条新分支,并将本次运行变更的所有特性分支集成到该新分支,然后通过这条集成分支来运行流水线。 合并主干:将集成分支合并回主干分支。 执行完成后,可查看流水线执行结果。 变更流水线执行成功时,会将本次运行选择的所有变更状态改为“已发布”状态。 单击流水线名称,进入“流水线详情”页面 单击流水线源卡片的“查看更多”,弹出运行变更侧滑框,展示本次流水线运行时选择的变更信息。 单击列表内“变更标题”可以跳转到变更详情页面。 单击“发布列表”页签,切换到“发布列表”页面 发布列表页面展示所有阶段状态为“待发布”和“发布中”的变更。 列表支持在搜索栏中输入变更名称关键字进行搜索。 单击“操作”列,弹出“退出发布”对话框,单击“确认”会将变更退出变更流水线的发布列表,变更状态重置为“开发中”。 阶段状态为“发布中”的变更,如果变更流水线正在运行,则需要等待变更流水线运行完成或停止变更流水线后才可以退出发布。
  • 新建流水线微服务 访问CodeArts Pipeline首页,进入项目下流水线。 单击“微服务”,进入微服务列表页面。 单击“新建微服务”,进入“新建微服务”页面,配置相关参数。 表1 新建微服务 参数项 说明 所属项目 微服务所在项目,不可更改。 微服务名称 微服务的名称。支持大小写英文字母、数字、“_”,不超过128个字符。 流水线源 流水线代码来源,当前仅支持Repo。 说明: 可暂不选择流水线源,微服务创建成功后,可根据需要通过单击微服务名称,进入微服务概览页再进行关联。 代码仓 微服务关联的代码仓库,选择已创建的代码仓库。 说明: 一个代码仓只能关联一个微服务。 默认分支 微服务关联的默认分支,执行微服务流水线时默认使用的分支。 说明: 变更流水线执行完成后,所有变更特性分支都将会合入默认分支。 语言 微服务的开发语言,支持Java、Python、Node.js、Go、.Net、C++、PHP。 描述 长度不超过1024个字符。 单击“确定”,完成微服务创建并进入微服务“概览”页。 概览页展示微服务的创建人、创建时间、代码源等信息,可修改微服务开发语言、关联的代码仓库和描述信息。 更换代码仓库时,如果微服务下存在没有关闭的变更或运行中的流水线,页面会弹出“数据处理”侧滑框,需先关闭所有变更并停止所有运行中的流水线。 返回微服务列表,可以查看已创建的微服务,列表项说明如下。 表2 微服务列表 列表项 说明 微服务 微服务的名称。 创建人 创建微服务的用户名。 创建时间 创建微服务的时间,将鼠标悬浮至“创建时间”列,单击,可以根据创建时间排序微服务。 状态 展示微服务当前状态信息,创建后会自动处于激活状态。 操作 单击可收藏该微服务,收藏成功后图标变为,再次单击可取消收藏;单击,可删除该微服务。删除微服务,微服务内所有变更记录和流水线都将会被删除,请谨慎操作。 微服务列表展示项目下的所有微服务。 支持在搜索栏中输入微服务名称关键字进行搜索。
  • 新建变更流水线 访问CodeArts Pipeline首页,进入项目下流水线。 单击“微服务”,进入微服务列表页面。 单击微服务名称,进入微服务“概览”页面。 单击“流水线”,进入微服务流水线列表页面。 单击“新建流水线”,进入“基本信息 ”页面,配置相关参数。 表3 新建流水线 参数项 说明 所属项目 微服务所在的项目。 名称 流水线的名称,默认根据当前时间生成。支持中文、大小写英文字母、数字、“-”、“_”,长度不超过128个字符。 流水线源 流水线代码来源,微服务下流水线仅支持Repo。 代码仓 微服务关联的代码仓库。 说明: 修改微服务的代码仓库,微服务下所有流水线配置的代码仓库会自动更改。 默认分支 微服务关联的默认分支。 说明: 修改微服务的默认分支,微服务下所有流水线配置的默认分支会自动更改。 Repo HTTPS授权 配置授权扩展点以提升代码库操作权限,主要用于微服务变更流水线和部分仓库操作插件。单击“新建授权”,可添加CodeArts Repo HTTPS服务扩展点,配置方法请参考新建CodeArts服务扩展点。 说明: 新建CodeArts Repo HTTPS服务扩展点时,如果用户名密码填写错误,会授权失败并导致流水线执行失败。具体问题请参考常见问题。 别名 仓库别名。支持大小写英文字母、数字、“_”,长度不超过128个字符。 设置别名后可生成仓库对应的系统参数,如:“别名_REPOSITORY_NAME”,表示仓库名称。生成的参数可在参数设置页面查看,并在流水线中通过“${参数名}”进行引用。 基于变更触发 开启“基于变更触发”开关的流水线即为变更流水线,在微服务流水线列表中,变更流水线会被标识为。 说明: 单个微服务下仅允许存在一条基于变更触发的流水线。 描述 长度不超过1024个字符。 单击“下一步”,进入“选择模板”页面,根据需要选择对应模板,在模板基础上快速新建任务;也可以选择“空白模板”,即不使用模板,直接新建。 单击“确定”,根据需要编排流水线,然后单击“保存”。
  • 代码化新建流水线 访问CodeArts Pipeline首页。 单击“新建流水线”,进入“基本信息”页面,参考表1配置流水线基本信息。 表1 流水线基本信息参数说明 参数项 说明 名称 流水线的名称,自定义。支持中文、大小写英文字母、数字、“-”、“_”,长度不超过128个字符。 委托URN IAM的委托唯一标识,配置后,执行流水线中任务时使用委托身份和权限访问其他云服务,否则使用运行人的身份和权限。 所属项目 流水线归属项目。 从流水线服务首页入口新建流水线,请根据实际需要选择已创建的项目。 从项目下流水线入口新建流水线,所属项目默认为当前项目,不可更改。 流水线源 选择“Repo”:即CodeArts Repo,提供企业代码托管的全方位服务,为软件开发者提供基于Git的在线 代码托管服务 。 说明: YAML化流水线仅支持使用CodeArts Repo代码仓。 创建方式 选择“YAML化编排”:以代码化YAML方式编排流水线,支持语法自动补齐和校验,方便多流水线批量配置。 代码仓 流水线关联的代码仓库。 默认分支 仓库默认分支,手工或定时执行流水线时默认使用的分支。 配置方式 新建yaml文件:创建一个新的YAML文件。 已有yaml文件:基于已有YAML文件进行编排,编排后的内容会覆盖原YAML文件。YAML文件编写请参考YAML语法规范。 选择yaml文件 配置方式选择“已有yaml文件”时,需设置此参数。 选择提前准备好并存储在代码仓库的YAML文件:选择对应分支并输入YAML文件的相对路径。 Repo HTTPS授权 配置授权扩展点以提升代码库操作权限,当前主要用于流水线服务的微服务变更功能模块及其相关插件。可选择准备工作中提前创建的扩展点,也可单击“新建授权”进行创建,具体操作请参考新建CodeArts服务扩展点。 别名 仓库别名,设置别名后可基于别名生成仓库对应的系统参数,如:“别名_REPOSITORY_NAME”,表示仓库名称。生成的参数可在参数设置页面查看,并在流水线中通过“${参数名}”进行引用。 描述 不超过1024个字符。 配置完基本信息,单击“确定”,进入“任务编排”页面。 左侧为YAML编辑区域,请参考YAML语法规范编写YAML。 右侧为流水线插件列表,请根据需要添加步骤yaml。 编排过程支持语法规范校验;单击“预览”,可切换至图形化界面预览效果。 编排完任务,单击“保存”,填写提交信息,选择推送分支。 选项一表示推送到已有分支:如果是“新建yaml文件”方式新建流水线,已有分支为默认分支;如果是基于“已有yaml文件”方式新建流水线,已有分支则为YAML文件所在的分支。 选项二表示推送到新分支:基于上述已有分支创建一个新分支,勾选“创建合并请求”,则会创建一个从新分支到已有分支的合并请求。 单击“确定”,完成流水线创建。
  • YAML文件示例 为了让您快速理解YAML化流水线,以下通过流水线串联编译构建任务、代码检查任务、部署任务,并在编译构建任务中引用流水线参数的YAML文件为您介绍YAML整体结构。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 env: # 以键值对的形式定义环境变量,定义后可在流水线的任意任务中引用 image_version: 1.0.0 jobs: # 定义组成流水线的任务 build: # 任务ID,定义任务的唯一标识 name: maven build # 任务的名称,在图形化界面中会展示该名称 steps: # 定义组成任务的步骤 - name: My build step # 步骤的名称,在图形化界面中会展示该名称 uses: CodeArtsBuild # 指定步骤运行的插件 with: # 以键值对的形式定义插件的运行参数,可引用env中定义的变量。 jobId: 878b4d13cb284d9e8f33f988a902f57c # 任务id。获取方法:在任务详情页,拷贝浏览器URL末尾的32位数字、字母组合的字符串,即为任务ID。 artifactIdentifier: my_image version: ${{ env.image_version }} check: name: code check steps: - name: My check step uses: CodeArtsCheck with: jobId: 43885d46e13d4bf583d3a648e9b39d1e checkMode: full deploy: name: cce deploy needs: # 使任务在指定的任务结束后才开始运行 - build - check if: ${{ completed() }} # 指定任务的运行条件 steps: - name: My deploy step uses: CodeArtsDeploy with: jobId: 9c5a5cda6ffa4ab583380f5a014b2b31 version: ${{ env.image_version }}
  • codearts-extension.json文件定义 codearts-extension.json文件示例: { "type": "Task", "name": "demo_plugin", "friendlyName": "示例插件", "description": "这是一个示例插件", "category": "Gate", "version": "0.0.2", "versionDescription": "0.0.1初始化版本", "dataSourceBindings": [], "inputs": [ { "name": "samplestring", # 如插件业务脚本中使用${samplestring}获取运行者在流水线上配置的值 "type": "input", # 不同类型信息对应不同展示功能,可选项见下文 "description": "Sample String", # input条目的描述信息,用于描述其值含义 "defaultValue": "00", # 默认值,required属性为false时,如不在流水线上重新输入,则默认使用此值 "required": true, # true则流水线编辑时必须重新填值,false则不填使用默认值 "label": "测试输入框", # input条目在流水线编辑页面显示的名称信息 "validation": { "requiredMessage": "请输入值", # (可选) 如required字段为true,未填写时的提示信息 "regex": "^[a-zA-Z0-9-_\\u4e00-\\u9fa5]{1,32}$", #(可选)可填写正则校验的内容 "regexMessage": "类型错误" # (可选) 如正则校验失败的提示信息 } } ], "execution": { "type": "Shell", "target": "scripts/execution.sh" }, "outputs": [{ "name": "okey", # 输出名称 "type": "output", # 输出类型,output/metrics "description": "描述", "prop": { "defaultValue": "123" # 默认值 } }, { "name": "mkey", "type": "metrics", "description": "描述", "prop": { "defaultValue": "213", "group": "213" # 对应准出规则中的分组名称 } } ] } codearts-extension.json文件参数说明如下: 表2 codearts-extension.json文件参数说明 参数项 说明 type 填写固定值“Task”,标识为一个插件类型。 name 请与注册插件时页面填写的基本信息“唯一标识”字段一致。 friendlyName 请与注册插件时页面填写的基本信息“插件名称”字段一致。 category 请与注册插件时页面填写的基本信息“插件类型”字段一致,包括以下可选值: Build:对应“构建”插件类型。 Test:对应“测试”插件类型。 Gate:对应“代码检查”插件类型。 Normal:对应“通用”插件类型。 Deploy:对应“部署”插件类型。 version 插件版本,支持填写3组0-99的数字,如需新增正式版本,请修改此字段。 description 插件的描述信息。 versionDescription 此版本插件的描述信息,建议体现每个版本的差异点。 dataSourceBindings 此字段暂时未启用,请将值设置为“[]”。 inputs 插件输入内容,对应流水线页面插件展示格式,其值可在业务脚本中通过引用环境变量的方式引用。 execution 业务插件执行内容,其中type字段为业务脚本语言类型,target字段为执行文件入口,建议放在scripts文件夹下。 outputs 插件输出内容,在插件运行结束后写入此处定义值,可对应用作门禁指标metrics,不同的展示结果output。output用于流水线上下文,输出内容可以在后续阶段使用或者在任务运行结果处展示;metrics的数据用于创建准出规则,具体参数信息请参考表6。
  • 准备自定义插件包 插件包结构 图1 插件包结构 文件结构 extension.zip # 插件zip包 | -- scripts # (可选)脚本文件夹,用于存放包含插件执行逻辑的脚本 | | -- xxx # 包含插件执行逻辑的脚本 | -- i18n # (可选)多语言,存放所有文案信息 | | -- zh-cn # 中文环境内容 | | -- resource.json # 对应语言的国际化资源 | | -- en-us # 英文环境内容 | | -- resources.json # 对应语言的国际化资源 | -- codearts-extension.json # (必选)插件执行定义文件,Json格式,包括扩展插件的基本信息+input+execution 注意事项 插件包必须为.zip后缀。 插件包根目录下必须包含元数据文件codearts-extension.json,codearts-extension.json文件介绍请参考codearts-extension.json文件定义。 resources.json文件只能使用utf-8进行编码,不支持中文标点符号与其他编码形式,若输入则为乱码展示。
  • 新建流水线 访问CodeArts Pipeline首页。 单击“新建流水线”,进入“基本信息”页面,参考表1配置流水线基本信息。 表1 流水线基本信息参数说明 参数项 说明 名称 流水线的名称,自定义。支持中文、大小写英文字母、数字、“-”、“_”,长度不超过128个字符。 委托URN IAM的委托唯一标识,配置后,执行流水线中任务时使用委托身份和权限访问其他云服务,否则使用运行人的身份和权限。 所属项目 流水线归属项目。 从流水线服务首页入口新建流水线,请根据实际需要选择已创建的项目。 从项目下流水线入口新建流水线,所属项目默认为当前项目,不可更改。 流水线源 流水线关联的源类型: CodeArts代码源 Repo:提供企业代码托管的全方位服务,为软件开发者提供基于Git的在线代码托管服务。 第三方代码源 码云:连接码云账号之后可以获取该账号下的仓库、分支等信息。 Github:连接Github账号后可以获取该账号下的仓库、分支等信息。 Gitcode:连接Gitcode账号后可以获取该账号下的仓库、分支等信息。 通用Git:连接第三方通用Git仓库后可以获取该账号下的仓库、分支等信息。 其他项目Repo:从其他项目的代码托管中拉取代码,请选择已有的项目、该项目下已经创建的代码仓以及默认分支。 制品源 SWR:使用华为云容器镜像作为流水线源运行流水线,并生成制品名称、制品下载地址和制品版本号系统参数,供需要的任务插件使用。 说明: GitCode流水线源当前仅支持“北京四”和“广州”局点白名单用户。如果您需要开通此功能,请新建工单或拨打客服热线进行咨询。 如果用户新建的流水线任务不需要关联代码仓,也可以选择“暂不选择”,不关联代码仓时,如果添加了需要关联代码仓的任务,执行时会提示错误,具体问题请参考常见问题。 创建方式 关联Repo代码源时,可以选择图形化编排和YAML化编排两种方式。 图形化编排:以图形化界面方式轻松配置流水线,清晰展示任务串并行关系。 YAML化编排:以代码化YAML方式编排流水线,支持语法自动补齐和校验,方便多流水线批量配置。请参考新建流水线(YAML化)。 服务扩展点 关联第三方代码源时,需通过服务扩展点实现与对应仓库的连接。可选择准备工作中提前创建的扩展点,也可单击“新建服务扩展点”进行创建,具体操作请参考新建CodeArts服务扩展点。 代码仓 流水线关联的代码仓库。 默认分支 仓库默认分支,手工或定时执行流水线时默认使用的分支。 Repo HTTPS授权 关联Repo代码源时,可配置授权扩展点以提升代码库操作权限,当前主要用于流水线服务的微服务变更功能模块及其相关插件。可选择准备工作中提前创建的扩展点,也可单击“新建授权”进行创建,具体操作请参考新建CodeArts服务扩展点。 别名 仓库别名,设置别名后可基于别名生成仓库对应的系统参数,如:“别名_REPOSITORY_NAME”,表示仓库名称。生成的参数可在参数设置页面查看,并在流水线中通过“${参数名}”进行引用。 支持输入大小写英文字母、数字、“_”,不超过128个字符。 描述 不超过1024个字符。 组织 关联SWR流水线源时,选择SWR组织。组织用于隔离镜像,每个组织可对应一个公司或部门,将其拥有的镜像集中在该组织下。 镜像名 关联SWR流水线源时,选择组织下的镜像。 指定版本 关联SWR流水线源时,选择镜像的版本。 制品源别名 关联SWR流水线源时,需设置制品源别名,设置别名后可基于别名生成对应的系统参数,如:“别名_ARTIFACT_NAME”,表示制品名称。生成的参数可在参数设置页面查看,并在流水线中通过“${参数名}”进行引用。 支持输入中文、大小写英文字母、数字、“-”、“_”、“.”,不超过128个字符。 配置完基本信息,单击“下一步”,进入“选择模板”页面。 您可以选择系统模板或自定义模板,在模板基础上快速新建流水线,并自动生成模板预置的任务,模板来源请参考管理流水线模板。 也可以选择“空模板”,即不使用模板,新建空任务流水线。 选择完模板,单击“确定”,完成流水线创建。 页面自动进入流水线“任务编排”页面,您可以继续配置流水线,也可以单击“取消”返回流水线列表。
  • 管理流水线模板 流水线服务预置了一系列常用系统模板,同时支持创建自定义模板,帮助您基于模板快速创建持续交付流水线,在企业内完成复用,标准化企业发布流程。 表2 流水线的常用系统模板 模板名称 模板解释 Maven构建 该模板使用Maven模板进行构建,编程语言:JAVA,编译工具:Maven3.5.3、JDK1.8。 Node构建容器镜像 该模板使用NPM模板进行构建,编程语言:JAVASCRIPT,编译工具:nodejs12.7.0。 Maven构建容器镜像 该模板使用Maven模板进行构建,编程语言:JAVA,编译工具:Maven3.5.3、JDK1.8。 Python构建 该模板使用SetupTool模板进行构建,编程语言:Python,编译工具:python3.6。 Go构建 该模板使用Go模板进行构建,编程语言:Go,编译工具:go-1.10.3。 Python构建容器镜像 该模板使用SetupTool模板进行构建,推送到SWR存储,编程语言:Python,编译工具:python3.6。 SpringBoot编译部署 该模板使用Maven模板进行构建,使用语言:JAVA,编译工具:Maven3.5.3、JDK1.8。 NodeJS构建 该模板使用NodeJS模板进行构建,编程语言:JAVASCRIPT,编译工具:nodejs12.7.0。 PHP构建 该模板使用PHP模板进行构建,编程语言:PHP,编译工具:php7.3.3。 进入流水线模板列表 首页入口:进入流水线服务首页,默认展示“流水线列表”页,单击“流水线模板”,进入“流水线模板”页。 项目入口:进入项目下流水线页面,单击“模板”,进入“流水线模板”页面。 模板列表操作项说明如下: 表3 模板列表操作项 操作项 说明 生成流水线。单击后进入“新建流水线”页面,可快速生成对应模板的流水线。 收藏模板。单击可收藏模板,收藏后图标变为,再单击可以取消收藏。 单击后选择“编辑”,进入“任务编排”页面,可编辑模板。 单击后选择“复制”,进入“任务编排”页面,可复制模板。 单击后选择“删除”,可根据提示删除模板。 说明: 系统模板只能用来复制或生成流水线,不能编辑和删除。 新建流水线自定义模板 进入流水线模板列表页。 单击“新建流水线模板”,进入“任务编排”页。 根据需要配置模板基本信息、模板阶段/任务、模板参数等。 基本信息:可编辑模板的名称(必填)、语言(支持Java、Python、Node.js、Go、.Net、C++、PHP,默认选择“无”)、模板描述信息。 任务编排:流水线模板支持添加所有的插件,包括官方插件、第三方插件和自定义插件,将构建、代码检查、部署、接口测试等任务配置在模板中后,通过模板创建流水线的时候会同步创建相应类型的任务。 模板中无需配置流水线源。 模板编排暂不支持配置阶段准入。 参数设置:可根据需要为模板添加参数,流水线模板参数包括自定义参数和系统预定义参数两种,其中,自定义参数类型包括:字符串类型、枚举类型、自增长类型,配置方法请参见配置流水线自定义参数。 单击“保存”,完成模板创建。
  • 计算服务选型 华为云提供的计算服务主要是ECS(Elastic Cloud Server)服务和CCE(Cloud Container Engine)服务,华为云提供了很多ECS的实例类型,如下表所示,以满足多样化的计算场景需求。 关于上述ECS实例类型的详细信息,请查看实例类型。 表1 ECS实例类型 架构 实例类型 实例系列 系列说明 适用场景 x86 通用计算增强型 c 计算、存储、网络各方面性能均衡,CPU独享、性能稳定 适合大部分应用场景 ac 与c系列相比,CPU不同、同规格分配的网络带宽更小,保持稳定性能的同时成本更低 高性能计算型 h 与c系列相比,CPU主频更高、计算性能高20%左右 HPC/游戏/科学计算 内存优化型 m 与c系列相比,提供1:8的CPU/内存配比,内存性能更强 内存密集型,数据库/内存数据库 am 与ac系列相比,提供1:8的CPU/内存配比,内存性能更强 超大内存型 e 与c系列相比,提供1:20的CPU/内存配比,内存性能更强 磁盘增强型 d 与c系列相比,提供大容量、低成本的SATA本地盘 大数据/缓存数据库 超高I/O型 i 与c系列相比,提供高IOPS、低时延的大容量NVMe本地盘 ir 与c系列相比,提供高IOPS、低时延的小容量NVMe本地盘 通用计算型 s 与c系列相比,采用非绑定CPU共享调度模式,主机负载较轻时可提供基本与c系列一致的计算性能,成本更低、性价比更高,但无法保证实例计算性能的稳定,适合对性能抖动容忍度较高的场景 一般Web/开发环境/小型数据库 通用入门型 t 成本最低的实例,具备突发性能能力,突发时长受CPU积分影响,低价格 个人使用/维护终端等 GPU加速型 g 搭载T4卡,图像加速 3D动画渲染、CAD p 搭载V100卡,计算加速 AI深度学习、科学计算 pi 搭载T4卡,推理加速 实时推理+轻量级训练 AI加速型 ai 搭载昇腾310芯片,计算加速或推理加速 深度学习、科学计算、CAE ARM 鲲鹏通用计算增强型 kc 与c系列相比,采用鲲鹏处理器,价格更低 已适配ARM的大部分应用场景 鲲鹏内存优化型 km 与m系列相比,采用鲲鹏处理器,价格更低 数据库/内存数据库 鲲鹏超高I/O型 ki 与i系列相比,采用鲲鹏处理器,价格更低 大数据/缓存数据库 鲲鹏AI推理加速型 kai 与ai系列相比,采用鲲鹏处理器,价格更低 深度学习、科学计算、CAE 以下是ECS服务的选型原则: 业务适用:满足业务需求是选型的第一原则,除CPU、内存外,要特别重点关注带宽需求,通常同一系列的实例规格越大支持的带宽越大。 性价比:在能够满足业务需求的情况下,需要考虑低成本的选型方案。例如:同规格情况下,s系列/ac系列价格低于c系列,运维终端等无强性能需求时选择t系列更划算。对于业务量波动较大的业务,建议通过多节点集群负荷分担+AS弹性伸缩配合,此场景不建议使用大规格实例节点,否则弹性缩容到最小节点数时会存在较多的性能浪费。 可靠性:资源选型需要考虑如何降低故障率、避免单点故障,因此建议优先选择新系列(规格中代系数字更大的),且跨双可用区均衡部署。资源选型优化降本不能以牺牲业务的可靠性为代价,集群组网中单个节点故障不应造成剩余节点超负荷。 一致性:为保证基于镜像的快速扩容、快速恢复、弹性伸缩,承载同一类服务的主机,要求选型规格保持一致,无特殊需求的情况下同一业务系统中避免使用过多的实例类型/规格。 资源满足度:考虑业务发展和扩容诉求,资源选型时一般建议选择主力型号,避免选择老旧、冷门的规格,且尽量选择在主力可用区(如北京四的可用区1和7、上海一的可用区1和4)。 除AI等特殊场景需要使用BMS外,通用算力一般使用ECS即可,几个典型场景的选型建议如下: 表2 典型场景的ECS服务选型 位置 典型应用 选型建议 接入层 负载均衡/应用代理 Nginx c/m系列 运维终端 跳板机 t系列 应用层 普通应用 Web服务 ac/am系列 高性能计算服务 转码服务 c/m系列 中间件层 自建中间件 自建Redis/RocketMQ c/m系列 数据层 自建数据库 自建MySQL/Oracle c/m系列 父主题: 云服务选型
  • 解决方法 登录ServiceStage控制台。 单击“环境管理”,进入“环境管理”页面。 单击问题虚拟机所在的环境名称,进入环境详情页面。 在“全部资源”页签下左侧列表,选择“计算”资源类型下的“弹性云服务器 ECS”或者“自定义服务器”资源名称。 在右侧已纳管的资源列表,获取“Agent 状态”为“亚健康”虚拟机名称。 登录虚拟机。 执行如下命令打开虚拟机agent-critical日志: vi /var/log/servicestage-agent/servicestage-agent-critical.log 在日志中搜索上报告警的时间,根据时间定位到错误请求的日志信息。 根据日志中的错误信息去解决问题,若无法解决问题请联系技术支持工程师。
  • 脚本编写说明 Servicestage在执行脚本时的目录结构如下所示: APP_HOME/ │ ├── scripts/ │ │ ├── pre-install.sh │ │ ├── pre-stop.sh │ │ ├── stop.sh │ │ ├── uninstall.sh │ │ ├── install.sh │ │ ├── start.sh │ │ ├── check.sh │ │ ├── post-start.sh │ ├──packages/ │ │ ├── my-app.jar/my-app.war ├── config/ │ │ ├── system.cfg ├── servicestage-vmapp/ │ │ ├── application.conf ├── jre1.8 ├── apache-tomcat-8.5.82
  • config说明 system.cfg文件 设置config参数 在使用虚拟机部署方式创建并部署组件时,您可以参考添加配置项设置一些配置项,ServiceStage会将设置的配置项以键值对的形式存储在${APP_HOME}/config/system.cfg文件中。您也可以预置一些配置参数在config里面,格式参考示例如下: # system.cfg文件中存储内容的格式 key1=value1 key2=value2 引用config参数 引用config参数的方法示例如下: #!/bin/bash . ${APP_HOME}/config/system.cfg . ${APP_HOME}/config/user_config.cfg echo ${key1} server.xml文件 请参考tomcat的server.xml说明。 logging.properties文件 请参考tomcat的logging.properties说明。
  • FAQ 如何以root账户运行脚本命令? 将要以root账户运行的内容编写成一个脚本root-install.sh。 在真正要执行的install.sh执行如下语句,其中${ROOT_PASSWORD}为root账号的密码,-c后面的双引号中为执行的命令。切换用户后会丢失环境变量,可以在sh前加上所需要的环境变量。 echo "${ROOT_PASSWORD}" | su - root -c "APP_HOME=${APP_HOME} sh root-install.sh" 若执行上述语句发生“su: Permission denied”报错,找到/etc/pam.d/su文件,将“ auth required pam_wheel.so use_uid”这一句注释掉。
  • 系统默认配置 系统默认配置均在${APP_HOME}/servicestage-vmapp/application.conf文件中定义,并不会直接出现在环境变量中。application.conf文件中定义的环境变量需要在脚本中增加如下命令后才能引用。 . ${APP_HOME}/servicestage-vmapp/application.conf 可直接引用的脚本环境变量包括APP_HOME、在appspec.yml中指定的环境变量和添加组件环境变量时指定的环境变量。 文件内容示例如下: export LOG _PATH=/var/log/application/zqb-4-vm-wqd-2-7f6fbc/3c719644-f9f5-46b4-a06a-61fcf163e5b5 export APP_HOME=/opt/application/zqb-4-vm-wqd-2-7f6fbc/2023.1207.11314/3c719644-f9f5-46b4-a06a-61fcf163e5b5 export TOMCAT_STACK_HOME=/opt/application/zqb-4-vm-wqd-2-7f6fbc/2023.1207.11314/3c719644-f9f5-46b4-a06a-61fcf163e5b5/apache-tomcat-8.5.82 export JRE_STACK_HOME=/opt/application/zqb-4-vm-wqd-2-7f6fbc/2023.1207.11314/3c719644-f9f5-46b4-a06a-61fcf163e5b5/jre1.8 export APP_VALUE="{{app.value}}" export APP_USER=www export APP_GROUP=www LOG_PATH:日志记录的地址,需要统一将应用日志打印到LOG_PATH下的日志文件中,命名为{lifecycle}_app.log,方便后续的日志上报。 APP_HOME:记录了当前应用运行的环境。 TOMCAT_STACK_HOME:Tomcat的主目录。 JRE_STACK_HOME:Jre的主目录。 APP_VALUE:在appspec.yml中指定的环境变量。 APP_USER:文件所属的用户。建议固定为www,也支持自定义用户。 APP_GROUP:文件的属组。建议固定为www,也支持自定义用户属组。 如果自定义了用户及其属组,需要执行如下命令赋予该自定义用户运行脚本的权限: sudo -- /bin/bash -c "chmod -R 755 ${APP_HOME}/scripts/* ${LOG_PATH};chown -R ${APP_USER}:${APP_GROUP} ${APP_HOME}/scripts/start.sh;chown -R ${APP_USER}:${APP_GROUP} ${APP_HOME}/scripts/stop.sh;chown -R ${APP_USER}:${APP_GROUP} ${LOG_PATH} ${JRE_STACK_HOME}/"
  • 应用压缩包内目录总体结构说明 Java应用压缩包示例:https://github.com/servicestage-demo/example/tree/master/servicestage-vm-demo/demoJavaExample.zip Tomcat应用压缩包示例:https://github.com/servicestage-demo/example/tree/master/servicestage-vm-demo/demoTomcatExample.zip 以Java应用压缩包demoJavaExample.zip为例,应用压缩包内目录总体结构说明如下: demoJavaExample/ │ ├── scripts/ │ │ ├── pre-install.sh │ │ ├── pre-stop.sh │ │ ├── stop.sh │ │ ├── uninstall.sh │ │ ├── install.sh │ │ ├── start.sh │ │ ├── check.sh │ │ ├── post-start.sh ├── packages/ │ │ ├── weather-1.0.0.jar ├── config/ │ │ ├── system.cfg ├── appspec.yml 压缩包名前缀必须和解压后的文件目录名一致。例如压缩包名为demoJavaExample.zip,解压后文件目录必须为demoJavaExample。 应用压缩包内各个目录及文件的作用说明如下: scripts:必选目录,存储的是应用各个生命周期执行的脚本文件。
  • tomcat的logging.properties说明 您需要自行准备logging.properties,将其复制到tomcat的目录下,复制代码示例如下: #!/bin/bash . ${APP_HOME}/servicestage-vmapp/application.conf cp ${APP_HOME}/conf/logging.properties ${TOMCAT_STACK_HOME}/conf/logging.properties logging.properties可以参考如下内容,使用时将@{LOG_FILE_PATH_APP}替换为真正的日志目录。 handlers = 1catalina.org.apache.juli.AsyncFileHandler, 2localhost.org.apache.juli.AsyncFileHandler, 3manager.org.apache.juli.AsyncFileHandler, 4host-manager.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler .handlers = 1catalina.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler 1catalina.org.apache.juli.AsyncFileHandler.level = FINE 1catalina.org.apache.juli.AsyncFileHandler.directory = @{LOG_FILE_PATH_APP} 1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina. 2localhost.org.apache.juli.AsyncFileHandler.level = FINE 2localhost.org.apache.juli.AsyncFileHandler.directory = @{LOG_FILE_PATH_APP} 2localhost.org.apache.juli.AsyncFileHandler.prefix = localhost. 3manager.org.apache.juli.AsyncFileHandler.level = FINE 3manager.org.apache.juli.AsyncFileHandler.directory = @{LOG_FILE_PATH_APP} 3manager.org.apache.juli.AsyncFileHandler.prefix = manager. 4host-manager.org.apache.juli.AsyncFileHandler.level = FINE 4host-manager.org.apache.juli.AsyncFileHandler.directory = @{LOG_FILE_PATH_APP} 4host-manager.org.apache.juli.AsyncFileHandler.prefix = host-manager. java.util.logging.ConsoleHandler.level = FINE java.util.logging.ConsoleHandler.formatter = org.apache.juli.OneLineFormatter org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = INFO org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = 2localhost.org.apache.juli.AsyncFileHandler org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].level = INFO org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].handlers = 3manager.org.apache.juli.AsyncFileHandler org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].level = INFO org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].handlers = 4host-manager.org.apache.juli.AsyncFileHandler org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = INFO org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = 2localhost.org.apache.juli.AsyncFileHandler org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].level = INFO org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].handlers = 3manager.org.apache.juli.AsyncFileHandler org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].level = INFO org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].handlers = 4host-manager.org.apache.juli.AsyncFileHandler
  • 原因分析 在ServiceStage中,应用是指一个功能相对完备的业务系统,由一个或多个特性相关的组件组成,以应用维度组织多个组件。 在微服务中,可以将应用理解为完成某项完整业务场景的软件系统。应用一般由多个微服务组成,应用里面的微服务能够相互发现和调用。 在Spring Cloud微服务架构开发的项目中,应用名称通常在项目下各组件的“bootstrap.yaml”配置文件中定义。 在Java Chassis微服务架构开发的项目中,应用名称通常在项目下各组件的“microservice.yaml”配置文件中定义。 配置文件一般都存放于您当前项目各组件目录下的“/src/main/resources/”路径下。 ServiceStage应用下的各组件实例接入微服务引擎后,其微服务实例“所属应用”名称就是各组件下的配置文件中所定义的应用名称。
  • 微服务专享版引擎版本从1.x升级到2.x时有哪些注意事项? 微服务引擎专享版从1.x升级到2.x的过程中及升级完以后可能会出现的现象及解决方法如下: 现象1:在微服务引擎专享版从1.x版本升级至2.x版本的过程中,使用接口获取配置或更新配置失败,报connection refused或Connection was closed,出现错误信息示例如下: [ERROR] Config update from xxx.xxx.xxx.xx failed. Error message is [Connection refused: xxx.xxx.xxx.xx]. org.apache.servicecomb.config.client.ConfigCenterClient$ConfigRefresh.lambda$null$13(ConfigCenterClient.java:428) 或 [ERROR]Config update from xxx.xxx.xxx.xx failed. Error message is [Connection was closed]. org.apache.servicecomb.config.client.ConfigCenterClient$ConfigRefresh.lambda$null$13(ConfigCenterClient.java:428) 解决方法:微服务引擎专享版1.x版本升级至2.x版本时配置中心会有短暂的重启,重启期间获取配置或更新配置会报错断连。因此引擎升级过程中避免更新配置,升级完成后该问题即可解决。 现象2:使用引擎版本为1.x配置中心接入的用户,无法使用“业务场景治理”功能。 解决办法:由于引擎版本为2.x的配置中心换成了kie,需要将配置中心接入方式切换为kie,具体切换方式详见Spring Cloud使用配置中心中相关内容。 现象3:在使用版本为2.x的微服务引擎时,使用导入配置文件功能,存在原配置中心格式的文件无法导入,提示文件为空或者格式错误。 解决办法:将配置文件的配置项格式修改为2.x引擎要求的配置文件格式,新的配置文件为json文件,内容格式如下: { "data":[ { "key":"xxx", "labels":{ "environment":"xxx", "service": "xxx", "app": "xxx", "version": "xxx" }, "value":"xxx", "value_type":"text", "status":"enabled" }, { "key":"xxx", "labels":{ "environment":"xxx" }, "value":"xxx", "value_type":"text", "status":"enabled" }, { "key":"xxx", "labels":{ "environment":"xxx", "service": "xxx" }, "value":"xxx", "value_type":"text", "status":"enabled" }, { "key":"xxx", "labels":{ "environment":"xxx", "service": "xxx", "app": "xxx" }, "value":"xxx", "value_type":"text", "status":"enabled" } ] } 其中: key和value是配置项对应的键和值,其为必填。 labels是配置范围,其为必填,通过填写environment,service,app,version等字段来确定配置范围。 value_type是配置项类型,其为必填,可以选择ini、json、text、yaml、properties、xml,默认为text。 status是配置是否启用,其为选填,可以选择enabled(开启),disabled(关闭),默认关闭。 现象4:若在微服务引擎1.x版本的配置中心设置了全局配置,当升级到2.x之后,全局配置根据配置中心升级后的范围会相应的自动调整作用范围environment=${environmentName},environmentName取值可以为空、development、testing、acceptance或production。此时如果SDK调整以kie作为配置中心时,需要在项目配置文件中增加自定义标签以获取该部分配置,以下以environment=production为例展示: spring-cloud-huawei框架: spring: cloud: servicecomb: config: serverType: kie kie: customLabel: environment customLabelValue: production servicecomb-java-chassis框架: servicecomb: kie: customLabel: environment customLabelValue: production 父主题: 基础设施
  • 解决办法 根据报错信息内容,确认失败原因。 如果报错信息为“query microservice info failed, microservices should be registered.”,可能是由于灰度发布的组件实例不是微服务类型的组件实例或者组件实例未注册到CSE上。 如果报错信息为“The grayscale service must be a new version.”,是由于注册到CSE的灰度版本组件实例不是新版本。 在“部署记录”页面上的“部署记录”列表,选择灰度发布失败的部署记录。 单击“回滚”,回滚至升级前版本。 根据1确认的失败原因,解决问题。 重新执行组件灰度发布,确认是否成功。 是,操作结束。 否,联系技术支持工程师解决问题。
  • 解决方法 可在开发环境下使用mvn dependency:tree命令查看依赖树,排查微服务开发框架同netty版本是否匹配。 例如,ServiceComb 2.0.1开发框架所匹配的netty依赖版本为4.1.45.Final。 使用maven管理复杂依赖关系,请参考:https://servicecomb.apache.org/cn/docs/maven_dependency_management/。
  • 为什么一定要定义服务契约? 企业级系统规模普遍较大,微服务组件众多,所以对服务间接口进行统一管理是企业的关键需求。微服务引擎通过契约管理满足这一需求。 管理角度:通过契约管理,企业中的接口管理者可以统一定义微服务的契约文件(符合接口描述标准的接口定义文件),从而做到规范并协调多个开发团队的接口开发,降低沟通成本且避免后期的混乱。 开发角度:在微服务开发的时候,不同团队甚至不同ISV间,可以基于统一的契约文件开发同一应用或系统,从而方便整体系统一致性的维护。具体表现在,单体应用中模块间是代码级调用,在编译期就可以解决API不兼容问题,修复成本也极低。微服务解耦后,服务间变为了远程调用,接口不一致通常发现时间较晚,会造成更大的修复成本。有了契约可以保证架构师设计契约,严格审查变更,并反向生成代码,保证兼容性。 另外,对于规模较小、统一管理要求不高的系统,产品支持从接口代码自动生成契约文件。 父主题: 应用开发问题
  • 微服务和普通应用有什么不同? 微服务是一种架构模式,其核心是将一个单体应用分成多个部分进行开发。所以微服务架构的应用程序,其本质上是一个分布式应用。 基于微服务架构构建的应用程序,可以让业务变化更快,整体系统可靠性更高。 类型 微服务 普通应用 开发 每个微服务的体量相对较小,业界的two pizza团队和“2周即可全部重写全部代码”等都可以作为微服务划分的参考。在开发时期,需注意服务接口的定义以与周边微服务进行配合,“基于契约”的开发方式是非常推荐的。 微服务开发,请参考开发微服务应用。 普通应用逻辑复杂、模块耦合、代码臃肿、修改难度大、版本迭代效率低下。 部署 微服务组成的应用系统通常比较复杂,在一次性部署的时候,需要进行编排部署。 微服务应用部署,请参考创建并部署组件。 普通应用可能会比较大,构建和部署时间也相应地比较长,不利于频繁部署,阻碍持续交付。在移动应用开发中,这个问题会显得尤为严重。 运维 在原来的指标监控、日志收集之外还非常强调治理。其核心理念是在运行时期通过对线上系统的各种调整以达到系统整体健康度要求的效果。 应用运维,请参考组件运维。 普通应用线上问题修复周期长,任何一个线上问题修复都需要对整个应用系统进行全面升级。 父主题: 应用开发问题
  • 解决方法 待查看日志的主机未安装ICAgent ServiceStage的日志查看能力是由 AOM 服务提供的。主机是否安装ICAgent是使用AOM的日志能力的前提,否则将无法查看ServiceStage的日志。ICAgent是AOM的采集器,分别运行在每台主机上用于实时采集指标、日志和应用性能数据。 如何为待查看日志的主机安装ICAgent,请参考安装ICAgent。 用户业务日志输出位置为非标准位置 由于用户配置了日志策略,导致用户程序业务日志未输出到标准的输出位置。需参考如下方法进行排查处理: 虚拟机部署 排查配置的日志策略,是否把用户程序业务日志输出位置写到ServiceStage默认指定的虚拟机日志目录(/var/log/application/${组件名}-${环境名}-${随机字符串}/${版本号}/${实例ID}/start_app.log)外的其他目录。 请查询业务代码,对日志策略进行调整。 容器部署 排查配置的日志策略,是否把业务日志输出到除标准输出外的其他地方。请参考设置应用日志策略进行相关配置。
  • 问题描述 在对微服务引擎专享版执行创建、删除、升级等操作时,可能会遇到非微服务引擎本身的错误。 例如,在创建微服务引擎专享版时,集群部署失败,报错如下: {"error_code":"SVCSTG.00500400","error_message":"{\"kind\":\"Status\",\"apiVersion\":\"v1\",\"metadata\":{},\"status\":\"Failure\",\"code\":400,\"errorCode\":\"CCE.01400013\",\"errorMessage\":\"Insufficient volume quota.\",\"error_code\":\"CCE_CM.0307\",\"error_msg\":\"Volume quota is not enough\",\"message\":\"volume quota checking failed as [60/240] insufficient volume size quota\",\"reason\":\"QuotaInsufficient\"}"}
  • 解决方法 租户或用户以正确的AK/SK登录Docker客户端。 向本租户或用户下有操作权限的namespace上传镜像,或者更换到新的namespace。 执行如下命令,向本租户或用户下有操作权限的namespace上传镜像。 docker push 10.125.54.133:20202/test2/busybox:latest 10.125.54.133:20202为租户或用户准备上传仓库的IP和端口号。 test2为该租户或用户下有操作权限的namespace。 执行如下命令,更换到新的namespace。 docker push 10.125.54.133:20202/test3/busybox:latest 10.125.54.133:20202为租户或用户准备上传仓库的IP和端口号。 test3为新的namespace。 上传成功后,显示如下: The push refers to a repository [10.125.54.133:20202/test2/busybox] 6a749002dd6a: Pushed latest: digest: sha256:ecb3f3e96e003af6e02f0f47ac4d25a3b0585db54de0a82bb070f8cb78a79bc7 size: 527 出现异常,请联系技术支持工程师。
  • 问题描述 在后台Docker登录成功以后,使用Docker客户端上传镜像包时,例如执行如下命令上传: docker push 10.125.54.133:20202/test1/busybox:latest 10.125.54.133:20202为租户或用户准备上传仓库的IP和端口号。 test1为namespace。 上传失败,Docker客户端出现如下提示: unauthorized: authentication required
共100000条