InfoGrab DocsInfoGrab Docs

Bitbucket Cloud 리포지터리와 함께 GitLab CI/CD 사용하기

요약

GitLab CI/CD는 다음을 통해 Bitbucket Cloud와 함께 사용할 수 있습니다: Bitbucket Cloud 리포지터리와 함께 GitLab CI/CD를 사용하려면 다음을 수행합니다: Bitbucket에서, 커밋 빌드 상태를 Bitbucket에 설정하는 스크립트를 인증하기 위한 앱 비밀번호를 생성합니다.

GitLab CI/CD는 다음을 통해 Bitbucket Cloud와 함께 사용할 수 있습니다:

  1. CI/CD 프로젝트를 생성합니다.
  2. Git 리포지터리를 URL로 연결합니다.

Bitbucket Cloud 리포지터리와 함께 GitLab CI/CD를 사용하려면 다음을 수행합니다:

  1. Bitbucket에서, 커밋 빌드 상태를 Bitbucket에 설정하는 스크립트를 인증하기 위한 앱 비밀번호를 생성합니다. 리포지터리 쓰기 권한이 필요합니다.

    Bitbucket Cloud 페이지에 앱 비밀번호 생성 인터페이스가 표시된 화면입니다.

  2. Bitbucket에서 리포지터리로 이동하여 Clone을 선택한 다음, git clone 뒤에서 시작하는 URL을 복사합니다.

  3. GitLab에서 프로젝트를 생성합니다:

    1. 오른쪽 상단에서 Create new(+)를 선택한 다음 New project/repository를 선택합니다.
    2. Run CI/CD for external repository를 선택합니다.
    3. Repository by URL을 선택합니다.
    4. 필드를 입력합니다:
      • Git repository URL에 Bitbucket 리포지터리의 URL을 입력합니다. @username은 반드시 제거합니다.
      • Username에 앱 비밀번호와 연결된 사용자 이름을 입력합니다.
      • Password에 Bitbucket에서 발급한 앱 비밀번호를 입력합니다.

    GitLab이 리포지터리를 가져오고 Pull Mirroring을 활성화합니다. 미러링이 작동하는지는 프로젝트의 Settings > Repository > Mirroring repositories에서 확인할 수 있습니다.

  4. GitLab에서 api 스코프를 가진 개인 액세스 토큰을 생성합니다. 이 토큰은 새 커밋을 GitLab에 알리기 위해 Bitbucket에 생성되는 웹훅에서 요청을 인증하는 데 사용됩니다.

  5. Bitbucket에서 Settings > Webhooks로 이동하여 새 커밋을 GitLab에 알리는 새 웹훅을 생성합니다.

  6. 웹훅 URL을 GitLab pull mirroring 엔드포인트로 설정하고, 방금 생성한 개인 액세스 토큰을 인증에 사용합니다.

    https://gitlab.example.com/api/v4/projects/:project_id/mirror/pull?private_token=<your_personal_access_token>
    

    웹훅 트리거는 Repository Push로 설정해야 합니다.

    GitLab 미러링을 위한 웹훅 설정이 표시된 Bitbucket Cloud 리포지터리 설정 페이지입니다.

    저장한 후, Bitbucket 리포지터리에 변경 사항을 푸시하여 웹훅을 테스트합니다.

  7. GitLab에서 Settings > CI/CD > Variables로 이동하여 Bitbucket API를 통한 Bitbucket과의 통신을 허용하는 변수를 추가합니다:

    • BITBUCKET_ACCESS_TOKEN: 앞서 생성한 Bitbucket 앱 비밀번호입니다. 이 변수는 마스킹해야 합니다.
    • BITBUCKET_USERNAME: Bitbucket 계정의 사용자 이름입니다.
    • BITBUCKET_NAMESPACE: GitLab과 Bitbucket의 네임스페이스가 다른 경우 이 변수를 설정합니다.
    • BITBUCKET_REPOSITORY: GitLab과 Bitbucket의 프로젝트 이름이 다른 경우 이 변수를 설정합니다.
  8. 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\" }"
    
  9. 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에 푸시하도록 구성되었습니다.

Bitbucket Cloud 리포지터리와 함께 GitLab CI/CD 사용하기

GitLab v19.5
Tier: Premium, Ultimate
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와 함께 사용할 수 있습니다:

  1. CI/CD 프로젝트를 생성합니다.
  2. Git 리포지터리를 URL로 연결합니다.

Bitbucket Cloud 리포지터리와 함께 GitLab CI/CD를 사용하려면 다음을 수행합니다:

  1. Bitbucket에서, 커밋 빌드 상태를 Bitbucket에 설정하는 스크립트를 인증하기 위한 앱 비밀번호를 생성합니다. 리포지터리 쓰기 권한이 필요합니다.

    Bitbucket Cloud 페이지에 앱 비밀번호 생성 인터페이스가 표시된 화면입니다.

  2. Bitbucket에서 리포지터리로 이동하여 Clone을 선택한 다음, git clone 뒤에서 시작하는 URL을 복사합니다.

  3. GitLab에서 프로젝트를 생성합니다:

    1. 오른쪽 상단에서 Create new(+)를 선택한 다음 New project/repository를 선택합니다.
    2. Run CI/CD for external repository를 선택합니다.
    3. Repository by URL을 선택합니다.
    4. 필드를 입력합니다:
      • Git repository URL에 Bitbucket 리포지터리의 URL을 입력합니다. @username은 반드시 제거합니다.
      • Username에 앱 비밀번호와 연결된 사용자 이름을 입력합니다.
      • Password에 Bitbucket에서 발급한 앱 비밀번호를 입력합니다.

    GitLab이 리포지터리를 가져오고 Pull Mirroring을 활성화합니다. 미러링이 작동하는지는 프로젝트의 Settings > Repository > Mirroring repositories에서 확인할 수 있습니다.

  4. GitLab에서 api 스코프를 가진 개인 액세스 토큰을 생성합니다. 이 토큰은 새 커밋을 GitLab에 알리기 위해 Bitbucket에 생성되는 웹훅에서 요청을 인증하는 데 사용됩니다.

  5. Bitbucket에서 Settings > Webhooks로 이동하여 새 커밋을 GitLab에 알리는 새 웹훅을 생성합니다.

  6. 웹훅 URL을 GitLab pull mirroring 엔드포인트로 설정하고, 방금 생성한 개인 액세스 토큰을 인증에 사용합니다.

    https://gitlab.example.com/api/v4/projects/:project_id/mirror/pull?private_token=<your_personal_access_token>
    

    웹훅 트리거는 Repository Push로 설정해야 합니다.

    GitLab 미러링을 위한 웹훅 설정이 표시된 Bitbucket Cloud 리포지터리 설정 페이지입니다.

    저장한 후, Bitbucket 리포지터리에 변경 사항을 푸시하여 웹훅을 테스트합니다.

  7. GitLab에서 Settings > CI/CD > Variables로 이동하여 Bitbucket API를 통한 Bitbucket과의 통신을 허용하는 변수를 추가합니다:

    • BITBUCKET_ACCESS_TOKEN: 앞서 생성한 Bitbucket 앱 비밀번호입니다. 이 변수는 마스킹해야 합니다.
    • BITBUCKET_USERNAME: Bitbucket 계정의 사용자 이름입니다.
    • BITBUCKET_NAMESPACE: GitLab과 Bitbucket의 네임스페이스가 다른 경우 이 변수를 설정합니다.
    • BITBUCKET_REPOSITORY: GitLab과 Bitbucket의 프로젝트 이름이 다른 경우 이 변수를 설정합니다.
  8. 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\" }"
    
  9. 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에 푸시하도록 구성되었습니다.