はじめに
仕事でcircleciをなんとなーく使っていますが
使いこなしたくなったので改めて個人でもいろいろ試してみるメモです。

アジェンダ
- CircleCIとは
- CIってなんぞや
- CircleCIってなんぞや
- CircleCIの特徴
- CircleCIの料金
- CircleCIに必要なもの
- CircleCIを使ってみる
- CircleCI/githubの連携を確認する
1. CircleCIとは
ここではCircleCIってこんなもの!とわかるような内容を簡単にまとめておきます。
CIってなんぞや
CI(continuous integration: 継続的インテグレーション)とはなんぞやというのは知ってる前提ですが一応載せておきます。
安定のwikipediaから引用..
CI(英: continuous integration)とは、主にプログラマーのアプリケーション作成時の品質改善や納期の短縮のための習慣のことである。
エクストリーム・プログラミング (XP) のプラクティスの一つで、狭義にはビルドやテスト、
インスペクションなどを継続的に実行していくことを意味する[1]。
特に、1990年代後半以降の開発においては、継続的インテグレーションをサポートするソフトウェアを使用する傾向が強まってきた。引用: wikipedia
もうちょっとわかりやすい説明は以下のスライドのP6がわかりやすかったです。
こちらも引用させて頂きますが
- CI(継続的インテグレーション)
- コンパイル/テストといったビルド処理を頻繁に繰り返すこと で問題の早期発見や品質改善を目指す手法
- CIすると嬉しいこと
- バグの早期発見
- ローカルでテストをするのをうっかり忘れてもCIでテストが落ちたことを検知できる
- 仮想環境(CirlceCIのVM)という共通の環境でテストができる -「自分のローカル環境ではテストが通ったけど、何故か他の人の環境ではテストが落ちる」という問題を防げる、原因の追求がしやすい
CircleCIってなんぞや
とうぜんといえばとうぜんですが、CIサービスです。
URLはこちら
https://circleci.com/
Jenkinsとの比較
他CIサービスのjenkinsと比較して一番にあがるのは、
Jenkinsは自前でJenkinsサーバを立てる必要があるのに対して
クラウドのwebサービスというところでしょうか。
CircleCIはwebサービスなので、
アカウント登録してクラウド上でCIを実行する形を取ります。
CircleCIアカウント
アカウント登録はgithubアカウントとの連携(登録)が必須になります。
CircleCIの特徴
特徴を列挙します
CircleCIの料金
料金は公式サイトの以下のページで確認できます。
https://circleci.com/pricing/
コンテナが1つ、ビルド時間が1,500分(25時間)なら無料です。
コンテナを1つ増やすたびに$50ほどかかります。個人だと$50もまぁまぁしますね...
2018/01現在の料金体系について、無料版と最低価格の比較だけ載せておきます
| - | free(1 Container) | 2 Container |
|---|---|---|
| repos | 無限 | 無限 |
| users | 無限 | 無限 |
| build | 1 monthに1500分のビルド時間 | 無限 |
| container | 1 | 2 |
| concurrent build | 1 | 2 |
CircleCIに必要なもの
すでに特徴でも書いていますがgithubアカウントが必要です。
でもそれだけ!!
2. CircleCIを使ってみる
使ってみる際のながれです。
ということで、この流れで使ってみます。
① github上でアカウントを作る
省略します。
さすがにciしようというくらいならありますよね!
② github上でciするrepository(circleciでいうプロジェクト)を作成する
今回はこの記事用に作ったリポジトリを例に使います。
https://github.com/tweeeety/go-test-circleci-sample
中身はgoで書いたソースとtestです。
構成
$ tree . . ├── README.md ├── sample01.go └── sample01_test.go
sample01.go
package sample01 func HelloWorld(s string) string { return "hello world, " + s }
sample01_test.go
package sample01 import ( "testing" ) func TestHelloWorld(t *testing.T) { actual := HelloWorld("hoge") expected := "hello world, hoge" if actual != expected { t.Errorf("actual %v\nwant %v", actual, expected) } }
③ CircleCI上でgithubアカウントと連携する
ここからCircleCIとgithubの連携です。
公式ページも再掲します。
https://circleci.com/
Sign Up
まずはgihubアカウントを利用してSign Upします
メニュー
Pricingから行ってみます

freeで始めてみるのでそのまま
Sign upします

Sign Up with GitHubからGithubアカウントにてAuthorizeします

Authorizeを求められるので
Authorize circleciをクリックします
githubのパスワードを入力すれば登録完了です。簡単ですね!!

登録できればCircleCIのDashboard画面が開きます

ciするプロジェクトを選択
利用できる準備は整ったので、CircleCI上でプロジェクトを選択します。
CircleCI上ではPROJECTSといいますが、
githubのrepositoryのことです。
Add projectsからci対象とするprojectsを登録します
ciするプロジェクトの
Setup projectを選択します
これでciの準備が整いました。今回は設定はこのまま進みます

④ ローカルでリポジトリに設定ファイル(.circleci/config.yml)を作る
最後に開いた画面の説明の通り、
リポジトリ直下に.circleci/config.ymlを追加します。
Sample .yml Fileには以下のように表示してくれているのでこれをコピって作ります。
# Golang CircleCI 2.0 configuration file # # Check https://circleci.com/docs/2.0/language-go/ for more details version: 2 jobs: build: docker: # specify the version - image: circleci/golang:1.8 # Specify service dependencies here if necessary # CircleCI maintains a library of pre-built images # documented at https://circleci.com/docs/2.0/circleci-images/ # - image: circleci/postgres:9.4 #### TEMPLATE_NOTE: go expects specific checkout path representing url #### expecting it in the form of #### /go/src/github.com/circleci/go-tool #### /go/src/bitbucket.org/circleci/go-tool working_directory: /go/src/github.com/{{ORG_NAME}}/{{REPO_NAME}} steps: - checkout # specify any bash command here prefixed with `run: ` - run: go get -v -t -d ./... - run: go test -v ./...
.circleci/config.ymlの作成
yamlはコピーしますが、working_directoryの今回用に作ったリポジトリに変えておきます。
working_directory: /go/src/github.com/{{ORG_NAME}}/{{REPO_NAME}} ↓ working_directory: /go/src/github.com/tweeeety/go-test-by-circleci-sample
# リポジトリに移動してファイル作成 $ cd [path to repo] $ mkdir .circleci # 内容はそのまんまコピー # working_directoryだけ自分のリポジトリに $ vim .circleci/config.yml # 普通にpush $ git add . $ git commit -m 'add .circleci/config.yml' $ git push origin master
⑤ CircleCI上でbuild開始してみる
Start buildingを押すと、追加した設定を元にciのbuildを実行してくれます。

CIが回ってtestが成功すればSUCCESSと表示されるのが確認できると思います。

3. CircleCI / githubの連携を確認する
githubとの連携も確認してみます。
github上からpull requestを送ったらciが回る、みたいなやつですね。
特別な設定はいらず、ここまでの設定にてすでにそうなっています。
pullreq作る
用意したリポジトリにためしにpull requestを送ってみます。
$ git checkout -b sample-branch # 適当に編集 $ vim README.md # pull request送る $ git add . $ git commit -m 'modify readme' $ git push origin sample-branch
このあとはgithub上でpull requestを作成します。
CircleCI上でbuildがまわる
pull requestの作成をトリガーに、CircleCI上でbuildが回ります

github上に結果が表示される
また、CircleCIでbuildがまわったと同時に
pull request上には結果が表示されます。

補足 - build結果のslack通知
この記事では基本的なciの連携までを書きました。
このあとはbuild結果をslackに通知したりしたいですよね。
その辺は別記事で書いてみました。
【CircleCI】CircleCI 2.0からはじめる個人での簡単なCI導入方法 - Build結果をSlack通知
おわり
jenkinsと違って自分で立てなくて良いのでサクっとはじめられますね!\(^o^)/