이 페이지에서는 Bitbucket 데이터 센터 호스트를 Cloud Build에 연결하는 방법을 설명합니다. Bitbucket 데이터 센터 호스트에 연결하면 Bitbucket 데이터 센터 저장소가 Cloud Build와 통합됩니다. 이렇게 하면 Bitbucket 데이터 센터에서 저장소를 빌드하고 비공개 네트워크의 Bitbucket 데이터 센터에서 저장소를 빌드하도록 빌드 트리거를 구성할 수 있습니다.
시작하기 전에
-
Enable the Cloud Build and Secret Manager APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.
- 소스 코드를 Bitbucket 데이터 센터 저장소에 준비합니다.
- Bitbucket 데이터 센터 소스 저장소에
Dockerfile또는 Cloud Build 구성 파일을 준비합니다. - Bitbucket 데이터 센터 인스턴스를 설치하지 않은 경우 Bitbucket 데이터 센터 설치 가이드의 안내를 참고하세요.
필수 IAM 권한
Bitbucket 데이터 센터 호스트에 연결하는 데 필요한 권한을 얻으려면 관리자에게 사용자 계정에 대한 Cloud Build 연결 관리자 (roles/cloudbuild.connectionAdmin) IAM 역할을 부여해 달라고 요청하세요.
역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.
커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.
Bitbucket 데이터 센터 인스턴스가 비공개 네트워크에 호스팅되는 경우 비공개 네트워크에서 Bitbucket 데이터 센터로 저장소 빌드를 참조하여 호스트 연결을 구성하는 데 필요한 추가 IAM 역할을 확인합니다.
개인 액세스 토큰 만들기
Bitbucket 데이터 센터 인스턴스에 대한 호스트 연결을 만들기 전에 다음 단계를 따라 Bitbucket 데이터 센터에서 개인 액세스 토큰을 만드세요.
Bitbucket 데이터 센터 인스턴스에 로그인합니다.
안내에 따라 사용자 계정에 대한 HTTP 액세스 토큰을 만듭니다.
저장소 연결 및 연결 해제에 사용할 수 있도록 저장소 관리자 범위의 액세스 토큰을 만듭니다.
Cloud Build 저장소가 저장소에 있는 소스 코드에 액세스할 수 있도록 저장소 읽기 범위의 액세스 토큰을 만듭니다.
토큰 값을 안전하게 저장합니다. 이 토큰을 사용하여 Bitbucket 데이터 센터 저장소에 연결합니다.
Bitbucket 데이터 센터 호스트에 연결
콘솔
Bitbucket 데이터 센터 호스트를 Cloud Build에 연결하려면 다음 안내를 따르세요.
Google Cloud 콘솔에서 저장소 페이지를 엽니다.
페이지 상단에서 2세대 탭을 선택합니다.
상단 표시줄의 프로젝트 선택기에서 Google Cloud 프로젝트를 선택합니다.
호스트 연결 만들기를 클릭하여 새 호스트를 Cloud Build에 연결합니다.
왼쪽 패널에서 Bitbucket을 소스 제공업체로 선택합니다.
연결 구성 섹션에서 다음 정보를 입력합니다.
리전: 연결의 리전을 선택합니다. 리전을 지정해야 합니다. 연결은 전역적으로 존재할 수 없습니다.
이름: 연결의 이름을 입력합니다.
호스트 세부정보 섹션에서 다음 정보를 선택 또는 입력합니다.
Bitbucket 호스트: Bitbucket 데이터 센터를 호스트로 선택합니다.
호스트 URL: Bitbucket 데이터 센터 호스트의 URL을 입력합니다.
네트워킹 섹션에서 다음 옵션 중 하나를 선택합니다.
공개 인터넷: 공개 인터넷을 사용하여 인스턴스에 액세스할 수 있는 경우 이 옵션을 선택합니다.
비공개 네트워크: 인스턴스가 비공개 네트워크에서 호스팅되는 경우 이 옵션을 선택합니다.
CA 인증서: 자체 서명 인증서입니다. 찾아보기를 클릭하여 로컬 머신에서 인증서를 엽니다.
인증서 크기는 10KB를 초과할 수 없으며 PEM 형식(
.pem,.cer,.crt)이어야 합니다. 이 필드를 비워두면 Cloud Build가 기본 인증서 집합의 인증서를 사용합니다.서비스 디렉터리 서비스 섹션에서 서비스의 위치를 선택합니다. 미리 채워진 프로젝트 ID를 수락하거나 다른 프로젝트를 지정할 수 있습니다.
서비스의 프로젝트를 선택합니다. 미리 채워진 프로젝트를 수락하거나, 다른 프로젝트에를 선택하여 찾아보거나 직접 입력을 선택할 수 있습니다.
직접 입력을 선택한 경우 다음 정보를 입력합니다.
프로젝트: 드롭다운 메뉴에서 Google Cloud프로젝트 ID를 입력하거나 선택합니다.
리전: 이 필드는 연결의 리전을 미리 선택합니다. 서비스에 지정된 리전은 연결과 연관된 리전과 일치해야 합니다.
네임스페이스: 서비스의 네임스페이스를 선택합니다.
서비스: 네임스페이스에서 서비스 이름을 선택합니다.
HTTP 액세스 토큰 섹션에서 다음 정보를 입력합니다.
관리자 액세스 토큰: 저장소 관리자 범위의 액세스 권한이 있는 토큰을 입력합니다. 이 토큰은 저장소 연결 및 연결 해제에 사용됩니다.
읽기 액세스 토큰: 저장소 읽기 범위의 액세스 권한이 있는 토큰을 입력합니다. Cloud Build 트리거는 이 토큰을 사용하여 저장소의 소스 코드에 액세스합니다.
연결을 클릭합니다.
연결 버튼을 클릭한 후 개인 액세스 토큰이 Secret Manager에 안전하게 저장됩니다. Bitbucket 데이터 센터 호스트에 연결한 후 Cloud Build가 웹훅 보안 비밀을 자동으로 만듭니다. Secret Manager 페이지에서 보안 비밀을 보고 관리할 수 있습니다.
gcloud
다음 명령어를 실행하여 Secret Manager에 웹훅 보안 비밀을 만듭니다. 여기서 WEBHOOK_SECRET은 웹훅 보안 비밀에 지정하려는 이름입니다.
cat /proc/sys/kernel/random/uuid | tr -d '\n' | gcloud secrets create WEBHOOK_SECRET --data-file=-호스트 연결을 만드는 데 사용하려는 것과 다른 Google Cloud 프로젝트에 보안 비밀을 저장하는 경우 다음 명령어를 실행하여 프로젝트에 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"각 항목의 의미는 다음과 같습니다.
- PROJECT_ID는 Google Cloud 프로젝트 ID입니다.
이제 계속해서 Bitbucket 데이터 센터 호스트를 Cloud Build에 연결할 수 있습니다.
다음 명령어를 실행하여 Bitbucket 데이터 센터 연결을 만듭니다.
gcloud builds connections create bitbucket-data-center CONNECTION_NAME \ --host-uri=HOST_URI \ --project=PROJECT_ID \ --region=REGION \ --authorizer-token-secret-version=projects/PROJECT_ID/secrets/ADMIN_TOKEN/versions/SECRET_VERSION \ --read-authorizer-token-secret-version=projects/PROJECT_ID/secrets/READ_TOKEN/versions/SECRET_VERSION \ --webhook-secret-secret-version=projects/PROJECT_ID/secrets/WEBHOOK_SECRET/versions/SECRET_VERSION ``` Where:
Terraform
Terraform을 사용하여 Bitbucket 데이터 센터 호스트를 Cloud Build에 연결할 수 있습니다.
다음 예시에서 코드 스니펫은 다음을 수행합니다.
- Terraform Google 공급업체 구성
- Bitbucket 토큰을 저장할 Secret Manager 보안 비밀을 만듭니다.
- 보안 비밀에 액세스하기 위해 Cloud Build 서비스 에이전트에 필요한 권한 부여
Bitbucket 데이터 센터 연결을 만듭니다.
// Configure the Terraform Google provider terraform { required_providers { google = {} } } provider "google" { project = "PROJECT_ID" region = "REGION" } // Create secrets and grant permissions to the Cloud Build service agent resource "google_secret_manager_secret" "admin-token-secret" { project = "PROJECT_ID" secret_id = "ADMIN_TOKEN_NAME" replication { auto {} } } resource "google_secret_manager_secret_version" "admin-token-secret-version" { secret = google_secret_manager_secret.admin-token-secret.id secret_data = "ADMIN_TOKEN_VALUE" } resource "google_secret_manager_secret" "read-token-secret" { project = "PROJECT_ID" secret_id = "READ_TOKEN_NAME" replication { auto {} } } resource "google_secret_manager_secret_version" "read-token-secret-version" { secret = google_secret_manager_secret.read-token-secret.id secret_data = "READ_TOKEN_VALUE" } resource "google_secret_manager_secret" "webhook-secret-secret" { project = "PROJECT_ID" secret_id = "WEBHOOK_SECRET_NAME" replication { auto {} } } resource "google_secret_manager_secret_version" "webhook-secret-secret-version" { secret = google_secret_manager_secret.webhook-secret-secret.id secret_data = "WEBHOOK_SECRET_VALUE" } data "google_iam_policy" "p4sa-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-pak" { project = google_secret_manager_secret.admin-token-secret.project secret_id = google_secret_manager_secret.admin-token-secret.secret_id policy_data = data.google_iam_policy.p4sa-secretAccessor.policy_data } resource "google_secret_manager_secret_iam_policy" "policy-rpak" { project = google_secret_manager_secret.read-token-secret.project secret_id = google_secret_manager_secret.read-token-secret.secret_id policy_data = data.google_iam_policy.p4sa-secretAccessor.policy_data } resource "google_secret_manager_secret_iam_policy" "policy-whs" { project = google_secret_manager_secret.webhook-secret-secret.project secret_id = google_secret_manager_secret.webhook-secret-secret.secret_id policy_data = data.google_iam_policy.p4sa-secretAccessor.policy_data } // Create the connection resource resource "google_cloudbuildv2_connection" "my-connection" { project = "PROJECT_ID" location = "REGION" name = "CONNECTION_NAME" bitbucket_data_center_config { host_uri = "BITBUCKET_URI" authorizer_credential { user_token_secret_version = google_secret_manager_secret_version.admin-token-secret-version.id } read_authorizer_credential { user_token_secret_version = google_secret_manager_secret_version.read-token-secret-version.id } webhook_secret_secret_version = google_secret_manager_secret_version.webhook-secret-secret-version.id } depends_on = [ google_secret_manager_secret_iam_policy.policy-pak, google_secret_manager_secret_iam_policy.policy-rpak, google_secret_manager_secret_iam_policy.policy-whs ] }
각 항목의 의미는 다음과 같습니다.
- PROJECT_ID는 Google Cloud 프로젝트 ID입니다.
- PROJECT_NUMBER는 Google Cloud 프로젝트 번호입니다.
- ADMIN_TOKEN_NAME:
repository:admin범위의 토큰 이름입니다. - ADMIN_TOKEN_VALUE: ADMIN_TOKEN_NAME의 값입니다.
- READ_TOKEN_NAME:
repository:read범위의 토큰 이름입니다. - READ_TOKEN_VALUE: READ_TOKEN_NAME의 값입니다.
- WEBHOOK_SECRET_NAME: 웹훅 보안 비밀의 이름입니다.
- WEBHOOK_SECRET_VALUE: WEBHOOK_SECRET_NAME의 값입니다.
- REGION: 연결의 리전입니다.
- CONNECTION_NAME은 Cloud Build의 Bitbucket 데이터 센터 호스트 연결 이름입니다.
- BITBUCKET_URI: Bitbucket 데이터 센터 인스턴스의 URI입니다.
오래되거나 만료된 Bitbucket 데이터 센터 액세스 토큰 순환
Bitbucket 데이터 센터 액세스 토큰이 만료되면 Cloud Build 호스트 연결이 Bitbucket 데이터 센터 저장소에서 연결 해제됩니다. 따라서 다음과 같은 상황에서 오류가 표시됩니다.
Bitbucket 데이터 센터 저장소 Cloud Build 연결을 연결하려고 하면
Failed to fetch repositories to link. Check that Cloud Build is still authorized to access data from the selected connection메시지가 표시됩니다.트리거 페이지에서 실행을 클릭하면 트리거 실행 페이지가 열리고
Failed to list branches. You can still enter one manually메시지가 표시됩니다.
연결의 오래된 토큰이나 만료된 토큰을 순환하려면 다음 단계를 따르세요.
호스트 연결과 연결된 보안 비밀을 찾습니다.
다음 명령어를 실행합니다.
gcloud builds connections describe CONNECTION_PATH --region=REGION각 항목의 의미는 다음과 같습니다.
- CONNECTION_PATH: Cloud Build의 Bitbucket 데이터 센터 호스트 연결 경로입니다(
projects/PROJECT_ID/locations/REGION/connections/CONNECTION_NAME형식). - REGION: 연결의 리전입니다.
- CONNECTION_PATH: Cloud Build의 Bitbucket 데이터 센터 호스트 연결 경로입니다(
명령어 출력에서 사용자 토큰 필드의 값을 찾습니다.
readAuthorizerCredential.userTokenSecretVersion은Read토큰의 Secret Manager 이름을 보여주고authorizerCredential.userTokenSecretVersion은Admin토큰의 Secret Manager 이름을 보여줍니다. 이러한 이름은 Secret Manager에 보안 비밀로 저장됩니다.
Bitbucket 데이터 센터에서 각 액세스 토큰을 순환합니다.
Cloud Build 호스트 연결에 연결된 Bitbucket 데이터 센터 저장소로 이동합니다.
Bitbucket 문서의 안내에 따라 액세스 토큰을 순환합니다. 토큰을 순환하면 Bitbucket 데이터 센터에서 새 사용자 인증 정보로 새 토큰을 만들고 이전 버전의 토큰을 무효화합니다. 순환된 토큰은 원래 토큰과 동일한 권한과 범위를 갖습니다.
순환된 토큰의 ID를 복사합니다.
각 토큰에 대해 새 보안 비밀 버전을 만듭니다.
Google Cloud 콘솔에서 Secret Manager 페이지를 엽니다.
교체한 각 토큰에 대해 1단계에서 식별한 보안 비밀 이름을 찾아 작업을 클릭한 후 새 버전 추가를 클릭합니다.
새 버전 추가 창에서 순환된 토큰의 ID를 입력한 후 새 버전 추가를 클릭합니다.
다음 단계
- Bitbucket 데이터 센터 저장소를 연결하는 방법 알아보기
- Compute Engine에서 블루-그린 배포를 수행하는 방법을 알아봅니다.