はじめに
この記事は「Qiita エンジニアフェスタ 2021」の参加記事です。
DirectCloud-BOX は、DropBox や Box などのような、いわゆるクラウドストレージです (全部ナントカ Box ですね…)
上記ページの概要を見ればどのようなものかが掴めるかなと思います。
概要
DirectCloud-BOX の API を利用し、GitHub Actions のワークフロー内からファイルをアップロードする JavaScript Action を作ってみました。
ユースケースとしては、こんな感じでしょうか。
- パッケージリポジトリや public な成果物ストアには上げたくないが、社内で共有したい SDK やバイナリファイルをアップロードする
- デザインアセットを生成してアップロードする
- カバレッジレポートなどテスト成果物系をアップロードする
記載されているワークフローの YAML をコピペして GitHub Actions を設定し、必要な環境変数を取得・設定すれば以下のスクショのように動作します。
次の項では、もう少し詳細な設定手順を説明します。
利用手順
DirectCloud-BOX API を使う
利用申請
フリープランを申し込みます。その後メールでログイン情報が届きます。
API を有効化する
DirectCloud-BOX の管理画面より API を有効化し、Service
と Service Key
を取得します。
GitHub Actions を設定する
GitHub Actions について、詳しくはGitHub Actions Documentation - GitHub Docsを参照してください。
ここでは、今回作成した Action を利用するまでの手順を簡単に説明します。
ワークフローを設定する
下記のページの Usage より、YAML をコピーしておきます。
Action を使いたいリポジトリの Actions
タブから設定します。
デフォルトの設定が予め入っていますが、先程コピーした YAML で全て置き換えます。特に支障がなければデフォルトブランチ (main
) にコミットしておきます。
先程のコミットをトリガーにビルドが動き出しますが、必要な環境変数を設定していないため失敗します。
GitHub Encrypted Secrets を設定する
GitHub Actions の中で認証情報を利用できるようにします。
Encrypted Secrets について、詳しくは Encrypted secrets - GitHub Docs を参照してください。
Settings
-> Secrets
を開き、 New repository secret
を押下します。
Secrets 名 (スクショでは DIRECTCLOUDBOX_SERVICE
) と、それに応じた値を入力してください。
5 つと少し多いですが、それぞれ対応する値を登録したら利用準備完了です。
環境変数 | 説明 |
---|---|
DIRECTCLOUDBOX_SERVICE |
管理画面より発行した API キーの Service
|
DIRECTCLOUDBOX_SERVICE_KEY |
管理画面より発行した API キーの Service Key
|
DIRECTCLOUDBOX_CODE |
会社 ID (登録時にメールで届くもの) |
DIRECTCLOUDBOX_ID |
ユーザー ID |
DIRECTCLOUDBOX_PASSWORD |
ユーザーパスワード |
Actions
タブから再度実行して下記のようなログが出れば成功です。
失敗する場合は Secrets の Key と Value 双方のコピペミスがないか確認してみてください。
DirectCloud-BOXのWebアプリ からアップロードしたファイルを確認してみましょう。 (サンプルにしたけど md ファイルはWebアプリからはプレビューできなかったという )
ハマりポイント
DirectCloud-BOX API 利用時のハマりポイント
Service, Service Key の発行が分かりにくい
2021/08/22 時点では、DirectCloud-BOX API リファレンスに以下のように記載があること、その他マニュアルにも記載がないように思えたため、問い合わせをして設定方法をご教示いただきました。
service、service_key の発行につきましては、お問合せ窓口よりご連絡ください
実際は手順にも書いたとおり、管理画面から発行が可能でした。
POST リクエストは form-data の利用が必須
DirectCloud-BOX API を実行するまでにハマった事と感想 - Qiita にも書いてくださっていますが、JSON body だと There is no required input value
というエラーとともにリクエストが失敗します。
突然の node
Folder, File を操作しようとして API リファレンスを眺めると node
というパラメータが必要になってきます。
おそらく DirectCloud-BOX 上で内部的にフォルダ管理に利用している値 (グラフ?) だと思うのですが、重要な割に取得方法が初見だと分からなかったです。。
以下の方法で取得できそうです。
-
フォルダリストの照会 API を
node
無指定で実行すれば起点となるMy Box
とShared Box
の node 値を知れるので、そこから芋づる式に API を叩いていく -
WebApp の URL の末尾の Path (My Box なら
MQ==
)が node 値を Base64 エンコードしたものなので、デコードする
$ echo "MQ==" | base64 -d
1
GitHub Actions 開発時のハマりポイント
いくつか小さくつまずいたので箇条書きで。
- JavaScript Action で利用できる最新の Node.js が node12
- 手元では 14 を利用して書いてしまっており、微妙な記法の差異がありました。
-
Fork したリポジトリでは Secrets 使えない制限が Repository Template 利用時も適用されている?
-
今回作成した Actions のログですが、何かが設定されていれば
***
のようにマスクされた形で表示される変数が空になってしまっています。 - ちょっと情報見つけられなかったので知ってる方いればご教示いただければと思います
-
今回作成した Actions のログですが、何かが設定されていれば
-
ワークフローの更新タイミング
- 普段利用している CI ツール 1 は PR 時にワークフローの変更が適用されるのですが、GitHub Actions はデフォルトではメインブランチにマージされるまで適用されなさそうでした
おわりに
DirectCloud-BOX の API を利用し、GitHub Actions のワークフロー内からファイルをアップロードする JavaScript Action を作ってみました。
DirectCloud-BOX の利用登録と認証情報の取得、GitHub Actions の設定を行うだけで Actions 内から任意のファイルのアップロードが可能です。
また、DirectCloud-BOX の API 利用や GitHub Actions 開発のハマりポイントについてもいくつか触れました。
この記事は「Qiita エンジニアフェスタ 2021」の参加記事です。
-
Screwdriver.cdという CI/CD ツールを利用しています (参考: GKE で Screwdriver.cd を動かしてみる) ↩