LoginSignup
10
8

More than 5 years have passed since last update.

BitbucketのOAuthでリポジトリクローンする

Last updated at Posted at 2018-05-26

背景

Infrastructure as Codeにおいて、プライベートリポジトリからソースコードを引っ張ってきて、ビルドあるいはデプロイしたいということはよくある(と思っている)。
しかし、コードの中や環境変数に、リポジトリのユーザ名・パスワードなどのアカウント情報を書いておくのは、あまりスマートではない。

本稿では、BitbucketのOAuthを使って、Dockerコンテナ内にコードをデプロイする方法について記述する。

BitbucketのOAuth設定

まずはBitbucketのOAuthを設定し、Credentialを用いてBitbucketにAPIアクセスできるようにする。

  1. Bitbucketのユーザ設定画面から、「設定」->「OAuth」->「コンシューマーキーを追加」をクリックする
    oauth_setting.png

  2. 「Name」と「コールバックURL」を入力し、権限の「リポジトリ」「読み取り」にチェックを入れ設定を保存する。「コールバックURL」は使わないので何でもOK
    スクリーンショット 2018-05-26 20.31.12.png
    スクリーンショット 2018-05-26 20.47.40.png

3.今作成したコンシューマーキーの鍵・シークレットをメモしておく。これでOAuthの準備は完了
スクリーンショット 2018-05-26 20.19.4523.png

アクセストークンの取得

公式を参考にする。
アクセストークンの取得は下記コマンドで可能。
https://bitbucket.org/site/oauth2/access_token を叩いて、認証に成功するとJSONが帰ってくるので、jqコマンドで解析しaccess_tokenを取得する。
jqコマンドのインストールが必要。


# 上記の鍵とシークレットを設定する
$ BB_OAUTH_KEY=****
$ BB_OAUTH_SECRET=****

# API叩いて帰ってきたJSONからjqコマンドで`access_token`を取得する。
$ curl https://bitbucket.org/site/oauth2/access_token \
    -d grant_type=client_credentials \
    -u ${BB_OAUTH_KEY}:${BB_OAUTH_SECRET} \
  | jq -r '.access_token'

Dockerfileからイメージの作成

イメージをビルドする際に、ホストマシンから変数を渡すことで、Dockerfile内にクレデンシャル情報を残さないようにできる。また、上のコマンドを使ってアクセストークンを取得し、リポジトリのクローンを行う。

Dockerfile

# ベースイメージは何でもOK
FROM python:3.6.4-alpine3.7

# build時の変数
ARG BB_OAUTH_KEY
ARG BB_OAUTH_SECRET

RUN apk update
RUN apk add curl
RUN apk add jq
RUN apk add git

# USER_NAME, REPOSITORY_NAME は適宜書き換えてください
RUN git clone https://x-token-auth:`curl https://bitbucket.org/site/oauth2/access_token -d grant_type=client_credentials -u ${BB_OAUTH_KEY}:${BB_OAUTH_SECRET} \
 | jq -r '.access_token'`@bitbucket.org/USER_NAME/REPOSITORY_NAME

ビルドコマンド


$ docker build -f ./Dockerfile --build-arg BB_OAUTH_KEY="****" BB_OAUTH_SECRET="****" .

これでビルドは完了。
環境変数を毎回書くのが面倒という時は、--build-argを指定せずにホストマシンの環境変数からでも取得してくれる。

10
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
8