はじめに
DeployGate is
deploygate.com
会社で使ってたりするとアカウント管理とかが大変ですよね。退職したらその人のアカウント消したり、気づかないうちにカオスになってしまうことも....
そんなカオスな事を出来るだけ回避したいので Github などで PullRequest ベースでアカウントの追加/削除ができるとちょっと嬉しい気がします。Enterprise プランであれば SAML が使えるのでそれでも良いと思います。
yaml でユーザを管理する
使う gem はこちら
gem install deploygate-client
これは元同僚の Android エンジニアがまだ一緒に働いてた時に「API とかあるならコードで管理するようにしたら?」と言ったら作ってたやつ。結局コード管理するまで至らずに退職しちゃったんですけどね...
まずは既存のアカウント一覧を yaml に吐き出す。
require 'deploygate/client' require 'json' require 'yaml' org_name = "管理したい org" client = Deploygate::Client.new(token: ENV['DEPLOYGATE_TOKEN']) # 環境変数の DEPLOYGATE_TOKEN にトークンを設定する response = client.organization_members(org_name: org_name) members = JSON.parse(response.body)["members"].map { |val| val["name"] } YAML.dump({members: members}, File.open('members.yaml', 'w'))
これで members.yaml に既存のアカウントが書き出される
次は yaml に書いてあるアカウントを DeployGate 側に反映される。
require 'deploygate/client' require 'json' require 'yaml' org_name = "管理したい org" dryrun = ENV['DRY_RUN'] # 環境変数で DRY_RUN を設定するとアカウントの増減はしないで変更予定の出力だけ得られる client = Deploygate::Client.new(token: ENV['DEPLOYGATE_TOKEN']) # 環境変数の DEPLOYGATE_TOKEN にトークンを設定する response = client.organization_members(org_name: org_name) api_members = JSON.parse(response.body)["members"].map { |val| val["name"] } yaml_members = YAML.load_file('members.yaml')["members"] add_members = yaml_members - api_members # yaml に書いてあるのに DeployGate に存在しないアカウントは追加したいアカウント delete_members = api_members - yaml_members # yaml に書いてなくて DeployGate に存在するアカウントは消したいアカウント add_members.each do |member| puts "add #{member}" client.add_organization_member(org_name: org_name, user_name: member) unless dryrun end delete_members.each do |member| puts "delete #{member}" client.delete_organization_member(org_name: org_name, user_name: member) unless dryrun end
こんな感じでこのコードと members.yaml を Github で管理して Actions などで master に merge されたタイミングで実行するようにすれば PullRequest ベースで管理できるようになります。
エラー処理とかは特に行なっていない(ネットワークエラーとかで更新失敗しても再実行すれば yaml と同じ状況にできるので)
最後に
deploygate-client よくできてる。