Bitbucket | bitbucket_rest_api gem で 公開鍵を登録・参照・削除 #bitbucket
概要
bitbucket_rest_api gem で 公開鍵を追加・参照・削除します。
前提
- 対象ユーザーは Bitbucket に登録済み
- bitbucket_rest_api gem をインストール済み
- dotenv gem をインストール済み
手順
Gemfile の作成
環境変数の設定に dotenv gem を利用します
source "https://rubygems.org"
gem "dotenv"
gem "bitbucket"
.env の作成
鍵のIDは BitBucket に登録する際のラベル名を指定する。
鍵のパスは登録対象の鍵のパスを記述する。
Basic 認証用のユーザー名とパスワードを記述する。
PUBLIC_KEY_PATH=public_key_path
PUBLIC_KEY_ID=deploy
LOGIN=your_login_name
PASSWORD=your_password
鍵の登録スクリプト
API は以下。
new_key
鍵の ID にはタイムスタンプを付与します。
require 'bitbucket_rest_api'
require 'dotenv'
begin
Dotenv.load
bitbucket = BitBucket.new basic_auth: "#{ENV['LOGIN']}:#{ENV['PASSWORD']}"
timestamp = Time.now.strftime('%Y%m%d_%H%M%S')
bitbucket.users.account.new_key(ENV['LOGIN'], {
key: File.read(ENV['PUBLIC_KEY_PATH']),
label: "#{ENV['PUBLIC_KEY_ID']}_#{timestamp}"
})
puts "Complete add '#{ENV['PUBLIC_KEY_ID']}_#{timestamp}' key"
exit(true)
rescue => e
puts e.message
exit(false)
end
鍵登録の実行
$ ruby new_key.rb
Complete add 'deploy_20141212_151637' key
鍵の参照スクリプト
API は以下。
keys
.env ファイル・ Gemfile は登録処理と同じ。
自ユーザーの鍵をすべて取得します。
require 'bitbucket_rest_api'
require 'dotenv'
begin
Dotenv.load
bitbucket = BitBucket.new basic_auth: "#{ENV['LOGIN']}:#{ENV['PASSWORD']}"
print bitbucket.users.account.keys(ENV['LOGIN']).map { |e|"id:#{e.pk},label:#{e.label}" }.join("\n") + "\n"
exit(true)
rescue => e
puts e.message
exit(false)
end
鍵参照の実行
$ ruby keys.rb
id:2249918,label:deploy_20141212_151637
id:2249873,label:deploy_20141212_150343
id:2249871,label:deploy_20141212_150247
id:2249868,label:deploy_20141212_150207
id:2249860,label:deploy_20141212_150018
id:2249858,label:deploy_20141212_145946
鍵の削除スクリプト
API は以下。
delete_key
.env ファイル・ Gemfile は登録処理と同じ。
登録処理で複数登録した鍵のうち、最新のタイムスタンプを除いて削除します
require 'bitbucket_rest_api'
require 'dotenv'
def show_keys(bitbucket)
print bitbucket.users.account.keys(ENV['LOGIN']).map { |e|"id:#{e.pk},label:#{e.label}" }.join("\n") + "\n"
end
begin
Dotenv.load
bitbucket = BitBucket.new basic_auth: "#{ENV['LOGIN']}:#{ENV['PASSWORD']}"
puts "before remove"
show_keys(bitbucket)
puts "start remove"
bitbucket.users.account.keys(ENV['LOGIN']).sort_by { |e|e[:label] }
.reverse
.drop(1)
.each { |e|bitbucket.users.account.delete_key(ENV['LOGIN'], e[:pk]) }
puts "end remove"
show_keys(bitbucket)
puts "after remove"
exit(true)
rescue => e
puts e.message
exit(false)
end
鍵削除の実行
ruby delete_public_key.rb
- 出力
$ ruby delete_key.rb
before remove
id:2249918,label:deploy_20141212_151637
id:2249873,label:deploy_20141212_150343
id:2249871,label:deploy_20141212_150247
id:2249868,label:deploy_20141212_150207
id:2249860,label:deploy_20141212_150018
id:2249858,label:deploy_20141212_145946
start remove
end remove
after remove
id:2249918,label:deploy_20141212_151637
補足
- REST API の検証時に、 Bitbucket が提供している REST API Console を利用すると便利です