正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

Bitbucket CloudリポジトリでGitLab CI/CDを使用する

  • プラン: Premium、Ultimate
  • 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated

GitLab CI/CDは、次のようにBitbucket Cloudで使用できます:

  1. CI/CDプロジェクトを作成します。
  2. URLでGitリポジトリを接続します。

Bitbucket CloudリポジトリでGitLab CI/CDを使用するには:

  1. Bitbucketで、コミットビルドステータスをBitbucketに設定するスクリプトを認証するために、App password(Appパスワード)を作成します。リポジトリへの書き込み権限が必要です。

    Appパスワードの作成インターフェースを示すBitbucket Cloudページ

  2. Bitbucketで、リポジトリからCloneを選択し、git cloneの後から始まるURLをコピーします。

  3. GitLabで、プロジェクトを作成します:

    1. 左側のサイドバーの上部で、新規作成 plus )を選択し、新規プロジェクト/リポジトリを選択します。
    2. 外部リポジトリのCI/CDを実行を選択します。
    3. リポジトリのURLを選択します。
    4. フィールドに入力します:
      • GitリポジトリのURLに、BitbucketリポジトリのURLを入力します。@usernameを必ず削除してください。
      • ユーザー名には、Appパスワードに関連付けられたユーザー名を入力します。
      • パスワードには、BitbucketからのAppパスワードを入力します。

    GitLabはリポジトリをインポートし、プルミラーリングを有効にします。設定 > リポジトリ > リポジトリのミラーリングで、プロジェクトでのミラーリングが機能していることを確認できます。

  4. パーソナルアクセストークンをGitLabで生成します。apiスコープを設定します。このトークンは、Bitbucketで作成されたWeb hookからのリクエストを認証するために使用され、新しいコミットをGitLabに通知します。

  5. Bitbucketで、設定 > Webhooksから、新しいWebhookを作成して、新しいコミットをGitLabに通知します。

  6. Webhook URLをGitLabプルミラーリングエンドポイントに設定し、認証用に生成したばかりのパーソナルアクセストークンを使用します。

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

    Webhookトリガーは、Repository Push(リポジトリのプッシュ)に設定する必要があります。

    GitLabミラーリングのWebhook設定を表示するBitbucket Cloudリポジトリ設定ページ

    保存後、Bitbucketリポジトリに変更をプッシュして、Webhookをテストします。

  7. GitLabで、設定 > CI/CD > 変数から、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にプッシュするように設定されました。