GitLab CI/CDをBitbucket Cloudリポジトリで使用する場合
GitLab CI/CDをBitbucket Cloudで利用するには以下の方法があります:
- CI/CD プロジェクトを作成します。
- Git リポジトリを URL で接続します。
Bitbucket CloudリポジトリでGitLab CI/CDを使うには:
- GitLab でプロジェクトを作成します:
- 左のサイドバーで、Search を選択するか、次のページに進んでください。
- View all my projects を選択します。
- ページの右側で、新規プロジェクトを選択します。
- Run CI/CD for external repositoryを選択します。
- URLでリポジトリを選択します。
- Bitbucketのリポジトリの情報をフィールドに入力します:
- Git リポジトリの URL には、Bitbucket のClone this repositoryパネルにある URL を使用します。
- ユーザー名は空白のままにしてください。
- パスワードフィールドには、Bitbucketアプリパスワードを生成して使用できます。
GitLab はリポジトリをインポートし、Pull Mirroring を有効にします。プロジェクトでミラーリングが機能しているかどうかは、設定 > リポジトリ > リポジトリのミラーリングで確認できます。
-
GitLab で、
api
スコープでパーソナルアクセストークンを作成します。このトークンは、新しいコミットを GitLab に通知するために Bitbucket に作成した Web フックからのリクエストを認証するために使用します。 -
BitbucketのSettings > Webhooksから、新しいコミットをGitLabに通知するための新しいWebフックを作成します。
Web フックの URL には GitLab API を設定し、先ほど生成した Personal Access Token を認証に使ってプルミラーリングをトリガーします。
https://gitlab.com/api/v4/projects/<PROJECT_ID>/mirror/pull?private_token=<PERSONAL_ACCESS_TOKEN>
ウェブフックの Trigger は ‘Repository Push’ に設定します。
保存後、Bitbucketリポジトリに変更をプッシュしてWebフックをテストします。
-
Bitbucket で、コミットビルドステータスを設定するビルドステータススクリプトを認証するために、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 にプッシュするように設定されました。