Help us learn about your current experience with the documentation. Take the survey.

部署

  • Tier: Free, Premium, Ultimate
  • Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated

当您将代码版本部署到环境时,就创建了一个部署。 每个环境通常只有一个活跃的部署。

GitLab:

  • 为每个环境提供完整的部署历史记录。
  • 跟踪您的部署,让您始终知道服务器上部署了什么。

如果您的项目关联了像 Kubernetes 这样的部署服务,您可以使用它来协助部署。

创建部署后,您可以将其发布给用户。

配置手动部署

您可以创建一个需要手动启动部署的作业。 例如:

deploy_prod:
  stage: deploy
  script:
    - echo "Deploy to production server"
  environment:
    name: production
    url: https://example.com
  rules:
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
      when: manual

when: manual 操作:

  • 在 GitLab UI 中显示作业的 运行 ( play ) 按钮,文本为 可手动部署到 <环境>
  • 表示 deploy_prod 作业必须手动触发。

您可以在流水线、环境、部署和作业视图中找到 运行 ( play )。

按部署跟踪新包含的合并请求

GitLab 可以按部署跟踪新包含的合并请求。 当部署成功时,系统会计算最新部署与之前部署之间的提交差异。 您可以使用 部署 API 获取跟踪信息, 或在 合并请求页面 的合并后流水线中查看。

要启用跟踪,请配置您的环境,使其满足以下任一条件:

以下是在 .gitlab-ci.yml 中使用 environment 关键字 的一些示例配置:

# 可跟踪的
environment: production
environment: production/aws
environment: development

# 不可跟踪的
environment: review/$CI_COMMIT_REF_SLUG
environment: testing/aws

配置更改仅适用于新的部署。现有的部署记录不会链接或取消链接合并请求。

本地检出部署

每次部署都会在 Git 仓库中保存一个引用,因此 了解当前环境的状态只需执行一次 git fetch

在您的 Git 配置中,向 [remote "<your-remote>"] 块添加一个额外的 fetch 行:

fetch = +refs/environments/*:refs/remotes/origin/environments/*

归档旧部署

当您的项目中发生新部署时, GitLab 会创建 一个指向部署的特殊 Git 引用。 由于这些 Git 引用是从远程 GitLab 仓库填充的, 您可能会发现随着项目中部署数量的增加, 某些 Git 操作(如 git-fetchgit-pull)会变慢。

为了保持 Git 操作的效率,GitLab 只保留最近的部署引用(最多 50,000 个), 并删除其余的旧部署引用。 归档的部署仍然可以通过 UI 或 API 使用,用于审计目的。 此外,即使在归档后,您仍然可以通过指定提交 SHA (例如 git checkout <deployment-sha>)从仓库中获取已部署的提交。

GitLab 保留所有提交作为 keep-around 引用, 以便已部署的提交不会被垃圾回收,即使它们没有被部署引用引用。

部署回滚

当您在特定提交上回滚部署时, 会创建一个新部署。这个部署有自己的唯一作业 ID。 它指向您要回滚到的提交。

为了成功回滚,部署过程必须在作业的 script 中定义。

只运行 部署作业。 如果之前的作业生成了在部署时必须重新生成的工件, 您必须从流水线页面手动运行必要的作业。 例如,如果您使用 Terraform 并且将 planapply 命令分离到多个作业中, 您必须手动运行作业来部署或回滚。

重试或回滚部署

如果部署出现问题,您可以重试或回滚。

要重试或回滚部署:

  1. 在左侧边栏,选择 搜索或跳转至 并找到您的项目。
  2. 选择 运维 > 环境
  3. 选择环境。
  4. 在部署名称右侧:
    • 要重试部署,选择 重新部署到环境
    • 要回滚到部署,在之前成功的部署旁边,选择 回滚环境

如果您在项目中 阻止了过时的部署作业, 回滚按钮可能被隐藏或禁用。 在这种情况下,请参阅 回滚部署的作业重试

相关主题

故障排除

当您处理部署时,可能会遇到以下问题。

找不到部署引用

GitLab 删除旧的部署引用 以保持 Git 仓库的性能。

如果您需要在 GitLab 自托管版中恢复归档的 Git 引用,请让管理员 在 Rails 控制台中执行以下命令:

Project.find_by_full_path(<your-project-full-path>).deployments.where(archived: true).each(&:create_ref)

出于性能考虑,GitLab 未来可能会取消此支持。 您可以在 GitLab 问题跟踪器 中 打开一个问题来讨论此功能的行为。