https://github.com/mumoshu/variant
- 手順でよくわからない、もしくは上手く動かないという方がいれば随時声かけてください
- もし、文章の方が説明しやすいという方がいれば@k_kinzalまでメンションかDMをお送りください
$ curl -L https://github.com/mumoshu/variant/releases/download/v0.10.0/variant-darwin-amd64.tar.gz | tar zx
$ cp ./variant /usr/local/bin/variant
$ variant --help
※ PATHが通ってれば/usr/local/bin
でなくても大丈夫です
$ curl -L https://github.com/mumoshu/variant/releases/download/v0.10.0/variant-linux-amd64.tar.gz| tar zx
$ cp ./variant /usr/local/bin/variant
$ variant --help
※ PATHが通ってれば/usr/local/bin
でなくても大丈夫です
- https://gist.github.com/k-kinzal/18999c7dfaaafed416af95f1f59cbccc#file-dockerfile をダウンロード
docker build -t variant [ダウンロードした先のディレクトリ]
でビルドdocker run variant --help
で動作を確認
まずは初めにタスクを定義するためのyamlを作成します。
var.definition.yaml
tasks:
echo:
description: echo test.
script: |
echo "Hallo World!!"
確認のためにvariantでタスクを実行してみましょう。
var.definition.yaml
を置いたディレクトリで下記のコマンドを実行してください。
Mac/Linux
$ variant echo
INFO[0000] Hallo World!! stream=stdout
Hallo World!!
Other
$ docker run -v ${PWD}:/variant variant echo
time="2018-09-28T02:24:42Z" level=info msg="Hallo World!!" stream=stdout
Hallo World!!
Hellow World👏👏👏
vatiantではパラメータとしてparameters/optionsの3種類があります
- parameters:
variant echo "Hi"
のようにコマンドにパラメータを渡せます - options:
variant --parametername "Hi"
)のようにパラメータ名を指定してパラメータを渡せます
parameters/optionsは一つのタスクにそれぞれ定義できますので、このパラメータはparametersで、このパラメータはoptionsでというような指定もできます。 好きなやり方で定義してみましょう。
script
内でGolang templateを書くことができます。
指定したパラメータをvariantで提供している{{ get "parametername" }}
もしくはGolang templateの変数形式の{{ .parametername }}
で呼び出します。
var.definition.yaml
tasks:
echo:
description: echo test.
options:
- name: text
description: Echoes specified text.
script: |
echo "{{ get "text" }}"
optionsの場合
$ variant echo --text Hi
INFO[0000] Hi stream=stdout
Hi
parametersの場合
$ variant echo Hi
INFO[0000] Hi stream=stdout
Hi
また、ここで指定したパラメータをyamlで定義することもできます。
config/environments/dev.yaml
text: Hi
$ variant echo
INFO[0000] Hi caller=echo task=text
Hi
INFO[0000] Hi stream=stdout
Hi
variant env switch [環境名]
でconfig/environments/[環境名].yaml
を初期値として読み込むことができます。
デフォルトの環境名はdev
になります。
これまでのvariantの実行は全てローカルでの実行でした。 しかし、それではインストールが必要なコマンドをセットアップする必要があるので、ポータビリティを上げるためにタスクをdockerで実行するようにしましょう。
tasks:
environment:
description: show environment.
runner:
image: alpine:3.8
command: /bin/sh
args: [-c]
script: |
env
Mac/Linux
$ variant environment
INFO[0000] HOSTNAME=db79f9d96857 stream=stdout
INFO[0000] SHLVL=1 stream=stdout
INFO[0000] HOME=/root stream=stdout
INFO[0000] PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin stream=stdout
INFO[0000] PWD=/ stream=stdout
HOSTNAME=db79f9d96857
SHLVL=1
HOME=/root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/
Other
$ docker run --privileged -v /var/run/docker.sock:/var/run/docker.sock -v ${PWD}:/variant variant environment
time="2018-09-28T03:51:34Z" level=info msg="HOSTNAME=6f20a95f6019" stream=stdout
time="2018-09-28T03:51:34Z" level=info msg="SHLVL=1" stream=stdout
time="2018-09-28T03:51:34Z" level=info msg="HOME=/root" stream=stdout
time="2018-09-28T03:51:34Z" level=info msg="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" stream=stdout
time="2018-09-28T03:51:34Z" level=info msg="PWD=/" stream=stdout
HOSTNAME=6f20a95f6019
SHLVL=1
HOME=/root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/
※ 実際に検証した訳ではないのでWindowsでDocker in Dockerで動作するかはわかりません
※ Windowsのdocker.sockの場所は知らないので-v
は適時書き換えてください
ここまでで良くわからなかったり、variantについて気になることがあれば質問をどうぞ。
e.g. variantでこういうことはできますか?