CircleCIとは
CircleCIは、クラウド型のCIツールです。
求人をみていると、多くの名だたる日本企業がCircleCIを採用していたので、触ってみる事にしました。ちなみに私はJenkinsしか触ったことないCircleCI初心者です。
使ってみた
早速ホームページ見てみます。CircleCI Japanは最近(2018/11)設立されたのですね。
先ほどクラウド型と書いたのですが、オンプレ型も対応しているようです。
ユーザー登録
ホームページ下の方に"CircleCIを使ってみる"ボタンがあるのでポチすると、ユーザー登録画面に遷移します。
GitHubアカウントでログインし、CircleCIと連携させます。
わーい、ユーザー登録してGithub連携できました。
Getting Started
まずCirCleCI上にプロジェクトをつくるために、"Add Project"を選択します。
Githubにプロジェクトを作成して、"Set up Project"を選択します。(コードはこちらを参考にさせていただきました)
$tree
.
└── cmd
├── hello
│ ├── hello.go
│ └── hello_test.go
└── main.go
package hello
func English() string {
return "Hello, world"
}
func Japanese() string {
return "Hello, world" /* <- ここがバグ */
return "こんにちは、世界"
}
func Chinese() string {
return "你好,是世界"
}
package hello
import (
"testing"
)
func TestGreeting(t *testing.T) {
if Japanese() != "こんにちは、世界" {
t.Errorf("Excepted %s, But %s.", "こんにちは、世界", Japanese())
}
if Chinese() != "你好,是世界" {
t.Errorf("Excepted %s, But %s.", "你好,是世界", Chinese())
}
if English() != "Hello, world" {
t.Errorf("Excepted %s, But %s.", "Hello, world", English())
}
}
Set up Project
config.ymlをプロジェクトに配置します。書かれてある通りに、
1. .circleci/config.ymlを作成
2. sample.ymlの値をコピー
3. アップデート
4. GitにPush
5. ビルド!
すればOKです。
config.ymlの設定
config.ymlの設定をします。
ここでは最低限だけ設定しますので、詳細はGOのドキュメントやGoのデモをご参照ください。
##circleciのバージョン
version: 2
##ジョブ定義
jobs:
##自動的に実行されるジョブ。必須。
build:
##dockerがタスクの実行環境
docker:
##dockerイメージ
- image: circleci/golang:1.9
##ステップが実行されるディレクトリ
working_directory: /go/src/github.com/uguisuhohokekyo/helloWorldGOGO
##実行単位ステップを記述していく
steps:
##working_directoryにチェックアウト
- checkout
- run: go test -v ./cmd/hello/
start building
それではリモートレポジトリにconfig.ymlをpushしたのち、"start building"を実行してみます。
Jobが実行され、エラーが表示されました。エラーですよというメールまで飛んできましたね。
エラーの内容を見てみると、"こんにちは、世界"と表示されるべきところが、"Hello, world"となっていますね。
cmd/hello/hello.goを修正して(エラー部分をコメントアウトすればOK)、pushしてみましょう。
Success!!
Git pushをトリガーに自動的にJobが実行されました。
そして結果を見てみると、、、わーい成功しました\(^o^)/
(私は色々試行錯誤して20回目でやっと成功、、、)
まとめ
Github上のソースコード変更から、テストまでを簡単に自動化できました。
UIも綺麗ですし、何より自動化すると気持ちがすっきりして気持ちいいですね。
日本語対応もされると勝手に思っていますので、これからが楽しみです。
再掲ですが、今回使用したコードはGithub上に公開していますので、必要だったら使ってください。