连接到 GitHub 代码库 (original) (raw)
本页介绍了如何将 GitHub 代码库连接到 Cloud Build。如需详细了解 Cloud Build 仓库,请参阅 Cloud Build 仓库。
准备工作
- Enable the Cloud Build and Secret Manager APIs.
Enable the APIs - 在 GitHub 代码库中准备好源代码。
- GitHub 源代码库中包含
Dockerfile
或 Cloud Build 配置文件。 - 如果您最初将代码库连接到 Cloud Build,请确保对代码库具有管理员级别权限。如需详细了解 GitHub 代码库权限,请参阅组织的代码库权限级别。
- 如需使用此页面上的
gcloud
命令,请安装 Google Cloud CLI。
连接到 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 并查看 Secret 详情。
授权 Cloud Build GitHub 应用后,您会被重定向到 Cloud Build 的代码库页面。
gcloud
如需使用 gcloud
连接 GitHub 主机,请完成以下步骤:
- 输入以下命令以发起与 GitHub 代码库的连接:
gcloud builds connections create github CONNECTION_NAME --region=REGION
其中:
- CONNECTION_NAME 是连接的名称,它将显示在 Cloud Build 中。
- REGION 是触发器的区域。
运行gcloud builds connections
命令后,您会看到用于授权 Cloud Build GitHub 应用的链接。
- 登录您的
github.com
账号。 - 点击相应链接,授权 Cloud Build GitHub 应用。
授权应用后,Cloud Build 会将身份验证令牌作为 Secret 存储在项目的 Secret Manager 中。 Google Cloud您可以在 Secret Manager 页面上查看 Secret。 - 请登录您的账号或您拥有的组织账号来安装 Cloud Build GitHub 应用。
使用您的 GitHub 账号授权安装,并在出现提示时选择代码库权限。 - 运行以下命令,验证 GitHub 关联的安装情况:
gcloud builds connections describe CONNECTION_NAME --region=REGION
其中:
- CONNECTION_NAME 是 Cloud Build 中 GitHub 主机连接的名称。
- REGION 是触发器的区域。
如果installationState
字段设置为COMPLETE
,则表示您已成功安装关联。否则,installationState
字段会提供指向所需其他步骤的链接。
以程序化方式连接到 GitHub 主机
Terraform
您可以使用 Google Terraform 提供程序,按照以下步骤将 GitHub 主机连接到 Cloud Build:
- 在您的 GitHub 账号或您拥有的组织账号中安装 Cloud Build 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 是连接的名称,它将显示在 Cloud Build 中。
- INSTALLATION_ID 是 Cloud Build GitHub 应用的安装 ID。您可以在 Cloud Build GitHub 应用的网址中找到安装 ID。在以下网址
https://github.com/settings/installations/1234567
中,安装 ID 是数字值1234567
。
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 是 Cloud Build 中 GitHub 主机连接的名称。
- 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 代码库连接到主机连接,请完成以下步骤:
- 在 Google Cloud 控制台中打开制品库页面。
打开“代码库”页面
您会看到代码库页面。 - 在页面顶部,选择第 2 代标签页。
- 点击关联代码库,关联您关联的代码库。
您会看到关联代码库面板。 - 在 Connect Repositories 面板中,输入以下信息:
- 连接:从下拉菜单中选择一个连接。
- 代码库:选择要关联到您的连接的代码库。
- 代码库名称:输入代码库的名称。
- Generated:为 Cloud Build 选择此选项后,Cloud Build 会代表您自动为所选代码库生成代码库名称。
- 手动:选择此选项可手动为所选代码库指定名称。
如果您选择手动,则可以在代码库名称部分修改所选代码库的名称。
- 点击关联,将代码库与关联相关联。
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 是通过 Connect to a GitHub host(连接到 GitHub 主机)在 Cloud Build 中创建的 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
。
后续步骤
- 了解如何从 GitHub 构建代码库。
- 了解如何在 Compute Engine 上执行蓝绿部署。
- 了解如何将其他代码库指定为 build 的依赖项。