Bitbucket CloudリポジトリでGitLab CI/CDを使用する
- プラン: Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
GitLab CI/CDは、次のようにBitbucket Cloudで使用できます:
- CI/CDプロジェクトを作成します。
- URLでGitリポジトリを接続します。
Bitbucket CloudリポジトリでGitLab CI/CDを使用するには:
Bitbucketで、コミットビルドステータスをBitbucketに設定するスクリプトを認証するために、App password(Appパスワード)を作成します。リポジトリへの書き込み権限が必要です。
Bitbucketで、リポジトリからCloneを選択し、
git cloneの後から始まるURLをコピーします。GitLabで、プロジェクトを作成します:
- 左側のサイドバーの上部で、新規作成( )を選択し、新規プロジェクト/リポジトリを選択します。
- 外部リポジトリのCI/CDを実行を選択します。
- リポジトリのURLを選択します。
- フィールドに入力します:
- GitリポジトリのURLに、BitbucketリポジトリのURLを入力します。
@usernameを必ず削除してください。 - ユーザー名には、Appパスワードに関連付けられたユーザー名を入力します。
- パスワードには、BitbucketからのAppパスワードを入力します。
- GitリポジトリのURLに、BitbucketリポジトリのURLを入力します。
GitLabはリポジトリをインポートし、プルミラーリングを有効にします。設定 > リポジトリ > リポジトリのミラーリングで、プロジェクトでのミラーリングが機能していることを確認できます。
パーソナルアクセストークンをGitLabで生成します。
apiスコープを設定します。このトークンは、Bitbucketで作成されたWeb hookからのリクエストを認証するために使用され、新しいコミットをGitLabに通知します。Bitbucketで、設定 > Webhooksから、新しいWebhookを作成して、新しいコミットをGitLabに通知します。
Webhook URLをGitLabプルミラーリングエンドポイントに設定し、認証用に生成したばかりのパーソナルアクセストークンを使用します。
https://gitlab.example.com/api/v4/projects/:project_id/mirror/pull?private_token=<your_personal_access_token>Webhookトリガーは、Repository Push(リポジトリのプッシュ)に設定する必要があります。
保存後、Bitbucketリポジトリに変更をプッシュして、Webhookをテストします。
GitLabで、設定 > CI/CD > 変数から、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にプッシュするように設定されました。

