通过编译构建任务发布/获取Go私有组件
背景信息
私有依赖库管理各种开发语言对应的私有组件包(开发者通俗称之为私服)。由于不同的开发语言组件通常有不同的归档格式要求,私有依赖库目的就在于管理私有开发语言组件并在企业或团队内共享给其他开发者开发使用。
本文档介绍如何通过编译构建任务发布私有组件到Go私有依赖库、如何从Go私有依赖库获取依赖包完成编译构建任务。
准备工作
- 已有可用项目。如果没有项目,请先新建CodeArts项目。
- 已创建Go格式私有依赖库。
- 请添加当前账号对当前私有库的权限,请参考管理用户权限。
发布私有组件到Go私有依赖库
- 下载私有依赖库配置文件。
- 登录制品仓库,选择私有依赖库,进入Go私有依赖库。单击页面右侧“操作指导”。
- 在弹框中单击“下载配置指导文件”。
- 配置代码仓库。
- 配置并执行编译构建任务。
- 在代码仓库中,单击页面右上角“设置构建”,页面跳转至“新建编译构建任务”页面。
在页面中选择“空白构建模板”,单击“下一步”。
- 添加步骤“Go语言构建”。
- 编辑步骤“Go语言构建”。
- 工具版本按照实际选择,本文中选择“go-1.13.1”。
- 删除已有命令行,打开在步骤1中下载的配置文件,将文件中的“LINUX下配置go环境变量命令”复制到命令框中。
- 将配置文件中go上传命令代码段复制到命令框中,并参考Go Modules打包方式简介替换命令行中的参数信息(本文打包版本为“v1.0.0”)。
- 单击“新建并执行”,执行构建任务。
待页面提示“构建成功”时,进入私有依赖库,可找到通过构建任务上传的Go私有组件。
- 在代码仓库中,单击页面右上角“设置构建”,页面跳转至“新建编译构建任务”页面。
从Go私有依赖库获取依赖包
以发布私有组件到Go私有依赖库中发布的Go私有组件为例,介绍如何从Go私有依赖库中获取依赖包。
- 参考发布私有组件到Go私有依赖库,下载私有依赖库配置文件。
- 进入代码托管服务,创建Go语言代码仓库(操作步骤请参考创建云端仓库)。本文中使用仓库模板“GoWebDemo”创建代码仓库。
- 配置并执行编译构建任务。
- 在代码仓库中,单击页面右上角“设置构建”,页面跳转至“新建编译构建任务”页面。
在页面中选择“空白构建模板”,单击“下一步”。
- 添加步骤“Go语言构建”。
- 编辑步骤“Go语言构建”。
- 工具版本按照实际选择,本文中选择“go-1.13.1”。
- 删除已有命令行,打开已下载的私有依赖库配置文件,将文件中的“LINUX下配置go环境变量命令”代码段复制到命令框中。
- 根据下载版本,选择配置文件中“go下载命令”相应的命令行复制到命令框中,并将“<modulename>”参数值。(本文中为“example.com/demo”)。
- 在代码仓库中,单击页面右上角“设置构建”,页面跳转至“新建编译构建任务”页面。
- 单击“新建并执行”,执行构建任务。
待页面提示“构建成功”时,查看构建任务详情,在日志中找到类似如下内容,说明编译构建任务从私有依赖库完成了依赖包下载并构建成功。
Go Modules打包方式简介
本文采用Go Modules打包方式完成Go组件的构建与上传。
打包命令主要包括以下几部分:
- 在工作目录中创建源文件夹。
mkdir -p {module}@{version}
- 将代码源拷贝至源文件夹下。
cp -rf . {module}@{version}
- 压缩组件zip包。
zip -D -r [包名] [包根目录名称]
- 上传组件zip包与“go.mod”文件到私有依赖库中。
curl -u {{username}}:{{password}} -X PUT {{repoUrl}}/{filePath} -T {{localFile}}
根据打包的版本不同,组件目录结构有以下几种情况:
- v2.0以下版本:目录结构与“go.mod”文件路径相同,无需附加特殊目录结构。
- v2.0以上(包括v2.0)版本:
- “go.mod”文件中第一行以“/vX”结尾:目录结构需要包含“/vX”。例如,版本为v2.0.1,目录需要增加“v2”。
- “go.mod”文件中第一行不以“/vN”结尾:目录结构不变,上传文件名需要增加“+incompatible”。
下面分别对不同的版本举例说明:
- v2.0以下版本打包。
以下图所示“go.mod”文件为例。
- 在工作目录中创建源文件夹。
- 将代码源拷贝至源文件夹下。
cp -rf . ~/example.com/demo@v1.0.0/
- 压缩组件zip包。
cd ~
然后,使用zip命令将代码压缩成组件包。命令行中,“包根目录名称”为“example.com”“包名”自定义为“v1.0.0.zip”,因此命令如下:
zip -D -r v1.0.0.zip example.com/
- 上传组件zip包与“go.mod”文件到私有依赖库中。
命令行中,参数“username”、“password”、“repoUrl”均可通过私有依赖库配置文件获取。
- 对于zip包,参数“filePath”为“example.com/demo/@v/v1.0.0.zip”,“localFile”为“v1.0.0.zip”。
- 对于“go.mod”文件,参数“filePath”为“example.com/demo/@v/v1.0.0.mod”,“localFile”为“example.com/demo@v1.0.0/go.mod”。
因此命令如下(参数username、password、repoUrl请参照私有依赖库配置文件自行修改):
curl -u {{username}}:{{password}} -X PUT {{repoUrl}}/example.com/demo/@v/v1.0.0.zip -T v1.0.0.zip curl -u {{username}}:{{password}} -X PUT {{repoUrl}}/example.com/demo/@v/v1.0.0.mod -T example.com/demo@v1.0.0/go.mod
- v2.0以上版本打包,且“go.mod”文件中第一行以“/vX”结尾。
以下图所示“go.mod”文件为例。
- 在工作目录中创建源文件夹。
- 将代码源拷贝至源文件夹下。
cp -rf . ~/example.com/demo/v2@v2.0.0/
- 压缩组件zip包。
cd ~
然后,使用zip命令将代码压缩成组件包。命令行中,“包根目录名称”为“example.com”“包名”自定义为“v2.0.0.zip”,因此命令如下:
zip -D -r v2.0.0.zip example.com/
- 上传组件zip包与“go.mod”文件到私有依赖库中。
命令行中,参数“username”、“password”、“repoUrl”均可通过私有依赖库配置文件获取。
- 对于zip包,参数“filePath”为“example.com/demo/v2/@v/v2.0.0.zip”,“localFile”为“v2.0.0.zip”。
- 对于“go.mod”文件,参数“filePath”为“example.com/demo/v2/@v/v2.0.0.mod”,“localFile”为“example.com/demo/v2@v2.0.0/go.mod”。
因此命令如下(参数username、password、repoUrl请参照私有依赖库配置文件自行修改):
curl -u {{username}}:{{password}} -X PUT {{repoUrl}}/example.com/demo/v2/@v/v2.0.0.zip -T v2.0.0.zip curl -u {{username}}:{{password}} -X PUT {{repoUrl}}/example.com/demo/v2/@v/v2.0.0.mod -T example.com/demo/v2@v2.0.0/go.mod
- v2.0以上版本打包,且“go.mod”文件中第一行不以“/vX”结尾。
以下图所示“go.mod”文件为例。
- 在工作目录中创建源文件夹。
- 将代码源拷贝至源文件夹下。
cp -rf . ~/example.com/demo@v3.0.0+incompatible/
- 压缩组件zip包。
cd ~
然后,使用zip命令将代码压缩成组件包。命令行中,“包根目录名称”为“example.com”“包名”自定义为“v3.0.0.zip”,因此命令如下:
zip -D -r v3.0.0.zip example.com/
- 上传组件zip包与“go.mod”文件到私有依赖库中。
命令行中,参数“username”、“password”、“repoUrl”均可通过私有依赖库配置文件获取。
- 对于zip包,参数“filePath”为“example.com/demo/@v/v3.0.0+incompatible.zip”,“localFile”为“v3.0.0.zip”。
- 对于“go.mod”文件,参数“filePath”为“example.com/demo/@v/v3.0.0+incompatible.mod”,“localFile”为“example.com/demo@v3.0.0+incompatible/go.mod”。
因此命令如下(参数username、password、repoUrl请参照私有依赖库配置文件自行修改):
curl -u {{username}}:{{password}} -X PUT {{repoUrl}}/example.com/demo/@v/v3.0.0+incompatible.zip -T v3.0.0.zip curl -u {{username}}:{{password}} -X PUT {{repoUrl}}/example.com/demo/@v/v3.0.0+incompatible.mod -T example.com/demo@v3.0.0+incompatible/go.mod