关联到 GitHub 代码库

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

准备工作

  • Enable the Cloud Build and Secret Manager APIs.

    Enable the APIs

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

必需的 IAM 权限

如需连接您的 GitHub 主机,请授予 Cloud Build Connection Admin (roles/cloudbuild.connectionAdmin) 角色分配给您的用户账号。

如需向您的用户账号添加所需的角色,请参阅配置对 Cloud Build 资源的访问权限。如需详细了解与 Cloud Build 关联的 IAM 角色,请参阅 IAM 角色和权限

如需使用 gcloud 安装步骤创建连接,请在 Google Cloud 项目中运行以下命令,将 Secret Manager 管理员角色 (roles/secretmanager.admin) 授予 Cloud Build 服务代理:

PN=$(gcloud projects describe ${PROJECT_ID} --format="value(projectNumber)")
CLOUD_BUILD_SERVICE_AGENT="service-${PN}@gcp-sa-cloudbuild.iam.gserviceaccount.com"
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
  --member="serviceAccount:${CLOUD_BUILD_SERVICE_AGENT}" \
  --role="roles/secretmanager.admin"

连接 GitHub 主机

控制台

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

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

    打开“代码库”页面

    您将看到代码库页面。

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

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

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

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

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

    1. 区域:为您的连接选择一个区域。

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

  7. 点击连接

    点击连接按钮后,系统会要求您授权 Cloud Build GitHub 应用访问您的 GitHub 账号。您可以 通过从以下位置卸载或删除应用来撤消对该应用的访问权限: 托管您的域名托管服务商

    Cloud Build 请求对您的 GitHub 用户账号进行授权 并将生成的授权令牌作为密钥存储在 Secret Manager。授权令牌用于验证您的用户账号是否有权安装 Cloud Build GitHub 应用以及访问关联的代码库。Cloud Build Service Agent 账号 (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 会存储身份验证信息 在 Google Cloud 的 Secret Manager 中将令牌作为 Secret 项目。您可以在 Secret Manager 页面上查看 Secret。

  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. 安装 Cloud Build GitHub 应用 在您的 GitHub 账号或您拥有的组织中。

  2. 创建个人访问令牌

    请务必将您的令牌设置为没有失效日期,并选择 在 GitHub 中出现提示时,包含以下权限:reporead:user。 如果您的应用安装在组织中,请务必也选择 read:org 权限。

    生成个人访问令牌后,请将生成的令牌保存在安全的位置。您将在 。

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

  • 配置 Terraform Google 提供程序

  • 创建一个用于存储 GitHub 个人访问令牌的 Secret,以向 Cloud Build 服务代理授予访问该 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 中令牌或 Secret 的 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
    • INSTALLATION_ID 是您的 GitHub 应用的安装 ID。您的 您可以在 Cloud Build 网址中找到安装 ID。 GitHub 应用。在以下网址中,https://github.com/settings/installations/1234567: 安装 ID 是数值 1234567
    • REGION 是您的连接所在的区域

您现在已成功创建 GitHub 关联。

关联 GitHub 代码库

控制台

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

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

    打开“代码库”页面

    您将看到代码库页面。

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

  3. 点击关联代码库,以通过您的连接关联代码库。

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

  4. Connect Repositories 面板中,输入以下信息:

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

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

      1. 已生成:选择此选项可让 Cloud Build 自动创建 代表所选代码库生成的代码库名称
      2. 人工:选择此选项可手动为您的 所选代码库

        如果选择人工,您可以修改 代码库名称部分中选择的代码库。

  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 连接。

后续步骤