GitHub 저장소에 연결

이 페이지에서는 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에 연결하려면 다음 안내를 따르세요.

  1. Google Cloud 콘솔에서 저장소 페이지를 엽니다.

    저장소 페이지 열기

    저장소 페이지가 표시됩니다.

  2. 상단 표시줄의 프로젝트 선택자에서 Google Cloud 프로젝트를 선택합니다.

  3. 페이지 상단에서 2세대 탭을 선택합니다.

  4. 호스트 연결 만들기를 클릭하여 새 호스트를 Cloud Build에 연결합니다.

  5. 왼쪽 패널에서 GitHub를 소스 제공업체로 선택합니다.

  6. 연결 구성 섹션에서 다음 정보를 입력합니다.

    1. 리전: 연결의 리전을 선택합니다.

    2. 이름: 연결의 이름을 입력합니다.

  7. 연결을 클릭합니다.

    연결 버튼을 클릭하면 GitHub 계정에 액세스할 수 있도록 Cloud Build GitHub 앱을 승인하라는 메시지가 표시됩니다. 언제든지 호스트에서 앱을 제거하거나 삭제하여 앱에 대한 액세스를 취소할 수 있습니다.

    Cloud Build가 GitHub 사용자 계정의 승인을 요청하고 그로 인한 승인 토큰을 프로젝트의 Secret Manager에 보안 비밀로 저장합니다. 승인 토큰은 Cloud Build GitHub 앱 설치 및 링크된 저장소에 대한 사용자 계정의 액세스를 검증하는 데 사용됩니다. Cloud Build 서비스 에이전트 계정(service-{projectNumber}@gcp-sa-cloudbuild.iam.gserviceaccount.com)은 보안 비밀에 액세스하는 데 사용됩니다. 보안 비밀을 보려면 보안 비밀 나열 및 보안 비밀 세부정보 보기를 참조하세요.

    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 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 공급업체 구성

  • 보안 비밀에 액세스할 수 있는 권한을 Cloud Build 서비스 에이전트에 부여하기 위해 GitHub 개인 액세스 토큰을 저장할 보안 비밀 만들기

  • 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에 있는 토큰 또는 보안 비밀의 ID입니다.
  • GITHUB_PAT: GitHub에 있는 개인 액세스 토큰의 ID입니다.
  • PROJECT_ID: Google Cloud 프로젝트 ID입니다.
  • REGION: 연결의 리전입니다.
  • CONNECTION_NAME: GitHub 연결의 이름입니다.
  • INSTALLATION_ID: Cloud Build GitHub 앱의 설치 ID입니다. 설치 ID는 Cloud Build GitHub 앱의 URL에서 찾을 수 있습니다. https://github.com/settings/installations/1234567이라는 URL에서 설치 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에서 보안 비밀에 지정할 이름입니다.
  4. 보안 비밀에 Cloud Build 서비스 에이전트에 대한 액세스 권한을 부여합니다. 여기서 SECRET_NAME은 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"
    
  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입니다. 설치 ID는 Cloud Build GitHub 앱의 URL에서 찾을 수 있습니다. https://github.com/settings/installations/1234567이라는 URL에서 설치 ID는 숫자 값 1234567입니다.
    • REGION: 연결의 리전입니다.

이제 GitHub 연결이 성공적으로 생성되었습니다.

GitHub 저장소 연결

콘솔

GitHub 저장소를 호스트 연결에 연결하려면 다음 단계를 완료하세요.

  1. Google Cloud 콘솔에서 저장소 페이지를 엽니다.

    저장소 페이지 열기

    저장소 페이지가 표시됩니다.

  2. 페이지 상단에서 2세대 탭을 선택합니다.

  3. 저장소 링크를 클릭하여 연결의 저장소에 링크를 겁니다.

    저장소 연결 패널이 표시됩니다.

  4. 저장소 연결 패널에서 다음 정보를 입력합니다.

    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 연결에 링크로 걸렸습니다.

다음 단계