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

极狐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'
}
http://www.xdnf.cn/news/5698.html

相关文章:

  • Excel-to-JSON插件专业版功能详解:让Excel数据转换更灵活
  • 什么是内存刷新
  • 中国黄土高原中部XF剖面磁化率和粒度数据
  • 鸿蒙HarmonyOS list优化一: list 结合 lazyforeach用法
  • dp自动化登陆之hCaptcha 验证码
  • http接口性能优化方案
  • uniapp|实现手机通讯录、首字母快捷导航功能、多端兼容(H5、微信小程序、APP)
  • 键盘输出希腊字符方法
  • .net 公共变量 线程安全
  • 高并发内存池(三):TLS无锁访问以及Central Cache结构设计
  • Python文字转语音TTS库示例(edge-tts)
  • keil 解决 Error: CreateProcess failed, Command: ‘XXX\ARM\ARMCC\bin\fromelf.exe
  • 精益数据分析(55/126):双边市场模式的挑战、策略与创业阶段关联
  • Leetcode (力扣)做题记录 hot100(34,215,912,121)
  • 软件设计师-错题笔记-系统开发与运行
  • 吊舱的热灵敏度技术要点
  • 【Linux网络】————HTTP协议详解
  • MySQL全量,增量备份与恢复
  • Netty在Java网络编程中的应用:实现高性能的异步通信
  • 线下消费经济“举步维艰”,开源AI智能名片链动2+1+S2B2C小程序线上“狂飙突进”!
  • springboot集成langchain4j实现票务助手实战
  • 【软考-高级】【信息系统项目管理师】论文写作注意事项及2014年至2024年历年论文题目汇总
  • sqlilab-Less-18
  • 【第四批】运行时应用程序自我保护(RASP)工具能力通过评估名单
  • 【Dv3Admin】工具数据验证配置文件解析
  • 网卡网孔速率的协商是如何进行的?
  • 【Rust泛型】Rust泛型使用详解与应用场景
  • 力扣HOT100之二叉树:104. 二叉树的最大深度
  • 软件安全之内存泄漏
  • 构造+简单树状