连接到 GitHub 代码库

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

准备工作

  • 启用 Cloud Build and Secret Manager API。

    启用 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. Configure Connection 部分,输入以下信息:

    1. 区域:选择连接的区域。

    2. 名称:输入连接的名称。

  7. 点击连接

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

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

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

现在,您已成功创建 GitHub 连接。

gcloud

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

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

     gcloud builds connections create github CONNECTION_NAME --region=REGION
    

    其中:

    • CONNECTION_NAME 是您的连接的名称。
    • REGION 是触发器的区域

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

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

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

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

  4. 在您的账号或您拥有的组织中安装 Cloud Build GitHub 应用。

    使用您的 GitHub 帐号允许安装,并在出现提示时选择代码库权限。

  5. 运行以下命令以验证 GitHub 连接是否已安装:

     gcloud builds connections describe CONNECTION_NAME --region=REGION
    

    其中:

    • CONNECTION_NAME 是您的连接的名称。
    • REGION 是触发器的区域

    如果 installationState 字段设置为 COMPLETE,则表示您已成功安装连接。否则,installationState 字段会提供相关额外步骤的链接。

现在,您已成功创建 GitHub 连接。

以编程方式连接 GitHub 主机

Terraform

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

  1. 在您的 GitHub 帐号或您拥有的组织中安装 Cloud Build GitHub 应用

  2. 创建个人访问令牌

    请务必将您的令牌设置为无失效日期,并在 GitHub 中收到提示时选择以下权限:reporead:user。如果您的应用安装在组织中,请务必同时选择 read:org 权限。

    生成个人访问令牌后,请将生成的令牌保存在安全的位置。您将在以下步骤中使用生成的令牌。

在以下示例中,代码段会执行以下操作:

  • 配置 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 {
            automatic = true
        }
    }
    
    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 中的令牌或密钥的 ID。
  • GITHUB_PAT 是 GitHub 中您的个人访问令牌的 ID。
  • PROJECT_ID 是您的 Google Cloud 项目 ID。
  • REGION 是您的连接的区域
  • CONNECTION_NAME 是您的 GitHub 连接的名称。
  • INSTALLATION_ID 是您的 Cloud Build GitHub 应用的安装 ID。您可以在 Cloud Build GitHub 应用的网址中找到安装 ID。在以下网址 https://github.com/settings/installations/1234567 中,安装 ID 是数值 1234567

现在,您已成功创建 GitHub 连接。

gcloud

如需使用从先前的连接获取的现有令牌和安装 ID 连接 GitHub 主机,请完成以下步骤:

  1. 在您的 GitHub 帐号或您拥有的组织中安装 Cloud Build GitHub 应用

  2. 创建个人访问令牌

    请务必将您的令牌设置为无失效日期,并在 GitHub 中收到提示时选择以下权限:reporead:user。如果您的应用安装在组织中,请务必同时选择 read:org 权限。

    生成个人访问令牌后,请将生成的令牌保存在安全的位置。您将在以下步骤中使用生成的令牌。

  3. 运行以下命令,将令牌存储在 Google Cloud 项目的 Secret Manager 中:

        echo -n TOKEN | gcloud secrets create SECRET_NAME --data-file=-
    

    其中:

    • TOKEN 是您的个人访问令牌。
    • SECRET_NAME 是您要在 Secret Manager 中为 Secret 指定的名称。
  4. 向 Cloud Build 服务代理授予对该 Secret 的访问权限,其中 SECRET_NAME 是存储在 Secret Manager 中的 Secret 的名称:

      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"
    
  5. 创建 GitHub 连接:

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

    其中:

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

现在,您已成功创建 GitHub 连接。

关联 GitHub 代码库

控制台

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

  1. 打开 Google Cloud 控制台中的制品库页面。

    打开“代码库”页面

    您将看到代码库页面。

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

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

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

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

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

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

      1. Generated:为 Cloud Build 选择此选项,以代表您为所选代码库自动生成代码库名称。
      2. 手动 (Manual):选择此选项可手动为所选代码库指定名称。

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

  5. 点击关联,将您的代码库与您的连接相关联。

现在,您已成功将 GitHub 代码库关联到您的连接。

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 是您的连接的名称。
  • REGION 是您的连接的区域

现在,您已将代码库关联到您的 GitHub 连接。

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

现在,您已将代码库关联到您的 GitHub 连接。

后续步骤