artifact-cli - プライベートなアーティファクト管理ツール
モチベーション
- 元々は Scala の all-in-one バイナリの世代管理が目的
- play dist とか sbt one-jar とか sbt assembly で作られる 1個の zip/jar ファイルが対象
- ゴールはデプロイ/リカバリ運用の可視化と効率化
- リッチなデータベースに依存せず、極力シンプルな、どこでもすぐに使えるツール
- Artifactory のようなツールで実現可能なのかもしれないが未調査
- Amazon S3 をデータストアとして使いたい
コード
Python で書いた。
PyPI にも登録済み。
インストール
- Python 2.6/2.7 で動作確認済み
- Python のパッケージ管理ツール pip が未導入であれば、まずインストール
- 以下のコマンドを実行すれば、art コマンドが利用可能となる
pip install artifact-cli
環境によっては sudo を付ける必要あり。アップグレードは --upgrade オプションを付ければOK。
セットアップ
AWS 環境の準備 (必須)
手順の詳細は割愛。
- AWS アカウント作成
- 適切な権限を持った IAM ユーザの作成と API アクセスキー・シークレットキーの取得
- Amazon S3 バケット作成
設定ファイルの記述 (任意)
設定ファイルのデフォルトパスは ~/.artifact-cli。以下は記述例。
[default] aws_access_key_id = XXXXXXXXXXXXXXXXXXXX aws_secret_access_key = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX bucket = your-bucket-name region = your-region (e.g. ap-northeast-1, us-east-1)
使用例
バージョン確認
$ art --version artifact-cli 0.0.5
ヘルプ表示
$ art -h Usage: art [options] list GROUP art [options] upload GROUP LOCAL_PATH art [options] download GROUP LOCAL_PATH [REVISION | latest] art [options] info GROUP FILE_NAME [REVISION | latest] art [options] delete GROUP FILE_NAME REVISION e.g. GROUP : your.company LOCAL_PATH: /path/to/awesome/target/scala-2.11/awesome-assembly-1.2.3.jar FILE_NAME : awesome-assembly-1.2.3.jar REVISION : 10 Options: --version show program's version number and exit -h, --help show this help message and exit --config=CONFIG path to the config file --check prints only the information to upload, download or delete --force upload file even when it is already registered to the repository --output=OUTPUT specify output format, "text" or "json" (default: text) --access=ACCESS_KEY AWS access key id --secret=SECRET_KEY AWS secret access key --bucket=BUCKET Amazon S3 bucket name --region=REGION Amazon S3 region name (default: us-east-1)
ビルド済みアーティファクトのアップロード
$ art upload your-group-id /path/to/your/project/target/scala-2.11/your-project-assembly-0.1.0-SNAPSHOT.jar [INFO] Reading index: s3://bucket-name/your-group-id/artifact-cli-index.json [INFO] Uploading artifact: Basic Info: Group ID : your-group-id Artifact ID: your-project-assembly Version : 0.1.0-SNAPSHOT Packaging : jar Revision : 1 File Info: User : user@hostname Modified: 2014-11-19 02:57:50 Size : 29689482 (28.3MiB) MD5 : 1afdc6c1b7aaad744a72696c33bd55eb Git Info: Branch : master Tags : release_xxxxxx Last Commit Author : Your Name <mail@example.com> Last Commit Date : 2014-12-03 22:15:09 Last Commit Summary: implement awesome feature Last Commit SHA : 825637d5dfe119ef624cc9b02b027d9cf9aa1a33 [INFO] Uploading file: s3://bucket-name/your-group-id/your-project-assembly/0.1.0-SNAPSHOT/1/your-project-assembly-0.1.0-SNAPSHOT.jar [INFO] Writing index: s3://bucket-name/your-group-id/artifact-cli-index.json
任意の「グループID」(文字列)の指定が必要。
ファイルのパスを指定するだけで Git の情報も自動的に収集。
リビジョン番号は 1から順に自動採番。
アーティファクト一覧表示
$ art list your-group-id FILE # SIZE BUILD TAGS SUMMARY ------------------------------------------------------------------------------------------------------------------------------ your-project-assembly-0.1.0-SNAPSHOT.jar 1 28.3MiB 2014-11-19 02:57:50 release_xxxxxx implement awesome feature
最新版アーティファクトのダウンロード
$ art download your-group-id /tmp/your-project-assembly-0.1.0-SNAPSHOT.jar latest [INFO] Reading index: s3://bucket-name/your-group-id/artifact-cli-index.json [INFO] Downloading artifact: Basic Info: Group ID : your-group-id Artifact ID: your-project-assembly Version : 0.1.0-SNAPSHOT Packaging : jar Revision : 1 File Info: User : user@hostname Modified: 2014-11-19 02:57:50 Size : 29689482 (28.3MiB) MD5 : 1afdc6c1b7aaad744a72696c33bd55eb Git Info: Branch : master Tags : release_xxxxxx Last Commit Author : Your Name <mail@example.com> Last Commit Date : 2014-12-03 22:15:09 Last Commit Summary: implement awesome feature Last Commit SHA : 825637d5dfe119ef624cc9b02b027d9cf9aa1a33 [INFO] Downloaded: /tmp/your-project-assembly-0.1.0-SNAPSHOT.jar
CI 関連
カバレッジ 100% は気持ちいい。
0 件のコメント:
コメントを投稿