Bitbucketの新機能 アクセストークンを使って操作を自動化してみた
こんにちは、みみぞうです。
ナビタイムジャパンで『システムや開発環境、チームの改善』を担当しています。
今回は、『Bitbucketのアクセストークンを使って操作を自動化した話』について、具体的には『プルリクエストの自動作成方法』を紹介します。
はじめに
本稿は以下の方をターゲットにしています。
また、記事内のBitbucketはBitbucket Cloud Premiumのことを指します。
アクセストークンとは
アクセストークンは、Bitbucket Cloud REST APIやGitコマンドを利用するために必要な認証情報です。ユーザーではなくbotやCIによる利用が想定されています。
アトラシアン サポートでは以下のように説明されています。
アトラシアン サポートのブログによると、2023年1月30~2月6日に追加された機能となっております。
アクセストークンの種類
アクセストークンは3種類あり、それぞれ有効範囲が異なります。
たとえば、リポジトリアクセストークンは、対象のリポジトリに対してのみ操作が可能になります。他のリポジトリに対しては操作できません。
アプリパスワードではなくアクセストークンを使う理由
プルリクエストを自動作成するだけであれば、アクセストークンを使わなくても、アプリパスワードで実現できます。ただ、アプリパスワードを利用する方法には2つの問題がありました。
ユーザーが操作したように見えてしまう
アプリパスワードはBitbucketの個人アカウントに紐づきます。そのため、あるユーザーの個人アカウントを利用して操作を自動化した場合、それらの記録は『あるユーザー』が操作したように見えてしまいます。
CIやbotによって自動で操作されたプルリクエストは、ユーザーが操作したように見えてほしくない...という期待がありました。
個人アカウントになりすましができてしまう
アプリパスワードは個人のアカウントと紐づいているため、それを利用するとなりすましができてしまいます。アトラシアン サポートのページでも、アプリパスワードを共有すべきでない旨が警告されています。
リポジトリアクセストークンのように、個人アカウントと紐づかず、対象範囲が限られていれば、万が一の場合も被害を最小限にとどめることができます。
アクセストークンを使って操作を自動化する
ここから本題に入ります。操作を自動化する具体的な例として、『プルリクエストを自動生成する』 ユースケースをご紹介します。リリース作業のオペレーションで、プルリクエストを作成しているチームなどでの利用を想定しています。
アクセストークンを作成する
ここから本題に入ります。
まずはアクセストークンを作成します。先ほどご紹介した3種類のうち、今回はどのプランでも利用可能なリポジトリアクセストークンを対象とします。リポジトリの設定画面から Access tokens → Create Repository Access Token を選びます。
名前とScopes(権限)の設定ダイアログが表示されます。適当な名前を入力し、Pull requests → Write をチェックします。そして Create から作成します。
すると、作成したアクセストークンが表示されます。ここでしか参照できませんので、コピーしておきます。
本稿では触れませんが、上から3番目のコマンド例にもある通り、git clone や git pull などのコマンドにも利用できます。
ブランチを作成する
対象のリポジトリにプルリクエストのマージ元となるブランチを作成します。以下のようにブランチを作成し、変更点をpushします。
$ git clone git@bitbucket.org:xxxxxxxxx/access-token-test.git
$ cd access-token-test
$ git checkout -b test-for-access-token
$ echo hogehoge >> README.md
$ git add .
$ git commit -m "Test for access token"
$ git push
コミットグラフはこのようになっています。
アクセストークンを使ってプルリクエストを作成する
プルリクエストの作成には Bitbucket Cloud REST API を使用します。
POSTするJSONファイルを作成し、プルリクエストのタイトルとマージ元のブランチ名を指定します。
// data.json
{
"title": "プルリクてすとです",
"source": {
"branch": {
"name": "test-for-access-token"
}
}
}
curlコマンドを使ってリクエストします。
curl https://api.bitbucket.org/2.0/repositories/xxxxxxxxx/access-token-test/pullrequests \
-H 'Authorization: Bearer <アクセストークン>' \
-X POST \
-H 'Content-Type: application/json' \
-d @data.json
成功すると以下のようなプルリクエストが追加されます。
一目見て、ユーザーアカウントではなくbotだと分かりますね。
まとめ
Bitbucketの新しい機能であるアクセストークンを使って、プルリクエストの作成を自動化する方法を紹介しました。結果として、アプリパスワードを利用していたときに発生していた2つの問題を解消できました。
プルリクエストの作成者が個人アカウントになってしまう
個人アカウントになりすましができてしまう
今回紹介したユースケース以外にも、アクセストークンには様々な可能性があります。
プロジェクトアクセストークンを使うことで、複数リポジトリの管理コストを削減
プルリクエスト作成以外のBitbucket Cloud REST APIを使って、様々な操作を自動化
git clone、git pushなどのコマンドを自動化
Bitbucketで自動化したいアイデアをお持ちの方は、アクセストークンを使えば実現できるかもしれません。その際に、本記事が少しでもお役に立てれば嬉しく思います。
最後までお読みいただきありがとうございました!