发布

在极狐GitLab 中,发布使您可以为用户创建项目的快照,包括安装包和发行说明。您可以在任何分支上创建极狐GitLab 发布。创建发布还会创建一个 Git 标签 来标记源代码中的发布点。

caution 删除与发布关联的 Git 标签也会删除发布。

一个发布可以包括:

  • 仓库源代码的快照。
  • 从作业产物创建的通用包
  • 与您的代码的已发布版本相关联的其他元数据。
  • 发行说明。

当您创建发布时:

  • 极狐GitLab 自动存档源代码并将其与发布相关联。
  • 极狐GitLab 会自动创建一个 JSON 文件,列出发布中的所有内容,以便您可以比较和审核发布。这个文件叫做 release evidence

创建发布时或之后,您可以:

查看发布

要查看发布列表:

  • 在左侧边栏中,选择 部署 > 发布,或

  • 在项目概览页面上,如果至少存在一个发布,请单击发布数。

    Number of Releases

    • 在公开项目中,这个数字对所有用户都是可见的。
    • 在私有项目中,具有报告者或更高权限的用户可以看到此数字。

排序发布

要按 发布日期创建日期 对版本进行排序,请从排序顺序下拉列表中进行选择。要在升序或降序之间切换,请选择 排序顺序

Sort Releases dropdown button

最新发布的永久链接

最新发布页面可通过永久 URL 访问。系统将在访问时重定向到最新的发布页面 URL。

URL 的格式为:

https://gitlab.example.com/namespace/project/-/releases/permalink/latest

我们还支持,后缀路径继续重定向到最新发布。例如,如果 v14.8.0-ee 是最新发布并且具有可读链接 https://gitlab.example.com/namespace/project/-/releases/v14.8.0-ee#release,则可以将其寻址为 https://gitlab.example.com/namespace/project/-/releases/permalink/latest#release

请参阅发布 assets 的永久链接部分,了解有关后缀路径结转使用的更多信息。

排序偏好

默认情况下,极狐GitLab 会使用 released_at 时间来获取发布。使用 ?order_by=released_at 查询参数是可选的,?order_by=semver 的支持正在跟踪

使用 RSS feed 来追踪发布

极狐GitLab 提供了项目的发布 RSS feed 机制,以原子格式。要查看 feed:

  1. 对于您是成员的项目:
    1. 在左侧边栏中,选择 搜索或转到,然后找到您的项目。
    2. 在左侧边栏中,选择 部署 > 发布
  2. 对于所有项目:
    1. 转到 项目概览 页面。
    2. 在右侧边栏中,选择 发布 ( )。
  3. 在右上角,选择 feed 图标( )。

创建发布

您可以使用以下方式创建发布:

在发布页面创建发布

先决条件:

  • 您必须至少具有项目的开发人员角色。更多详情,可查阅发布权限

要在“发布”页面中创建发布:

  1. 在左侧边栏中,选择 搜索或转到 并找到您的项目。
  2. 在左侧边栏中,选择 部署 > 发布 并选择 新建发布
  3. 标签名称 下拉菜单中,可以:
    • 选择现有的 Git 标签。 选择已与发布关联的现有标签会导致验证错误。
    • 输入新的 Git 标签名称。
      1. 创建标签 下拉列表中,选择在创建新标签时使用的分支或提交 SHA。
      2. 可选。在 设置标签消息 文本框中,输入消息以创建有注释的标签
      3. 选择 保存
  4. 可选。输入有关发布的其他信息,包括:
  5. 选择 创建发布

使用 CI/CD 作业创建发布

您可以通过在作业定义中使用 release 关键字,将直接创建发布作为极狐GitLab CI/CD 流水线的一部分。

仅当作业处理无误时才会创建发布。如果 API 在发布创建过程中返回错误,则发布作业失败。

使用 CI/CD 作业创建发布的方法包括:

使用自定义 SSL CA 证书颁发机构

您可以使用 ADDITIONAL_CA_CERT_BUNDLE CI/CD 变量来配置自定义 SSL CA 证书颁发机构,用于在 release-cli 通过 API 使用带有自定义证书的 HTTPS 创建版本时验证对等方。 ADDITIONAL_CA_CERT_BUNDLE 值应包含 X.509 PEM 公钥证书的文本表示path/to/file 包含证书颁发机构。 例如,要在 .gitlab-ci.yml 文件中配置此值,请使用以下命令:

release:
  variables:
    ADDITIONAL_CA_CERT_BUNDLE: |
        -----BEGIN CERTIFICATE-----
        MIIGqTCCBJGgAwIBAgIQI7AVxxVwg2kch4d56XNdDjANBgkqhkiG9w0BAQsFADCB
        ...
        jWgmPqF3vUbZE0EyScetPJquRFRKIesyJuBFMAs=
        -----END CERTIFICATE-----
  script:
    - echo "Create release"
  release:
    name: 'My awesome release'
    tag_name: '$CI_COMMIT_TAG'

ADDITIONAL_CA_CERT_BUNDLE 值也可以配置为 UI 中的自定义变量,或者作为 file,需要证书的路径;或作为变量,需要证书的文本表示。

在单个流水线中创建多个发布

一个流水线可以有多个 release 作业,例如:

ios-release:
  script:
    - echo "iOS release job"
  release:
    tag_name: v1.0.0-ios
    description: 'iOS release v1.0.0'

android-release:
  script:
    - echo "Android release job"
  release:
    tag_name: v1.0.0-android
    description: 'Android release v1.0.0'

即将发布

您可以使用 Releases API 提前创建发布。 当您设置未来的 released_at 日期时,发布标签旁边会显示 即将发布 徽章。当 released_at 日期和时间过去后,徽章会自动移除。

An upcoming release

历史发布

  • 引入于 15.2 版本。

您可以使用发布 API 或 UI 创建过去的发布。当您设置过去的 released_at 日期时,发布标签旁边会显示一个 历史发布 徽章。由于在过去的时间被发布,release evidence 不可用。

编辑发布

要在发布创建后进行详情编辑,您可以使用更新发布 API或在 UI 操作。

先决条件:

  • 您必须至少具有开发人员角色。

在 UI 上操作:

  1. 在左侧边栏中,选择 部署 > 发布
  2. 在您要修改的版本的右上角,单击 编辑此发布(铅笔图标)。
  3. 编辑发布 页面上,更改发布的详细信息。
  4. 单击 保存修改

删除发布

  • 引入于 15.2 版本。

当您删除发布时,它的 assets 也会被删除。但是,关联的 Git 标记不会被删除。

先决条件:

  • 您必须至少具有开发者角色。阅读有关发布权限的更多信息。

要在 UI 中删除版本:

  1. 在左侧边栏中,选择 搜索或转到 并找到您的项目。
  2. 选择 部署 > 发布
  3. 在您要删除的发布的右上角,选择 编辑此发布 ( )。
  4. 编辑发布 页面上,选择 删除
  5. 选择 删除发布

将里程碑与发布相关联

您可以将一个发布与一个或多个项目里程碑相关联。

专业版客户可以指定群组里程碑与发布相关联。

您可以在用户界面中执行此操作,或者通过在对 Releases API 的请求中包含一个 milestones 数组。

在用户界面中,要将里程碑与发布相关联:

  1. 在左侧边栏中,选择 部署 > 发布
  2. 在您要修改的发布的右上角,单击 编辑此发布(铅笔图标)。
  3. 里程碑 列表中,选择要关联的每个里程碑。您可以选择多个里程碑。
  4. 单击 保存修改

部署 > 发布 页面上,里程碑 列在顶部,以及有关里程碑中议题的统计信息。

A Release with one associated milestone

计划 > 里程碑 页面上以及单击此页面上的里程碑时,也可以看到发布。

下面是一个里程碑示例,分别是没有发布、一个发布和两个发布。

Milestones with and without Release associations

note 子组的项目发布不能与超级组的里程碑相关联。

创建发布时收到通知

当为您的项目创建新发布时,您可以通过电子邮件收到通知。

要订阅发布通知:

  1. 在左侧边栏中,选择 项目信息
  2. 点击 通知设置(铃铛图标)。
  3. 在列表中,单击 自定义
  4. 选中 新建版本 复选框。
  5. 关闭对话框进行保存。

通过设置部署冻结来防止意外发布

要防止在一段时间内进行生产的意外发布,您可以通过设置部署冻结 时间来实现。您可以使用部署冻结功能,它能够帮助减少不确定性并减少在自动化部署时候的风险。

维护者可以在 UI 上或通过冻结周期 API设置 freeze_startfreeze_end 来配置冻结周期,这些都是定义 crontab 中的条目。

如果作业在冻结周期内执行,那么极狐GitLab CI/CD 会创建一个环境变量 $CI_DEPLOY_FREEZE

要阻止部署作业在群组的多个项目中执行,在跨群组中共享的文件中定义 .freezedeployment 作业。使用 includes关键字将模板包含在您的项目 .gitlab-ci.yml 文件中。

.freezedeployment:
  stage: deploy
  before_script:
    - '[[ ! -z "$CI_DEPLOY_FREEZE" ]] && echo "INFRASTRUCTURE OUTAGE WINDOW" && exit 1; '
  rules:
    - if: '$CI_DEPLOY_FREEZE'
      when: manual
      allow_failure: true
    - when: on_success

要从执行阻止部署作业,在您的 .gitlab-ci.yml 文件的 deploy_to_production 作业中使用 extends关键字来继承 .freezedeployment 模板作业的配置:

deploy_to_production:
  extends: .freezedeployment
  script: deploy_to_prod.sh
  environment: production

此配置可以有条件地阻止部署作业,并保持流水线的连续性。当定义冻结期时,作业失败,流水线可以继续进行而不进行部署。手动部署在冻结期后是可能的。

这种方法能够在重要维护期间提供部署控制,而且能够确保 CI/CD 流水线的不间断运行。

要在 UI 中设置部署冻结窗口,请完成以下步骤:

  1. 用具有维护者角色的用户身份登录极狐GitLab。
  2. 在左侧边栏中,选择 搜索或前往 并找到您的项目。
  3. 选择 设置 > CI/CD
  4. 滚动到 部署冻结
  5. 点击 展开 查看部署冻结表。
  6. 点击 添加部署冻结 打开部署冻结窗口。
  7. 输入所需部署冻结期的开始时间、结束时间和时区。
  8. 在窗口中点击 添加部署冻结
  9. 部署冻结保存后,您可以通过选择编辑按钮( )对其进行编辑,并通过选择删除按钮( )将其删除。

    Deploy freeze modal for setting a deploy freeze period

如果项目包含多个冻结期,则所有冻结期都适用。如果它们重叠,则冻结覆盖整个重叠期。

发布权限

查看发布并下载 assets

  • 具有报告者或以上角色的用户,具有对项目发布的 read 和下载权限。
  • 具有访客角色的用户具有对项目发布的读取和下载访问权限。包括相关的 Git 标签名称、发布描述、发布的作者信息。但是,其他与仓库相关的信息,例如源代码release evidence 已被编辑。

发布版本而不授予对源代码的访问权限

  • 引入于 15.6 版本。

非项目成员可以访问发布,同时保持与代码库相关的信息私有,例如源代码release evidence,这对于使用发布作为可访问的新版本软件,但不希望公开源代码的方式的项目很有用。

要公开发布,请设置以下项目设置

  • 代码库已启用并设置为仅项目成员
  • 发布已启用并设置为具有访问权限的任何人

创建、更新、删除发布及其 assets

作为发布权限控制的示例,您可以通过带有通配符 (*) 的标记保护,只允许维护者或以上权限创建、更新和删除发布 ,并在 允许创建 列中设置 维护者

发布指标

  • 引入于专业版 13.9 版本。

通过导航到 群组 > 分析 > CI/CD,可以获得群组级发布指标。 这些指标包括:

  • 群组内发布总数
  • 群组中至少有一个发布的项目的百分比

故障排查

在创建、更新或删除版本及其 assets 时出现 403 ForbiddenSomething went wrong while creating a new release 错误

如果发布与受保护的标签相关联,则 UI/API 请求可能会导致授权失败。 确保用户或服务/机器人账户也被允许创建受保护的标签

有关更多信息,请参阅发布权限

存储注意事项

请注意,该功能是基于 Git 标签构建的,因此除了创建发布本身之外几乎不需要额外的数据。自动生成的 assets 和 release evidence 会消耗存储空间。