华为云制品仓库CodeArts Artifact对接使用全攻略
前言:制品仓库在软件交付链路中的战略位置
在软件开发从代码提交到最终部署的完整链路中,制品仓库扮演着承上启下的关键角色。源代码经过编译构建后产生的二进制软件包——无论是Java的JAR包、Node.js的npm包、Python的wheel包,还是容器化的Docker镜像——都需要一个集中、安全、可追溯的存储与管理平台。华为云CodeArts Artifact正是为此而生的一项托管式制品仓库服务,它为软件开发企业提供管理软件发布过程的能力,保障软件发布过程的规范化、可视化及可追溯。
相对于开发过程中的源代码,制品仓库关注和管理的是开发产生的待部署软件包及其生命周期元数据——包括名称、大小等基本属性,以及代码库地址、代码分支信息、构建任务、构建者、构建时间等关键信息。这些软件包及其属性的管理是发布过程管理的基础,也是软件开发过程中的重要资产。CodeArts Artifact作为连接持续集成和持续部署的重要环节,软件包的发布评审、追溯和安全控制等操作通常在其中进行。
本文将从零开始,系统讲解华为云CodeArts Artifact的对接与使用,涵盖服务开通、仓库创建、各类制品类型的客户端配置、编译构建集成、权限管理、安全扫描以及最佳实践,帮助开发团队快速上手这一企业级制品管理平台。
需要先登录华为云控制台,点击:华为云控制台,还没有账号,点击:注册并关联,已有账号点击:登录后关联
一、CodeArts Artifact核心概念与产品架构
1.1 什么是制品仓库
制品仓库服务(CodeArts Artifact)为软件开发企业提供管理软件发布过程的能力,保障软件发布过程的规范化、可视化及可追溯。它提供以下两类核心仓库:
- 软件发布库:一种通用软件制品库,用来统一管理不同格式的软件制品。除了基本的存储功能,还提供构建部署工具集成、版本控制、访问权限控制等重要功能。软件发布库可以存储任何软件包和工具,没有格式限制。
- 私有依赖库:用于管理私有组件(开发者通俗称之为私服),支持创建Maven、NPM、Go、PyPI、RPM、Debian、Docker等多种类型的制品仓库。
1.2 产品优势速览
华为云CodeArts Artifact基于云原生架构自研,在多个维度具备显著优势:
- 安全可靠:提供多维度、细粒度的权限控制,存储采用物理隔离方式减少恶意盗取风险,同时提供操作日志记录保证可追溯。支持双AZ容灾和跨地域容灾、API限流与降级,实现99.99%的SLA保证。
- 极致性能:提供热点文件缓存加速、增量上传下载,突破底层存储带宽限制,实现同地域高速并发传输。对比开源同类产品有5倍的上传和10倍的下载性能提升。
- 多类型支持:支持Generic、Docker、Maven、npm、Go、NuGet、PyPI、Conan、Debian、RPM等10余种主流制品仓库类型,满足嵌入式、WEB应用、移动应用等开发场景。
- 高效搜索:依托数据引擎检索能力,支持通过文件名称或HASH信息(MD5、SHA1、SHA256、SHA512)实现秒级检索定位,搜索性能对比开源同类产品提升20倍。
- 代理与聚合:支持自定义代理仓库代理开源社区仓库和三方依赖仓库,通过代理仓下载文件后缓存到制品仓库,解决三方依赖下载慢的痛点。聚合仓库可以聚合本地仓库和代理仓库,提供统一制品仓库入口,简化客户配置。
二、服务开通与环境准备
2.1 购买与开通服务
使用CodeArts Artifact服务前需要完成购买与授权。购买服务需要满足以下前提条件:
- 已注册华为云并完成实名认证
- 拥有华为账号,或拥有Tenant Administrator权限的IAM用户账号
购买路径:进入华为云控制台,在服务列表中选择'开发与运维 > 制品仓库 CodeArts Artifact',单击'立即使用'进入服务首页。各区域独立开通购买、独立计费,建议根据业务所在物理区域就近选择以减少网络延时。
购买制品仓库服务有两种方式:单独购买制品仓库单服务套餐,或者开通软件开发生产线服务组合套餐(如果已购买CodeArts套餐,则不能再单独购买制品仓库服务)。
2.2 创建CodeArts项目
制品仓库服务需要依托于CodeArts项目。在CodeArts服务首页单击'新建项目',选择项目模板(如Scrum模板),填写项目名称后确认创建。项目创建成功后,系统会自动在软件发布库中创建一个与项目同名的软件发布库。
2.3 添加项目成员与角色授权
新创建的用户默认没有任何权限,需要将其加入项目并配置角色。CodeArts提供基于角色的权限管理(RBAC),项目管理员是项目的最高负责人。制品仓库服务提供三层权限模型:租户级权限、项目级权限、实例级权限。当权限配置发生冲突时,优先级为:实例级权限 > 项目级权限 > 租户级权限。
三、软件发布库的对接与使用
3.1 软件发布库概述
软件发布库是一种通用软件制品库,无需新建——用户创建CodeArts项目后,系统会自动创建同名软件发布库。软件发布库支持以下基础操作:
- 上传、下载、编辑、搜索、删除软件包
- 新建、编辑、搜索、删除文件夹
- 查看并编辑软件包详情(基本信息、构建信息、构建包归档信息)
3.2 通过页面手动上传软件包
进入软件发布库后,单击页面右上方'上传制品',在弹框中配置以下信息后单击'上传':
- 目标仓库:当前软件发布库,默认即可
- 版本:为软件包设置版本号
- 上传方式:选择'单个文件上传'或'多个文件上传'
- 路径:设置路径名称后仓库视图中会创建对应文件夹
- 文件:从本地选择需要上传的软件包
3.3 软件发布库的清理策略
软件发布库提供定时自动清理文件功能,可根据文件保留时长设置自动将超时文件从仓库移至回收站,或从回收站彻底清除。删除的软件包和文件夹都会先移到回收站,用户可以在回收站中进行恢复或彻底删除操作。
四、私有依赖库的对接与使用
私有依赖库是CodeArts Artifact的核心能力之一,支持多种制品类型的托管与管理。下面按制品类型逐一说明对接方法。
4.1 Maven私有依赖库对接
Maven是Java生态中最主流的构建工具,CodeArts Artifact对Maven私有依赖库提供了完善的支持。
4.1.1 创建Maven私有依赖库
在私有依赖库页面单击'新建制品仓库',选择仓库类型为'本地仓库',制品类型选择'Maven'。配置仓库基本信息时需要注意以下参数:
- 仓库名称:自定义唯一名称,支持中文、英文、数字、下划线、连字符和点
- 归属项目:仓库所属的CodeArts项目
- 关联项目:用于CodeArts编译构建场景下的制品共享,可将目标仓库关联至编译构建任务所在项目
- 版本策略:包括Release(发行版本)、Snapshot(快照版本)和Release&Snapshot三个选项
4.1.2 配置本地Maven环境对接
私有依赖库支持与本地开发环境对接,通过修改Maven的settings.xml配置文件即可实现。具体步骤如下:
- 使用华为云账号访问CodeArts Artifact的私有依赖库
- 在左侧边栏中单击待与本地环境对接的Maven仓库名称
- 单击页面右侧'操作指导'
- 选择依赖管理工具为'Maven'
- 单击'下载配置文件'下载settings.xml文件
- 将下载的配置文件直接替换或按提示修改本地的settings.xml文件(通常位于~/.m2/目录下)
以下是一个典型的settings.xml配置模板(示意结构):
<settings>
<servers>
<server>
<id>huaweicloud-artifact</id>
<username>{{你的用户名}}</username>
<password>{{你的仓库密码}}</password>
</server>
</servers>
<mirrors>
<mirror>
<id>huaweicloud-artifact</id>
<mirrorOf>*</mirrorOf>
<url>{{私有依赖库的仓库地址}}</url>
</mirror>
</mirrors>
</settings>配置完成后,即可在本地使用mvn命令进行依赖拉取和制品上传:
# 从私有依赖库拉取依赖
mvn clean compile
# 部署制品到私有依赖库
mvn deploy4.1.3 通过客户端上传Maven组件
除了通过mvn deploy命令,CodeArts Artifact也支持通过页面直接上传Maven组件,支持POM模式和GAV模式两种上传方式。
4.2 npm私有依赖库对接
npm是JavaScript生态的包管理工具,CodeArts Artifact同样提供了完善的npm私有依赖库支持。
4.2.1 创建npm私有依赖库
在私有依赖库页面单击'新建制品仓库',选择仓库类型为'本地仓库',制品类型选择'npm'。
4.2.2 配置本地npm环境对接
对接步骤与Maven类似:
- 使用华为云账号访问CodeArts Artifact的私有依赖库
- 在仓库列表中选择目标npm私有依赖库
- 单击页面右侧'操作指导'
- 在弹框中单击'下载配置文件'
下载的配置文件通常为.npmrc格式,内容包含仓库地址和认证信息。将配置添加到本地.npmrc文件后,即可使用npm命令进行操作:
# 设置npm registry为私有依赖库地址
npm config set registry {{私有依赖库的仓库地址}}
# 登录私有依赖库
npm login --registry={{私有依赖库的仓库地址}}
# 发布npm包到私有依赖库
npm publish --registry={{私有依赖库的仓库地址}}
# 从私有依赖库安装依赖
npm install {{包名}} --registry={{私有依赖库的仓库地址}}4.3 Docker镜像仓库对接
Docker镜像是容器化部署的核心载体,CodeArts Artifact支持托管Docker镜像。
4.3.1 创建Docker镜像仓库
在私有依赖库页面创建本地仓库,制品类型选择'Docker'。创建完成后即可获得专属的Docker镜像仓库地址。
4.3.2 登录与推送Docker镜像
通过客户端上传Docker组件的步骤如下:
- 使用华为云账号访问CodeArts Artifact的私有依赖库
- 在私有依赖库页面选择对应的Docker仓库
- 在页面右上角单击'操作指导'
- 单击'下载配置文件',下载config.json文件(包含登录认证信息)
完成配置后,可以通过Docker命令进行操作:
# 登录Docker镜像仓库(使用从操作指导获取的用户名和密码)
docker login -u {{用户名}} -p {{密码}} {{仓库地址}}
# 为本地镜像打标签
docker tag {{本地镜像名}}:{{标签}} {{仓库地址}}/{{命名空间}}/{{镜像名}}:{{标签}}
# 推送镜像到私有依赖库
docker push {{仓库地址}}/{{命名空间}}/{{镜像名}}:{{标签}}
# 从私有依赖库拉取镜像
docker pull {{仓库地址}}/{{命名空间}}/{{镜像名}}:{{标签}}在编译构建服务中,可以通过添加'执行Docker命令'构建步骤,依次执行docker login、docker build和docker push命令完成镜像的构建与推送。
4.4 Generic通用制品仓库对接
Generic组件(也称为通用制品)是指在构建和发布过程中生成的任何类型的文件。CodeArts Artifact支持通过客户端以curl命令的方式上传和下载Generic组件。
4.4.1 创建Generic仓库
在私有依赖库页面创建本地仓库,制品类型选择'Generic'。
4.4.2 通过客户端上传/下载Generic组件
操作步骤如下:
- 访问CodeArts Artifact的私有依赖库
- 在私有依赖库页面选择对应的Generic仓库
- 单击页面右侧'操作指导'
- 单击'下载配置指导文件',下载配置文件generic.txt
上传Generic制品的命令格式:
curl -k -u '{{username}}:{{password}}' -X PUT {{repo_url}}/{{filePath}} -T {{localFile}}其中:
- filePath:待上传的Generic仓库路径(包含名称)
- localFile:本地Generic制品包的路径(包含名称)
- username、password、repo_url:从下载的generic.txt文件获取
下载Generic制品的命令格式:
curl -o {{localFileName}} -k -u '{{username}}:{{password}}' -X GET {{repo_url}}/{{filePath}}其中localFileName为下载到本地的路径(包含名称)。
4.5 其他制品类型支持
CodeArts Artifact还支持Go、NuGet、PyPI、Conan、Debian、RPM、CocoaPods、OHPM、Helm、Conda、Composer等多种制品类型,对接方式与上述类型类似——创建对应类型的仓库、通过操作指导下载配置文件、使用对应的客户端工具进行操作。
五、代理仓库与聚合仓库:加速三方依赖下载
5.1 自定义代理仓库
CodeArts Artifact新增自定义代理仓功能,允许用户创建自定义代理仓库来代理开源社区仓库和三方依赖仓库。通过代理仓下载文件后支持将对应文件缓存到制品仓库,解决用户三方依赖下载慢的痛点,实现下载三方依赖和本地仓库一样的极致体验。
代理仓库的工作原理:当用户通过代理仓库请求一个三方依赖时,代理仓库首先检查本地缓存是否存在该依赖,如果存在则直接返回;如果不存在,则从配置的开源社区仓库(如Maven中央仓库、npm官方仓库、PyPI官方仓库等)下载并缓存到制品仓库,后续请求直接命中缓存,大幅提升下载速度。
5.2 聚合仓库
针对用户同时使用多个镜像源或制品库的场景,CodeArts Artifact提供仓库聚合能力,允许灵活组合多个代理仓,提供统一制品仓库入口,解决用户找不到制品包的痛点和简化客户配置。聚合仓库可以聚合本地仓库和代理仓库,提供统一制品仓库入口。
创建聚合仓库时,用户可以选择需要聚合的本地仓库和代理仓库,配置路径包含规则和排除规则来控制哪些制品可以通过聚合仓库访问。聚合仓库创建完成后,用户只需配置一个仓库地址即可访问多个底层仓库的制品,极大简化了客户端配置。
六、编译构建服务与制品仓库的无缝集成
CodeArts Artifact默认集成了CodeArts编译构建服务,编译构建服务生产的所有软件包都可以通过配置自动上传到软件发布库中归档。用户也可以在编译构建任务中配置将构建产物直接发布到私有依赖库。
6.1 构建产物自动归档
在CodeArts编译构建任务中,可以通过配置构建步骤将生成的软件包自动上传到软件发布库或私有依赖库。对于Maven项目,构建任务可以配置mvn deploy命令将制品发布到Maven私有依赖库。对于npm项目,可以配置npm publish命令将包发布到npm私有依赖库。
6.2 从制品仓库获取依赖
构建工具会依据项目配置,自动从制品仓库中精准搜索并下载所需的软件包依赖。这一过程既避免了从不可信渠道获取依赖可能带来的安全隐患,也提升了下载效率,减少因网络问题导致的下载失败。
七、制品安全扫描与开源合规
CodeArts Artifact提供基于软件包的成分分析能力,通过特征匹配的方式分析软件包中的开源软件及版本,并通过漏洞库匹配的方式进行开源漏洞排查。制品安全扫描支持开源合规和漏洞检测、License合规分析、开源组件依赖分析等能力,无需上传源码检测,整个检测分为四个级别,误报低。
安全扫描的核心价值在于:帮助企业在软件交付前识别制品中的安全漏洞和许可证合规风险,避免将存在安全隐患的制品部署到生产环境。用户可以按照仓库或选择具体制品创建扫描方案,实现制品安全的自动化检测。
八、权限管理与安全控制
CodeArts Artifact提供多维度、细粒度的权限控制,支持企业内不同角色对制品仓库访问控制的诉求。
8.1 权限模型
制品仓库服务提供三层权限模型:
- 租户级权限:作用于租户级别的仓库和配置
- 项目级权限:作用于项目级别的仓库
- 实例级权限:作用于具体的仓库实例
权限作用的优先级为:实例级权限 > 项目级权限 > 租户级权限。软件发布库和私有依赖库的权限管理可以独立配置。
8.2 权限配置实践
项目管理者、项目经理、测试经理默认具有'权限配置'的权限,可以配置其他成员角色在私有依赖库的操作权限。用户可以根据需要创建自定义角色并配置不同的权限。建议遵循最小权限原则——只授予用户完成工作所需的最小权限集合。
九、API调用与SDK集成
CodeArts Artifact提供了RESTful API,支持通过HTTPS请求调用。用户可以使用API对制品仓库进行相关操作,如发布库下获取文件信息等。
9.1 API调用基础
API调用的终端节点(Endpoint)不同服务不同区域各不相同。调用API需要提供CodeArts项目ID(project_id),这是一个32位字符的标识。
API请求示例(获取文件树):
GET /cloudartifact/v5/{tenant_id}/{project_id}/{repo_name}/file-tree更多API接口请参考CodeArts Artifact API参考文档。
9.2 SDK调用示例
华为云提供了多语言的SDK,用户可以通过API Explorer的代码示例页签生成自动对应的SDK代码示例。Java SDK调用示例如下:
String sk = System.getenv('CLOUD_SDK_SK');
ICredential auth = new BasicCredentials()
.withAk(ak)
.withSk(sk);
CodeArtsArtifactClient client = CodeArtsArtifactClient.newBuilder()
.withCredential(auth)
.withRegion(region)
.build();建议将AK和SK以密文方式存储,避免硬编码或明文存储带来的安全风险。
十、DevOps持续交付中的制品晋级
在DevOps实践中,制品晋级是保障软件质量的关键环节:
- 开发人员完成代码编写和本地测试后,通过CI/CD工具将生成的制品包归档到开发环境的制品库
- 制品包通过单元测试验证后,研发人员修改版本状态并利用复制功能,使其晋级到测试环境的制品库
- 经测试团队全面测试,若符合标准,制品晋级至预发布环境做最终集成验证
- 所有检查通过后,制品晋级到生产环境制品仓实现正式发布
CodeArts Artifact的制品晋级功能,助力研发团队直观分辨制品成熟度,确保交付优质成果。
十一、批量迁移与最佳实践
11.1 批量迁移
CodeArts Artifact提供了批量迁移工具,方便用户将本地磁盘中的Maven仓库数据、NPM仓库数据批量快速迁移至CodeArts Artifact私有依赖库。这对于从其他制品仓库平台迁移到华为云的用户尤为实用。
11.2 最佳实践建议
- 仓库规划:根据团队和项目结构合理规划仓库组织,建议按项目或产品线划分仓库
- 版本策略:合理使用Release和Snapshot版本策略,Release用于稳定版本,Snapshot用于开发中版本
- 清理策略:配置自动清理策略,及时清理过期制品,避免存储空间浪费
- 权限管理:遵循最小权限原则,定期审查权限配置
- 安全扫描:在制品晋级流程中嵌入安全扫描环节,确保只有通过安全扫描的制品才能晋级到生产环境
- 代理仓库配置:合理配置代理仓库缓存三方依赖,提升构建速度
十二、常见问题与解答
问1:CodeArts Artifact的软件发布库和私有依赖库有什么区别?
答:软件发布库是通用制品库,无格式限制,用于存储和管理构建生成的软件包,支持文件夹组织;私有依赖库是针对特定制品类型(如Maven、npm、Docker等)的专用仓库,用于管理开发过程中的依赖包,支持与本地构建工具无缝对接。两者在CodeArts Artifact中独立存在,相互补充。
问2:如何解决通过Maven客户端上传制品时返回401错误?
答:401错误通常表示认证失败。解决方法是在私有依赖库管理界面重新下载settings.xml配置文件,更新密码到本地,替换原有的settings.xml文件。不同用户账号的私有依赖库仓库密码不同,当用户以不同账号访问时,需要重新下载配置文件获取新的仓库密码。
问3:代理仓库和聚合仓库有什么区别?
答:代理仓库用于代理开源社区仓库和三方依赖仓库,通过缓存机制加速三方依赖的下载。聚合仓库则可以将多个本地仓库和代理仓库聚合为一个统一的仓库入口,简化客户端配置。两者可以配合使用——先创建代理仓库代理三方依赖,再通过聚合仓库将多个代理仓库和本地仓库统一对外提供服务。
问4:制品安全扫描能检测哪些问题?
答:制品安全扫描支持开源合规和漏洞检测、License合规分析、开源组件依赖分析等能力。通过特征匹配的方式分析软件包中的开源软件及版本,并通过漏洞库匹配进行开源漏洞排查。整个检测分为四个级别,误报低。
问5:CodeArts Artifact支持哪些制品类型?
答:CodeArts Artifact支持Generic、Docker、Maven、npm、Go、NuGet、PyPI、Conan、Debian、RPM、CocoaPods、OHPM、Helm、Conda、Composer等10余种主流制品仓库类型。
问6:如何将本地已有的制品仓库数据迁移到CodeArts Artifact?
答:CodeArts Artifact提供了批量迁移工具,支持将本地磁盘中的Maven仓库数据、NPM仓库数据批量快速迁移至CodeArts Artifact私有依赖库。具体操作请参考CodeArts Artifact官方文档中的迁移指南。




