连接到 GitHub 代码库

本页介绍了如何将 GitHub 代码库 连接到 Cloud Build。如需详细了解 Cloud Build 代码库,请参阅 Cloud Build 代码库

准备工作

  • 启用 Cloud Build 和 Secret Manager API。

    启用 API 所需的角色

    如需启用 API,您需要拥有 Service Usage Admin IAM 角色 (roles/serviceusage.serviceUsageAdmin),该角色包含 serviceusage.services.enable 权限。了解如何授予 角色

    启用 API

  • 在 GitHub 代码库中准备好源代码。
  • GitHub 源代码库中包含 DockerfileCloud Build 配置文件
  • 如果您最初将代码库连接到 Cloud Build,请确保对代码库具有管理员级别权限。如需详细了解 GitHub 代码库权限,请参阅 组织的代码库权限级别
  • 如需使用此页面上的 gcloud 命令,请安装 Google Cloud CLI

连接到 GitHub 主机

控制台

如需将 GitHub 代码库连接到 Cloud Build,请执行以下操作:

  1. 在 Google Cloud 控制台中打开代码库页面。

    打开“代码库”页面

    您将看到代码库 页面。

  2. 在顶部栏的项目选择器中,选择您的 Google Cloud 项目。

  3. 选择页面顶部的 第 2 代 标签页。

  4. 点击创建主机连接 ,将新主机连接到 Cloud Build。

  5. 在左侧面板中,选择 GitHub 作为来源提供商。

  6. 配置连接 部分,输入以下信息:

    • 区域:为连接选择一个区域。

    • 名称:输入连接的名称。

  7. 可选:如果您想管理用于加密 GitHub 代码库的访问令牌的加密密钥,请前往加密 部分并选择 Cloud Key Management Service 密钥。 如需了解详情,请参阅 为 Secret Manager 启用客户管理的加密密钥

  8. 点击 Connect (关联)。

    点击连接 按钮后,系统会要求您授权 Cloud Build GitHub 应用访问您的 GitHub 账号。您可以随时从主机上卸载或删除该应用来撤消对该应用的访问权限。

    Cloud Build 会请求授权您的 GitHub 用户账号,并将生成的授权令牌作为 Secret 存储在您项目的 Secret Manager 中。授权令牌用于验证您的用户账号的访问权限,以便安装 Cloud Build GitHub 应用并访问关联的代码库。Cloud Build Service Agent 账号 (service-{projectNumber}@gcp-sa-cloudbuild.iam.gserviceaccount.com) 用于访问您的 Secret。如需查看您的 Secret, 请参阅列出 Secret 并查看 Secret 详细信息

    授权 Cloud Build GitHub 应用后,系统会将您 重定向到 Cloud Build 代码库 页面。

gcloud

如需使用 gcloud 连接 GitHub 主机,请完成以下步骤:

  1. 输入以下命令,以发起与 GitHub 代码库的连接:

     gcloud builds connections create github CONNECTION_NAME --region=REGION
    

    其中:

    • CONNECTION_NAME 是连接的名称,它将显示在 Cloud Build 中。
    • REGION 是触发器的 区域

    运行 gcloud builds connections 命令后,您会看到一个用于授权 Cloud Build GitHub 应用的链接。

  2. 登录您的 github.com 账号。

  3. 点击该链接以授权 Cloud Build GitHub 应用。

    授权该应用后,Cloud Build 会将身份验证 令牌作为 Secret 存储在您项目的 Secret Manager 中。 Google Cloud您可以在 Secret Manager 页面上查看您的 Secret。

  4. 请登录您的账号或您拥有的组织账号来安装 Cloud Build GitHub 应用。

    您需要使用自己的 GitHub 账号来授权安装操作,并在出现提示时选择代码库权限。

  5. 运行以下命令,验证 GitHub 连接的安装:

     gcloud builds connections describe CONNECTION_NAME --region=REGION
    

    其中:

    • CONNECTION_NAME 是 Cloud Build 中 GitHub 主机连接的名称。
    • REGION 是触发器的 区域

    如果 installationState 字段设置为 COMPLETE,则表示您已成功安装连接。否则,installationState 字段会提供一个链接,其中包含所需执行的其他步骤。

以程序化方式连接 GitHub 主机

如需以程序化方式连接 GitHub 主机,您必须先为连接配置身份验证令牌,然后在 Cloud Build 中创建 GitHub 连接。

配置身份验证令牌

如需以程序化方式连接 GitHub 主机,您必须创建 Cloud Build GitHub 连接,包括身份验证令牌的 Secret。您可以通过两种方式获取身份验证令牌:

  • 在 GitHub 中创建个人访问令牌。

  • 使用现有 Cloud Build GitHub 连接中的令牌。如果您的 GitHub 账号受到限制而无法创建个人访问令牌,此方法会很有帮助。此外,如果您在通过脚本创建连接时引用此令牌,则无需使用网络浏览器手动对连接进行身份验证。

个人访问令牌

  1. 按照 GitHub 文档中的步骤 创建个人访问令牌

  2. 在 GitHub 中出现提示时,选择以下 OAuth 范围

    • repo,用于授予对公共和私有代码库的完整访问权限。
    • read:user,用于授予读取用户个人资料数据的权限。
    • read:org ,用于对组织成员资格和项目进行只读访问(如果您的应用安装在组织中)。
  3. 保存个人访问令牌的值。 您将在后续步骤中使用它。

现有连接

  1. 在 gcloud CLI 中运行以下命令:

    gcloud builds connections describe CONNECTION_NAME --region=REGION
    

    其中:

    • CONNECTION_NAME 是 GitHub 主机连接的名称。
    • REGION 是触发器的 区域
  2. 在命令输出中,authorizerTokenSecretVersion 的值是包含连接的身份验证令牌的 Secret 的 ID。复制此值并将其保存在安全的位置。您将在后续步骤中使用生成的令牌。

创建 GitHub 连接

使用 Terraform 或 gcloud CLI 创建 GitHub 连接。

Terraform

您可以使用 Google Terraform 提供程序将 GitHub 主机连接到 Cloud Build,只需完成以下步骤:

  1. 请登录您的 GitHub 账号或您拥有的组织账号来安装 Cloud Build GitHub 应用

  2. 在 Terraform 中配置 GitHub 连接。以下 Terraform 代码示例展示了一个配置,该配置执行以下操作:

    • 配置 Terraform Google 提供程序

    • 创建一个 Secret 来存储 GitHub 个人访问令牌

    • 授予 Cloud Build Service Agent 访问该 Secret 的权限

    • 创建 GitHub 连接

    // Configure the terraform google provider
    terraform {
      required_providers {
        google = {}
        }
    }
    
    // Create a secret containing the personal access token and grant permissions to the Service Agent
    resource "google_secret_manager_secret" "github_token_secret" {
        project = PROJECT_ID
        secret_id = SECRET_ID
    
        replication {
            auto {}
        }
    }
    
    resource "google_secret_manager_secret_version" "github_token_secret_version" {
        secret = google_secret_manager_secret.github_token_secret.id
        secret_data = GITHUB_PAT
    }
    
    data "google_iam_policy" "serviceagent_secretAccessor" {
        binding {
            role = "roles/secretmanager.secretAccessor"
            members = ["serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com"]
        }
    }
    
    resource "google_secret_manager_secret_iam_policy" "policy" {
      project = google_secret_manager_secret.github_token_secret.project
      secret_id = google_secret_manager_secret.github_token_secret.secret_id
      policy_data = data.google_iam_policy.serviceagent_secretAccessor.policy_data
    }
    
    // Create the GitHub connection
    resource "google_cloudbuildv2_connection" "my_connection" {
        project = PROJECT_ID
        location = REGION
        name = CONNECTION_NAME
    
        github_config {
            app_installation_id = INSTALLATION_ID
            authorizer_credential {
                oauth_token_secret_version = google_secret_manager_secret_version.github_token_secret_version.id
            }
        }
        depends_on = [google_secret_manager_secret_iam_policy.policy]
    }
    

其中:

  • PROJECT_NUMBER 是您的 Google Cloud 项目编号。
  • SECRET_ID 是 Secret Manager 中 GitHub 个人访问令牌或 Secret 的 ID。
  • GITHUB_PAT 是 GitHub 中个人访问令牌的访问令牌。
  • PROJECT_ID 是您的 Google Cloud 项目 ID。
  • REGION 是连接的 区域
  • CONNECTION_NAME 是连接的名称,它将显示在 Cloud Build 中。
  • INSTALLATION_ID 是 Cloud Build GitHub 应用的安装 ID。您可以在 Cloud Build GitHub 应用的网址中找到安装 ID。在以下网址中,https://github.com/settings/installations/1234567,安装 ID 是数值 1234567

gcloud

如需将 GitHub 主机连接到 Cloud Build,请执行以下操作:

  1. 请登录您的 GitHub 账号或您拥有的组织账号来安装 Cloud Build GitHub 应用

  2. 可选。如果您使用 GitHub 个人访问令牌进行 身份验证,请运行以下命令,将令牌存储在您项目的 Secret Manager 中: Google Cloud

    echo -n 'TOKEN' | gcloud secrets create SECRET_NAME --data-file=-
    
  3. 向 Cloud Build Service Agent 授予对 Secret 的访问权限,其中 SECRET_NAME 是 Secret 在 Secret Manager 中存储的名称:

    PROJECT_ID=$(gcloud config list --format="value(core.project)")
    PN=$(gcloud projects describe ${PROJECT_ID} --format="value(projectNumber)")
    CLOUD_BUILD_SERVICE_AGENT="service-${PN}@gcp-sa-cloudbuild.iam.gserviceaccount.com"
    gcloud secrets add-iam-policy-binding SECRET_NAME \
      --member="serviceAccount:${CLOUD_BUILD_SERVICE_AGENT}" \
      --role="roles/secretmanager.secretAccessor"
    
  4. 创建 GitHub 连接:

    gcloud builds connections create github CONNECTION_NAME \
      --authorizer-token-secret-version=projects/PROJECT_ID/secrets/SECRET_NAME/versions/VERSION  \
      --app-installation-id=INSTALLATION_ID --region=REGION
    

    其中:

    • CONNECTION_NAME 是 Cloud Build 中 GitHub 主机连接的名称。
    • PROJECT_ID 是您的 Google Cloud 项目 ID。
    • SECRET_NAME 是 Secret 在 Secret Manager 中存储的名称。
    • VERSION 是 Secret 的版本。
    • INSTALLATION_ID 是 GitHub 应用的安装 ID。您可以在 Cloud Build GitHub 应用的网址中找到安装 ID。在以下网址中,https://github.com/settings/installations/1234567,安装 ID 是数值 1234567
    • REGION 是连接的 区域

连接 GitHub 代码库

控制台

如需将 GitHub 代码库连接到主机连接,请完成以下步骤:

  1. 在 Google Cloud 控制台中打开代码库页面。

    打开“代码库”页面

    您将看到代码库 页面。

  2. 选择页面顶部的 第 2 代 标签页。

  3. 点击关联代码库 ,以关联连接中的代码库。

    您将看到关联代码库 面板。

  4. 关联代码库 面板中,输入以下信息:

    1. 连接:从下拉菜单中选择一个连接。
    2. 代码库:选择要关联到连接的代码库。

    3. 代码库名称:输入代码库的名称。

      1. 已生成:选择此选项,让 Cloud Build 代表您为所选代码库自动 生成代码库名称。
      2. 手动:选择此选项,为所选代码库手动指定名称。

        如果您选择手动,则可以在代码库名称部分修改所选代码库的名称。

  5. 点击关联 ,将代码库关联到连接。

gcloud

如需将 GitHub 代码库添加到连接,请输入以下命令:

   gcloud builds repositories create REPO_NAME \
     --remote-uri=REPO_URI \
     --connection=CONNECTION_NAME --region=REGION

其中:

  • REPO_NAME 是代码库的名称。
  • REPO_URI 是 GitHub 代码库的链接。例如,https://github.com/cloud-build/test-repo.git
  • CONNECTION_NAME 是在 Cloud Build 中从 连接到 GitHub 主机 创建的 GitHub Enterprise 主机连接的名称。
  • REGION 是连接的 区域

Terraform

如需将 GitHub 代码库添加到连接,请将以下代码段添加到 Terraform 配置:

    resource "google_cloudbuildv2_repository" "my_repository" {
      project = "PROJECT_ID"
      location = "REGION"
      name = "REPO_NAME"
      parent_connection = google_cloudbuildv2_connection.my_connection.name
      remote_uri = "URI"
  }

其中:

  • PROJECT_ID 是您的 Google Cloud 项目 ID。
  • REPO_NAME 是 GitHub 代码库的名称。
  • REGION 是连接的 区域
  • URI 是代码库的主机 URI。例如,https://github.com/myuser/myrepo.git

后续步骤