Bitbucket Cloud 저장소와 함께 GitLab CI/CD 사용
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
GitLab CI/CD는 다음을 통해 Bitbucket Cloud와 함께 사용할 수 있습니다: Bitbucket Cloud 저장소와 함께 GitLab CI/CD를 사용하려면: Bitbucket에서 스크립트가 Bitbucket에서 커밋 빌드 상태를 설정하도록 인증하기 위해 앱 비밀번호를 생성합니다.
GitLab CI/CD는 다음을 통해 Bitbucket Cloud와 함께 사용할 수 있습니다:
- CI/CD 프로젝트 생성.
- URL로 Git 저장소 연결.
Bitbucket Cloud 저장소와 함께 GitLab CI/CD를 사용하려면:
-
Bitbucket에서 스크립트가 Bitbucket에서 커밋 빌드 상태를 설정하도록 인증하기 위해 앱 비밀번호를 생성합니다. 저장소 쓰기 권한이 필요합니다.

-
Bitbucket의 저장소에서 Clone을 선택한 다음
git clone뒤의 URL을 복사합니다. -
GitLab에서 프로젝트를 생성합니다:
- 오른쪽 상단 모서리에서 Create new(+)와 New project/repository를 선택합니다.
- Run CI/CD for external repository를 선택합니다.
- Repository by URL을 선택합니다.
- 필드를 완성합니다:
- Git repository URL에는 Bitbucket 저장소의 URL을 입력합니다.
@username을 제거해야 합니다. - Username에는 앱 비밀번호와 연결된 사용자 이름을 입력합니다.
- Password에는 Bitbucket의 앱 비밀번호를 입력합니다.
- Git repository URL에는 Bitbucket 저장소의 URL을 입력합니다.
GitLab이 저장소를 가져오고 풀 미러링을 활성화합니다. Settings > Repository > Mirroring repositories의 프로젝트에서 미러링이 작동하는지 확인할 수 있습니다.
-
GitLab에서
api범위로 개인 액세스 토큰을 생성합니다. 토큰은 GitLab에 새 커밋을 알리기 위해 Bitbucket에서 생성된 웹 훅의 요청을 인증하는 데 사용됩니다. -
Bitbucket의 Settings > Webhooks에서 GitLab에 새 커밋을 알리는 새 웹훅을 생성합니다.
-
웹훅 URL을 GitLab 풀 미러링 엔드포인트로 설정하고, 방금 생성한 개인 액세스 토큰을 인증에 사용합니다.
https://gitlab.example.com/api/v4/projects/:project_id/mirror/pull?private_token=<your_personal_access_token>웹훅 트리거는 Repository Push로 설정해야 합니다.

저장 후 Bitbucket 저장소에 변경 사항을 푸시하여 웹훅을 테스트합니다.
-
GitLab의 Settings > CI/CD > Variables에서 Bitbucket API를 통해 Bitbucket과 통신할 수 있도록 변수를 추가합니다:
BITBUCKET_ACCESS_TOKEN: 이전에 생성한 Bitbucket 앱 비밀번호. 이 변수는 마스크되어야 합니다.BITBUCKET_USERNAME: Bitbucket 계정의 사용자 이름.BITBUCKET_NAMESPACE: GitLab과 Bitbucket 네임스페이스가 다른 경우 이 변수를 설정합니다.BITBUCKET_REPOSITORY: GitLab과 Bitbucket 프로젝트 이름이 다른 경우 이 변수를 설정합니다.
-
Bitbucket에서 파이프라인 상태를 Bitbucket으로 푸시하는 스크립트를 추가합니다. 스크립트는 Bitbucket에서 생성되지만 미러링 프로세스가 GitLab 미러로 복사합니다. GitLab CI/CD 파이프라인이 스크립트를 실행하고 상태를 Bitbucket으로 다시 푸시합니다.
파일
build_status를 생성하고 다음 스크립트를 삽입한 다음 터미널에서chmod +x build_status를 실행하여 스크립트를 실행 가능하게 만듭니다.#!/usr/bin/env bash # Push GitLab CI/CD build status to Bitbucket Cloud if [ -z "$BITBUCKET_ACCESS_TOKEN" ]; then echo "ERROR: BITBUCKET_ACCESS_TOKEN is not set" exit 1 fi if [ -z "$BITBUCKET_USERNAME" ]; then echo "ERROR: BITBUCKET_USERNAME is not set" exit 1 fi if [ -z "$BITBUCKET_NAMESPACE" ]; then echo "Setting BITBUCKET_NAMESPACE to $CI_PROJECT_NAMESPACE" BITBUCKET_NAMESPACE=$CI_PROJECT_NAMESPACE fi if [ -z "$BITBUCKET_REPOSITORY" ]; then echo "Setting BITBUCKET_REPOSITORY to $CI_PROJECT_NAME" BITBUCKET_REPOSITORY=$CI_PROJECT_NAME fi BITBUCKET_API_ROOT="https://api.bitbucket.org/2.0" BITBUCKET_STATUS_API="$BITBUCKET_API_ROOT/repositories/$BITBUCKET_NAMESPACE/$BITBUCKET_REPOSITORY/commit/$CI_COMMIT_SHA/statuses/build" BITBUCKET_KEY="ci/gitlab-ci/$CI_JOB_NAME" case "$BUILD_STATUS" in running) BITBUCKET_STATE="INPROGRESS" BITBUCKET_DESCRIPTION="The build is running!" ;; passed) BITBUCKET_STATE="SUCCESSFUL" BITBUCKET_DESCRIPTION="The build passed!" ;; failed) BITBUCKET_STATE="FAILED" BITBUCKET_DESCRIPTION="The build failed." ;; esac echo "Pushing status to $BITBUCKET_STATUS_API..." curl --request POST "$BITBUCKET_STATUS_API" \ --user $BITBUCKET_USERNAME:$BITBUCKET_ACCESS_TOKEN \ --header "Content-Type:application/json" \ --silent \ --data "{ \"state\": \"$BITBUCKET_STATE\", \"key\": \"$BITBUCKET_KEY\", \"description\": \"$BITBUCKET_DESCRIPTION\",\"url\": \"$CI_PROJECT_URL/-/jobs/$CI_JOB_ID\" }" -
Bitbucket에서 스크립트를 사용하여 파이프라인 성공 및 실패를 Bitbucket으로 푸시하는
.gitlab-ci.yml파일을 만듭니다. 이전에 추가된 스크립트와 마찬가지로 이 파일은 미러링 프로세스의 일부로 GitLab 저장소로 복사됩니다.stages: - test - ci_status unit-tests: script: - echo "Success. Add your tests!" success: stage: ci_status before_script: - "" after_script: - "" script: - BUILD_STATUS=passed BUILD_KEY=push ./build_status when: on_success failure: stage: ci_status before_script: - "" after_script: - "" script: - BUILD_STATUS=failed BUILD_KEY=push ./build_status when: on_failure
GitLab이 이제 Bitbucket의 변경 사항을 미러링하고, .gitlab-ci.yml에 구성된 CI/CD 파이프라인을 실행하고, 상태를 Bitbucket으로 푸시하도록 구성되었습니다.
