1.07.2015

artifact-cli - Private Artifact Manager

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 件のコメント:

コメントを投稿