LoginSignup
8
8

More than 5 years have passed since last update.

CircleCIのREST APIを使って少し便利にCircleCIライフを送る

Posted at

本当はシークレットファイルのことを書こうと思ってたんですが
ネタが被ってしまったのでどうしようかと悩んだ結果
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サービスだと思います。

8
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8