LoginSignup
21
10

More than 5 years have passed since last update.

CircleCI2.0を使ってGoで開発したツールをLint,UT,ビルドしてGithubにリリースする

Last updated at Posted at 2017-12-10

この記事は LIFULL Advent Calendar 2017の10日目の記事です。
株式会社 LIFULL 技術開発部の冨田です。

はじめに

社内でも自分自身の開発しているツールでもCircleCI2.0を利用し始めるようになりました。

今回は下記のように動作するように設定しました

  • リモートにブランチをpushした時にLint,UT,カバレッジ計測する
  • リモートに「v[0-9]+(.[0-9]+)*」タグをpushした時にBuildしてGitHubにバイナリをアップロードする

環境

  • Go 1.9
  • CircleCI 2.0 CIサービス
  • codecov.io コードカバレッジ可視化できるサービス
  • golint Linter
  • goverage 複数パッケージを1発でカバレッジ計測できるツール
  • gox 複数OS、アーキテクチャをビルドできるツール
  • ghr GitHub Release pageにビルドしたバイナリをアップロードするツール

CircleCIの環境変数

CircleCIのコンソールからSettingsでリポジトリごとのEnvironment VariablesでTOKENを登録しておきます

CircleCIの設定ファイル

プロジェクト直下に.circleci/config.ymlを作成します
working_directoryは適宜変更してください

.circleci/config.yml
version: 2
jobs:
  build:
    environment:
      - GOPATH: /home/circleci/go
    docker:
      - image: circleci/golang:1.9
    working_directory: /home/circleci/go/src/github.com/tomiyan/pmd2cs
    steps:
      - run: echo 'export PATH=${GOPATH}/bin/:${PATH}' >> $BASH_ENV
      - checkout
      - run: go get -v -t -d ./...
      - run: go get github.com/golang/lint/golint
      - run: go get github.com/haya14busa/goverage
      - run: golint ./...
      - run: go vet ./...
      - run: go test -v -race ./...
      - run: goverage -coverprofile=./coverage.text ./...
      - run: bash <(curl -s https://codecov.io/bash)
  deploy:
    environment:
      - GOPATH: /home/circleci/go
    docker:
     - image: circleci/golang:1.9
    steps:
      - run: echo 'export PATH=${GOPATH}/bin/:${PATH}' >> $BASH_ENV
      - checkout
      - run: go get -v -t -d ./...
      - run: go get github.com/mitchellh/gox
      - run: go get github.com/tcnksm/ghr
      - run: gox -output "${GOPATH}/pkg/{{.Dir}}_{{.OS}}_{{.Arch}}"  ./ ./...
      - run: ghr -u $CIRCLE_PROJECT_USERNAME $CIRCLE_TAG $GOPATH/pkg/

workflows:
  version: 2
  build:
    jobs:
      - build:
          filters:
            branches:
              only: /.*/
  deploy:
    jobs:
      - deploy:
          filters:
            branches:
              ignore: /.*/
            tags:
              only: /v[0-9]+(\.[0-9]+)*/

これで完了です
CircleCI2.0で開発が自動化できますね🍻

ハマりどころ

私はPATHとgit tagのフックでハマりました

PATHの通し方

environmentにPATHを設定しても反映されません

run: echo 'export PATH=${GOPATH}/bin/:${PATH}' >> $BASH_ENV

のような形でstepのrunで指定する必要があります

git tagのフック

jobsのdeployに直接filtersを記述しても作用しません
workflowsでfiltersを記述する必要があります
また、branches ignoreをしていしないと、branch push時にもフックしてしまいます

参考文献

21
10
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
21
10