Bitbucket Cloud 리포지터리에서 GitLab CI/CD 사용하기
Bitbucket Cloud 리포지터리에서 GitLab CI/CD를 사용하는 방법은 다음과 같습니다:
- CI/CD 프로젝트를 생성합니다.
- URL을 통해 Git 리포지터리를 연결합니다.
Bitbucket Cloud 리포지터리에서 GitLab CI/CD를 사용하려면 다음을 수행하세요:
-
Bitbucket에서 앱 암호를 생성하여 해당 스크립트를 인증합니다. 리포지터리 쓰기 권한이 필요합니다. (앱 암호 생성 방법)
-
Bitbucket에서 리포지터리에서 Clone을 선택한 후
git clone
다음에 시작하는 URL을 복사합니다. - GitLab에서 프로젝트를 생성합니다:
- 왼쪽 사이드바에서 새로 만들기 () 및 새 프로젝트/리포지터리 만들기를 선택합니다.
- 외부 리포지터리용 CI/CD 실행을 선택합니다.
- URL을 통한 리포지터리를 선택합니다.
- 필드를 완성합니다:
-
Git 리포지터리 URL에 Bitbucket 리포지터리의 URL을 입력합니다.
@username
을 제거해야 합니다. - 사용자 이름에는 앱 암호와 연관된 사용자 이름을 입력합니다.
- 암호에는 Bitbucket의 앱 암호를 입력합니다.
-
Git 리포지터리 URL에 Bitbucket 리포지터리의 URL을 입력합니다.
GitLab은 리포지터리를 가져오고 Pull Mirroring을 활성화합니다. 프로젝트의 설정 > 리포지터리 > 리포지터리 미러링에서 미러링이 작동하는지 확인할 수 있습니다.
-
GitLab에서 개인 액세스 토큰을 생성합니다. 해당 토큰은 Bitbucket에서 생성된 웹훅으로부터의 요청을 인증하는 데 사용됩니다.
-
Bitbucket에서 설정 > 웹훅에서 GitLab에 새 웹훅을 만들어 새 커밋을 알립니다.
웹훅 URL은 Pull Mirroring을 트리거하기 위해 GitLab API로 설정되어야 하며, 인증을 위해 방금 생성한 개인 액세스 토큰을 사용해야 합니다.
https://gitlab.example.com/api/v4/projects/:project_id/mirror/pull?private_token=<your_personal_access_token>
웹훅 트리거는 리포지터리 푸시로 설정되어야 합니다.
저장한 후에, Bitbucket 리포지터리에 변경 사항을 푸시하여 웹훅을 테스트합니다.
-
GitLab에서 설정 > CI/CD > 변수에서 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 # GitLab CI/CD 빌드 상태를 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 "$CI_PROJECT_NAMESPACE를 BITBUCKET_NAMESPACE로 설정합니다" BITBUCKET_NAMESPACE=$CI_PROJECT_NAMESPACE fi if [ -z "$BITBUCKET_REPOSITORY" ]; then echo "$CI_PROJECT_NAME를 BITBUCKET_REPOSITORY로 설정합니다" 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="빌드가 실행 중입니다!" ;; passed) BITBUCKET_STATE="SUCCESSFUL" BITBUCKET_DESCRIPTION="빌드가 성공했습니다!" ;; failed) BITBUCKET_STATE="FAILED" BITBUCKET_DESCRIPTION="빌드에 실패했습니다." ;; esac echo "$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에서
.gitlab-ci.yml
파일을 생성하여 파이프라인 성공과 실패를 Bitbucket에 푸시하는 스크립트를 사용합니다. 위에서 추가한 스크립트와 유사하게, 이 파일은 미러링 프로세스의 일환으로 GitLab 리포지터리에 복사됩니다.stages: - test - ci_status unit-tests: script: - "성공. 테스트를 추가하세요!" 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에 상태를 푸시하도록 구성되었습니다.