本页介绍了如何将 GitHub 代码库连接到 Cloud Build。如需详细了解 Cloud Build 仓库,请参阅 Cloud Build 仓库。
准备工作
-
Enable the Cloud Build and Secret Manager APIs.
- 在 GitHub 代码库中准备好源代码。
- GitHub 源代码库中包含
Dockerfile
或 Cloud 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,请执行以下操作:
打开 Google Cloud 控制台中的制品库页面。
您将看到代码库页面。
在顶部栏的项目选择器中,选择您的 Google Cloud 项目。
在页面顶部,选择第 2 代标签页。
点击创建主机连接,将新主机连接到 Cloud Build。
在左侧面板中,选择 GitHub 作为来源提供方。
在配置连接部分中,输入以下信息:
区域:为您的连接选择一个区域。
名称:输入连接的名称。
点击连接。
点击连接按钮后,系统会要求您授权 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 主机,请执行以下操作:
请完成以下步骤:
输入以下命令以建立与 GitHub 代码库的连接:
gcloud builds connections create github CONNECTION_NAME --region=REGION
其中:
- CONNECTION_NAME 是连接的名称。
REGION 是触发器的区域。
运行
gcloud builds connections
命令后,您将看到一个用于授权的链接 Cloud Build GitHub 应用登录您的
github.com
账号。点击相应链接,授权 Cloud Build GitHub 应用。
向应用授权后,Cloud Build 会存储身份验证信息 在 Google Cloud 的 Secret Manager 中将令牌作为 Secret 项目。您可以在 Secret Manager 页面上查看 Secret。
在您的账号或您拥有的组织中安装 Cloud Build GitHub 应用。
使用您的 GitHub 账号允许安装,并在出现提示时选择代码库权限。
运行以下命令,验证 GitHub 关联的安装情况:
gcloud builds connections describe CONNECTION_NAME --region=REGION
其中:
- CONNECTION_NAME 是连接的名称。
- REGION 是触发器的区域。
如果
installationState
字段设为COMPLETE
,则表示您已成功接通 安装了连接。否则,installationState
字段会提供指向所需其他步骤的链接。
您现在已成功创建 GitHub 关联。
以程序化方式连接 GitHub 主机
Terraform
您可以使用 Google Terraform 提供程序完成以下步骤,将 GitHub 主机连接到 Cloud Build:
安装 Cloud Build GitHub 应用 在您的 GitHub 账号或您拥有的组织中。
-
请务必将您的令牌设置为没有失效日期,并选择 在 GitHub 中出现提示时,包含以下权限:
repo
和read: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 主机 从之前的连接中获取的 请完成以下步骤:
在您的 GitHub 账号或您拥有的组织中安装 Cloud Build GitHub 应用。
-
请务必将令牌设置为无到期日期,并在 GitHub 中出现提示时选择以下权限:
repo
和read:user
。如果您的应用安装在组织中,请务必也选择read:org
权限。生成个人访问令牌后,请将生成的令牌保存在安全的位置。您将在 。
运行以下命令,将令牌存储在 Google Cloud 项目的 Secret Manager 中:
echo -n TOKEN | gcloud secrets create SECRET_NAME --data-file=-
其中:
- TOKEN 是您的个人访问令牌。
- SECRET_NAME 是您要为 Secret Manager 中的 Secret。
向 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"
创建 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 代码库连接到主机连接,请完成以下步骤:
打开 Google Cloud 控制台中的制品库页面。
您将看到代码库页面。
在页面顶部,选择第 2 代标签页。
点击关联代码库,以通过您的连接关联代码库。
您将看到关联代码库面板。
在 Connect Repositories 面板中,输入以下信息:
- 连接:从下拉菜单中选择一个连接。
代码库:选择要关联到您的连接的代码库。
代码库名称:输入代码库的名称。
- 已生成:选择此选项可让 Cloud Build 自动创建 代表所选代码库生成的代码库名称
人工:选择此选项可手动为您的 所选代码库
如果选择人工,您可以修改 代码库名称部分中选择的代码库。
点击关联,将您的代码库与您的连接相关联。
您现在已成功将 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 连接。
后续步骤
- 了解如何从 GitHub 构建代码库。
- 了解如何在 Compute Engine 上执行蓝绿部署。