本当はシークレットファイルのことを書こうと思ってたんですが
ネタが被ってしまったのでどうしようかと悩んだ結果
CircleCI用にシェルスクリプトに定義した関数を晒そうと思います。
かなり適当に書いたものなので、その筋の人が見たらマサカリ投げられそう((((゜゜))))
環境
OSXのEl Capitanで
zshで動かしてます
jqとpecoを使ってます。
CircleCIのSettingに行きAPI Tokenを作成しておきましょう
project一覧を取得してブラウザで開く
#!/bin/sh
CIRCLE_TOKEN="..."
CIRCLE_HOST="https://circleci.com/api/v1"
_circle_token="&circle-token=$CIRCLE_TOKEN"
open=$(which open)
function circle_projects() {
url="$CIRCLE_HOST/projects?${_circle_token}"
curl -s -H "Accept: application/json" $url | jq '.[] | "\(.username)/\(.reponame)"' | perl -nle '/^"(.+)"$/ and print $1'
}
function circle_open_project() {
path=$(circle_projects | peco | awk '{print $1}')
url="https://circleci.com/gh/$path"
echo "open: $url"
$open $url
}
CIRCLE_TOKENに作成したTokenを入れてください。
circle_open_project
を叩けばプロジェクト一覧が取得されそれをpecoを使って検索できます。
地味に便利で重宝してます。
環境変数の操作
function circle_env() {
project=$1
name=$2
value=$3
if [ ! -n "$project" ]; then
echo "not project" > /dev/stderr
return 1
fi
url="$CIRCLE_HOST/project/$project/envvar?${_circle_token}"
if [ -n "$value" ]; then
body="{\"name\":\"$name\",\"value\":\"$value\"}"
curl -s -H "Accept: application/json" -H "Content-Type: application/json" -d $body $url > /dev/null
echo ok
return 0
fi
if [ -n "$name" ]; then
method="GET"
if [ "${name:0:1}" = ":" ]; then
method="DELETE"
name=${name:1:${#name}}
fi
url="$CIRCLE_HOST/project/$project/envvar/$name?${_circle_token}"
res=$(curl -X $method -s -H "Accept: application/json" $url)
if [ $method = "DELETE" ]; then
echo ok
else
echo $res | jq .value | perl -nle '/^"(.+)"$/ and print $1'
fi
return 0
fi
curl -s -H "Accept: application/json" $url | jq '.[] | "\(.name) \(.value)"' | perl -nle '/^"(.+)"$/ and print $1'
}
使い方は第一引数にuser/repo
の組み合わせを指定し
一覧を見るときは circle_env user/repo
値をセットするときは circle_env user/repo FOO bar
値を削除するときはKeyの先頭にコロンをつけて circle_env user/repo :FOO
という感じです。
隠したいファイルは
circle_env k2wanko/gtoken SECRET_FILE $(base64 ./secret_file)
で値をセットでき
circle.ymlに
echo $SECRET_FILE | base64 -D > ./secret_file
を追加すればデコードできます。
まとめ
ファイル全体はgistに上げました
https://gist.github.com/k2wanko/a4ad5c3b903f68f194b1
まだ無料版しか試せてないのでこんなぐらいですが
CircleCIはプライベートリポジトリとか関係なく利用できるし
ハイスペックなマシンで実行されるしSSHも繋がるのでポートフォワーディングすれば
httpサーバーにもアクセスできるので最高のCIサービスだと思います。