当前位置: 首页 > news >正文

极狐GitLab 通用软件包存储库功能介绍

极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有:

  • 极狐GitLab 中文文档
  • 极狐GitLab 中文论坛
  • 极狐GitLab 官网

极狐GitLab 通用软件包存储库 (BASIC ALL)


在项目的软件包库中发布通用文件,如发布二进制文件。然后,在需要将它们用作依赖项时安装它们。

向软件包库进行身份验证


要对软件包库进行身份验证,您需要一个个人访问令牌,CI/CD 作业令牌或部署令牌。

不要使用此处记录的方法以外的身份验证方法,将来可能会删除未记录的身份验证方法。

发布包文件


发布包文件时,如果该包不存在,则会创建该包。
先决条件:

  • 您必须使用 API 进行身份验证。如果使用部署令牌进行身份验证,则必须使用 write_package_registry 范围进行配置。如果使用个人访问令牌或项目访问令牌进行身份验证,则必须使用 api 范围进行配置。

  • 尝试上传具有相同包名称和版本的多个文件时,您必须串行调用此 API 端点。尝试同时将多个文件上传到新的包名称和版本,可能会因请求争相创建包而面临部分失败,并出现 HTTP 500: Internal Server Error 响应。

PUT /projects/:id/packages/generic/:package_name/:package_version/:file_name?status=:status
参数类型是否必需描述
idinteger/stringyesID 或项目的 URL 编码路径。
package_namestringyes包名。只能包含小写字母(az)、大写字母(AZ)、数字(0-9)、点(.)、连字符(-)或下划线(_) .
package_versionstringyes包版本。以下正则表达式验证了这一点:\A(\.?[\w\+-]+\.?)+\z。 您可以在 Rubular 上测试您的版本字符串。
file_namestringyes文件名。它只能包含小写字母(az)、大写字母(AZ)、数字(0-9)、点(.)、连字符(-)或下划线(_)。
statusstringno包状态。可以是 default(默认)或 hidden。隐藏的包不会出现在 UI 或包 API 列表端点中。
selectstringno响应负载。默认情况下,响应为空。 有效值为:package_filepackage_file 返回由此请求创建的包文件记录的详细信息。

在请求正文中提供文件上下文。

使用个人访问令牌的示例请求:

curl --header "PRIVATE-TOKEN: <your_access_token>" \--user "<username>:<Project Access Token>" \--upload-file path/to/file.txt \"https://gitlab.example.com/api/v4/projects/24/packages/generic/my_package/0.0.1/file.txt?select=package_file"

没有属性 select 的示例响应:

{"message":"201 Created"
}

具有属性 select = package_file 的示例请求:

curl --header "PRIVATE-TOKEN: <your_access_token>" \--upload-file path/to/file.txt \"https://gitlab.example.com/api/v4/projects/24/packages/generic/my_package/0.0.1/file.txt?select=package_file"

具有属性 select = package_file 的示例响应:

{"id": 1,"package_id": 1,"created_at": "2021-10-12T12:05:23.387Z","updated_at": "2021-10-12T12:05:23.387Z","size": 0,"file_store": 1,"file_md5": null,"file_sha1": null,"file_name": "file.txt","file": {"url": "/6b/86/6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b/packages/26/files/36/file.txt"},"file_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","verification_retry_at": null,"verified_at": null,"verification_failure": null,"verification_retry_count": null,"verification_checksum": null,"verification_state": 0,"verification_started_at": null,"new_file_path": null
}

发布具有相同名称或版本的包

当您发布与现有包具有相同名称和版本的包时,新的包文件将添加到现有包中。您仍然可以使用 UI 或 API 来访问和查看现有包的旧文件。要删除这些较旧的包修订版,请考虑使用包 API 或 UI。

不允许重复的通用包
  • 在极狐GitLab 15.0 中,需要的角色从开发者更改为维护者。
  • 在极狐GitLab 17.0 中,需要的角色从维护者更改为所有者。

为了防止用户发布重复的通用包,您可以使用 GraphQl API 或 UI。

在用户界面中:

1.对于您的群组,转到 设置 > 软件包与镜像库
2.展开 软件包库 部分。
3.打开 不允许重复 开关。
4.可选。要允许某些重复的包,请在 例外 框中输入与要允许的包的名称和/或版本匹配的正则表达式 pattern。

您的更改会自动保存。

下载包文件


下载一个包文件。

如果多个包具有相同的名称、版本和文件名,则检索最新的包。

先决条件:

  • 您需要用 API 进行认证。

    • 如果使用部署令牌进行认证,必须使用 read_package_registry 和/或 write_package_registry 范围进行配置。
    • 项目访问令牌需要 read_api 范围切至少是 Reporter 角色。

如果您使用 cURL 下载来自极狐GitLab 实例的包,请使用 --location 参数,因为请求可能会被重定向。

GET /projects/:id/packages/generic/:package_name/:package_version/:file_name
参数类型是否必需描述
idinteger/stringyesID 或项目的 URL 编码路径。
package_namestringyes包名称。
package_versionstringyes包版本。
file_namestringyes文件名称。

文件上下文在响应正文中提供。响应内容类型是

application/octet-stream。

::Tabs
:::TabTitle 个人访问令牌

使用个人访问令牌的示例请求为:

# Header authentication
curl --fail-with-body --output file.txt --header "PRIVATE-TOKEN: <your_access_token>" \"https://gitlab.example.com/api/v4/projects/24/packages/generic/my_package/0.0.1/file.txt"# Basic authentication
curl --fail-with-body --output file.txt --user "user:<your_access_token>" \"https://gitlab.example.com/api/v4/projects/24/packages/generic/my_package/0.0.1/file.txt"

:::TabTitle CI_JOB_TOKEN

使用 CI_JOB_TOKEN 的示例请求为:

# Header authentication
curl --fail-with-body --output file.txt --header "JOB-TOKEN: ${CI_JOB_TOKEN}" \"https://gitlab.example.com/api/v4/projects/24/packages/generic/my_package/0.0.1/file.txt"# Basic authentication
curl --fail-with-body --output file.txt --user "gitlab-ci-token:${CI_JOB_TOKEN}" \"https://gitlab.example.com/api/v4/projects/24/packages/generic/my_package/0.0.1/file.txt"

::EndTabs

使用 CI/CD 发布通用包


要使用 GitLab CI/CD 中的通用包,您可以使用 CI_JOB_TOKEN 代替命令中的个人访问令牌。
示例:

image: curlimages/curl:lateststages:- upload- downloadupload:stage: uploadscript:- 'curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file path/to/file.txt "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/my_package/0.0.1/file.txt"'download:stage: downloadscript:- 'wget --header="JOB-TOKEN: $CI_JOB_TOKEN" ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/my_package/0.0.1/file.txt'

在 PowerShell 中使用 Windows 运行程序时,您必须在 uploaddownload 阶段使用 Invoke-WebRequestInvoke-RestMethod 而不是 curl

例如:

upload:stage: uploadscript:- Invoke-RestMethod -Headers @{ "JOB-TOKEN"="$CI_JOB_TOKEN" } -InFile path/to/file.txt -uri "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/my_package/0.0.1/file.txt" -Method put

故障排查


HTTP 403 错误

您可能会得到 HTTP 403 Forbidden 错误。这种错误发生在:

  • 您没有访问资源的权限。
  • 项目软件包仓库未启用。

要解决此问题,确保软件包仓库已启用,并且您有权限访问它。

大型文件上传到 S3 上的内部服务器错误

S3 兼容的对象存储将三个 PUT 请求的尺寸限制为 5GB。如果在对象存储连接设置中将 aws_signature_version 设置为 2,尝试发布大于 5GB 的包文件可能会导致 HTTP 500: 内部服务器错误 响应。

如果您在发布大型文件到 S3 的时候,收到 HTTP 500: Internal Server Error 响应,请设置 aws_signature_version 4:

# Consolidated Object Storage settings
gitlab_rails['object_store']['connection'] = {# Other connection settings'aws_signature_version' => '4'
}
# OR
# Storage-specific form settings
gitlab_rails['packages_object_store_connection'] = {# Other connection settings'aws_signature_version' => '4'
}

相关文章:

  • 点下4个Winform UI开源控件库
  • 养生:拥抱健康生活的全方位指南
  • c语言第一个小游戏:贪吃蛇小游戏03
  • 开源链动2+1模式AI智能名片S2B2C商城小程序赋能新微商服务能力升级研究
  • 《Python星球日记》 第66天:序列建模与语言模型
  • Python的安装使用
  • 医学影像处理与可视化:从预处理到 3D 重建的技术实践
  • python3数据类型
  • 大语言模型强化学习双强:OpenRLHF与verl技术解析
  • 精益数据分析(56/126):创业阶段的划分与精益数据分析实践
  • C++ string比较、string随机访问、string字符插入、string数据删除
  • ARM Cortex-M3内核详解
  • MFCC特征提取及Griffin-Lim算法(librosa实现)
  • C++初阶-string类的模拟实现与改进
  • ORB特征点检测算法
  • Java SpringMVC 异常处理:保障应用健壮性的关键策略
  • uni-app微信小程序登录流程详解
  • 【SSM-SpringMVC(三)】Spring接入Web环境!介绍SpringMVC的拦截器和异常处理机制
  • 《Asp.net Mvc 网站开发》复习试题
  • 典籍知识问答重新生成和消息修改Bug修改
  • 专访|韩国世宗研究所中国研究中心主任:李在明若上台将推行均衡外交
  • 董军同法国国防部长举行会谈
  • 马上评丨为护士减负,不妨破除论文“硬指标”
  • 航行警告:渤海海峡黄海北部执行军事任务,禁止驶入
  • 贵州省总工会正厅级副主席梁伟被查,曾任贵州省纪委副书记
  • 河北邯郸一酒店婚宴发生火灾:众人惊险逃生,酒店未买保险