教程:创建用于推送至 Google Artifact Registry 的 GitLab pipeline
学习如何将 GitLab 连接到 Google Cloud,并使用 Compute Engine 上的 runners 创建 GitLab pipeline,将镜像推送到 Artifact Registry。
开始之前
-
要运行本页面的命令,请在以下开发环境中设置
gcloudCLI: -
创建或选择一个 Google Cloud 项目。
如果您不打算保留在此过程中创建的资源,请创建一个新的 Google Cloud 项目,而不是选择现有项目。完成这些步骤后,您可以删除该项目,从而删除与该项目关联的所有资源。
要创建 Google Cloud 项目,请运行以下命令:
gcloud projects create PROJECT_ID将
PROJECT_ID替换为您正在创建的 Google Cloud 项目的名称。 -
选择您创建的 Google Cloud 项目:
gcloud config set project PROJECT_ID将
PROJECT_ID替换为您的 Google Cloud 项目名称。 -
启用 Compute Engine 和 Artifact Registry API:
gcloud services enable compute.googleapis.com artifactregistry.googleapis.com -
按照 Google Cloud Workload Identity Federation 和 IAM 策略 中的说明设置 GitLab on Google Cloud 集成。
-
按照 在 GitLab 项目中设置 Google Artifact Registry 中的说明,将您的 Artifact Registry 仓库连接到 GitLab 项目。
克隆您的 GitLab 仓库
-
要使用 SSH 或 HTTPS 将您的 GitLab 仓库克隆到工作环境,请按照 将 Git 仓库克隆到本地计算机 中的说明操作。
-
如果您在本地 shell 中工作,安装 Terraform。Cloud Shell 中已安装 Terraform。
创建 Dockerfile
-
在您的克隆仓库中,创建一个名为
Dockerfile的新文件。 -
将以下内容复制并粘贴到您的
Dockerfile中。# 用于测试目的的 Dockerfile。每次构建都会生成一个新的随机镜像。 FROM alpine:3.15.11 RUN dd if=/dev/urandom of=random bs=10 count=1 -
将您的
Dockerfile添加到 Git,提交并推送到您的 GitLab 仓库。git add Dockerfile git commit -m "add dockerfile" git push系统会提示您输入用户名和 personal access token。
Dockerfile 每次构建都会生成一个新的随机镜像,仅用于测试目的。
在 Google Compute Engine 上启用持续集成 (CI) runners
GitLab Runner 是一个与 GitLab CI/CD 协作以在 pipeline 中运行作业的应用程序。GitLab on Google Cloud 集成帮助您在 Compute Engine 上设置一个自动扩展的 runners 集群,其中包含一个 runner 管理器,该管理器会创建临时的 runners 来同时执行多个作业。
要设置您的自动扩展 runners 集群,请按照 在 Google Cloud 上设置 GitLab Runner 以执行您的 CI/CD 作业 中的说明操作。选择 Google Cloud 作为您希望 runners 执行 CI/CD 作业的环境,并填写其余的配置详细信息。
输入您的 runners 详细信息后,您可以按照设置说明配置您的 Google Cloud 项目,安装和注册 GitLab Runner,并在您的工作环境中应用提供的 terraform 以应用配置。
创建 pipeline
创建一个 pipeline,构建您的 Docker 镜像,将其推送到 GitLab 容器注册表,并将镜像复制到 Google Artifact Registry。
-
在您的 GitLab 项目中,创建一个
.gitlab-ci.yml文件。 -
要创建一个 pipeline,构建您的镜像,将其推送到 GitLab 容器注册表,并将其复制到 Google Artifact Registry,请修改您的
.gitlab-ci.yml文件内容,使其类似于以下内容。在示例中,替换以下内容:
LOCATION:您创建 Google Artifact Registry 仓库的 Google Cloud 区域。PROJECT:您的 Google Cloud 项目 ID。REPOSITORY:您的 Google Artifact Registry 仓库的仓库 ID。
stages: - build - deploy variables: GITLAB_IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA build-sample-image: image: docker:24.0.5 stage: build services: - docker:24.0.5-dind before_script: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY script: - docker build -t $GITLAB_IMAGE . - docker push $GITLAB_IMAGE include: - component: gitlab.com/google-gitlab-components/artifact-registry/upload-artifact-registry@0.1.0 inputs: stage: deploy source: $GITLAB_IMAGE target: LOCATION-docker.pkg.dev/PROJECT/REPOSITORY/image:v1.0.0
该 pipeline 使用 Docker in Docker 构建 docker:24.0.5 镜像,将其存储在 GitLab 容器注册表中,然后使用 Google Artifact Registry GitLab component 将其推送到您的 Google Artifact Registry 仓库,版本为 v1.0.0。
查看您的 artifacts
要在 GitLab 中查看您的 artifact:
- 在您的 GitLab 项目中,在左侧边栏中,选择 Build > Artifacts。
- 选择 artifact 的名称以查看构建的详细信息。
要在 Google Artifact Registry 中查看您的 artifact:
- 在 Google Cloud 控制台中打开 Repositories 页面。
- 选择您的链接仓库的名称。
- 选择镜像的名称以查看版本名称和标签。
- 选择镜像版本的名称以查看该版本的构建、拉取和清单信息。
清理
为了避免因使用本页面资源而对您的 Google Cloud 账户产生费用,您可以删除您的 Google Cloud 项目。如果您想保留您的项目,可以删除您的 Google Artifact Registry 仓库。
有关 GitLab 和 Google Artifact Registry 定价及项目管理的更多信息,请参阅以下资源:
删除您的 Google Artifact Registry 仓库
如果您想保留您的 Google Cloud 项目,只删除 Google Artifact Registry 仓库资源,请按照本部分的步骤操作。如果您想删除整个 Google Cloud 项目,请按照 删除您的项目 中的步骤操作。
在删除仓库之前,请确保您要保留的任何镜像都已在其他位置可用。
要删除您的仓库,请运行以下命令:
gcloud artifacts repositories delete REPOSITORY \
--location=LOCATION替换以下内容:
REPOSITORY替换为您的 Google Artifact Registry 仓库 IDLOCATION替换为您仓库的位置
删除您的 Google Cloud 项目
注意:删除项目会产生以下影响:
- 项目中的所有内容都将被删除。如果您使用现有项目执行本文档中的任务,当您删除该项目时,也会删除您在该项目中完成的任何其他工作。
- 自定义项目 ID 将丢失。当您创建此项目时,您可能创建了一个自定义项目 ID,希望将来使用它。为了保留使用项目 ID 的 URL(例如 appspot.com URL),请删除项目内的选定资源,而不是删除整个项目。
如果您计划探索 Google Cloud 上的多种架构、教程或快速入门教程,重用项目可以帮助您避免超出项目配额限制。
- 在 Google Cloud 控制台中,转到 管理资源 页面。
- 在项目列表中,选择您要删除的项目,然后选择 Delete。
- 在对话框中,输入项目 ID,然后选择 Shut down 以删除项目。
相关主题
- 学习如何 优化 GitLab CI/CD 配置文件。
- 阅读 使用 IAM 进行访问控制 中关于 GitLab on Google Cloud 集成如何使用 IAM 和工作负载身份联合来控制对 Google Cloud 的访问。