5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Circle CIを使い始めてみた

5
Last updated at Posted at 2019-12-14

Circle CIを使い始めてみました。
運用方法はあんまりよくないと思いますが備忘録がてら。

アカウント作成

GitHubかBitbucketでログインできる。
CIしたいリポジトリをホストしてるアカウントでログインする。

両方使ってる人はひとつのCircle CIアカウントにGitHubもBitbuketも連携できる。
一度Circle CIのアカウントに連携してしまうと自分で解除することができず、お問い合わせ案件になってしまう。

GitHubとBitbucketで別のアカウントにしてしまったぼくはそうなってしまいまして...

使うマシンを選ぶ

dockerイメージを使うか、物理マシンを使うか選べる。
物理マシンにもバージョンが色々ある。

jobs/buildのところに指定する。

Executor タイプの選び方 - CircleCI

.circleci/config.ymlを作る

.circleciディレクトリはその名の通り、Circle CIの設定ファイルとかを置くディレクトリになるっぽい。config.ymlはビルドしたりテストしたりするコンテナの設定をするっぽい。

手持ちのNuxt × Firebaseのプロジェクトで、こんなのを書いてみた。

version: 2.1
jobs:
  build:
    machine: true
    steps:
      - run:
          name: Installing Docker Compose
          command: |
            curl -L https://github.com/docker/compose/releases/download/1.19.0/docker-compose-`uname -s`-`uname -m` > ~/docker-compose
            chmod +x ~/docker-compose
            sudo mv ~/docker-compose /usr/local/bin/docker-compose
      - checkout
      - run:
          name: docker-compose up
          command: |
              set -x
              docker-compose up --build -d
      - run:
          name: docker-compose up
          command: |
              set -x
              docker-compose up --build -d
      - run:
          name: run all tests
          command: docker exec -t nodejs_app_1 npm run ftest
      - run:
          name: docker-compose down
          command: docker-compose down
          

うごくかな。

-checkout

Gitからコードをクローンしてくる決り文句

run

コマンド実行

ローカルにCircle CIをインストール

コピペしてインストールしよう。

curl https://raw.githubusercontent.com/CircleCI-Public/circleci-cli/master/install.sh --fail --show-error |bash

これは全然関係ないお小言なんだけど、Dockerを知ってからマシンに何かをインストールするのをすごくためらわれるようになった。

文法チェックをしてみる

さっきのでcircleciコマンドが使えるようになったんだって。
コマンド使って、.circleci/config.ymlの文法チェックをしてみよう。

circleci config validate

実行してみると、アップデートを確認して少しの間、虚無に待たされる。
...どんな処理をしているんだろう。

いざ、ローカルで実行!

circleciコマンドを使うよ〜

circleci execute local

...できると思うじゃん?
version: 2.1だとローカル実行まだできないんだって...

なので、version: 2形式に変換してもらって、それをローカルで実行してみる。

# 変換
circleci config process .circleci/config.yml > .circleci/process.yml

# ローカル実行
circleci local execute -c .circleci/process.yml

-cで設定ファイルのパスを指定できるっぽいね。

CircleCI 2.1 の job をローカルの CLI で実行する - Qiita

**すいません。なんかローカルで実行やれません。
おそらくmachine executorを指定しているからだと思います。

リモートで試してみよう

  • Circle CIのwebページにログイン
  • プロジェクトを選んで「Start building」を押す
    • 「Is you config.yml added?」って聞かれる。さっき作ったので青いボタンをクリック
  • まず、masterブランチのビルドが始まる
    • masterブランチに`.circleci/config.yml」を作ったならすぐに始まる
    • そうでない場合、エラーが帰る
  • お好みのブランチで.circleci/config.ymlを編集して、pushするとビルドしてくれる!

思ったより簡単。
あと、無料プランの限界ビルド時間は500 min/week1

テスト結果とかを出力

store_test_resultsstore_artifactsステップを設定するとテスト結果をweb上でいい感じに確認できるようになる。

.circleci/config.yml
- run:
    name: run all tests
    command: |
        docker exec -it php_app_1 php /var/www/app/vendor/bin/phpunit --log-junit ~/junit.xml /var/www/app/tests
        mkdir ~/phpunit
        docker exec -it php_app_1 cat ~/junit.xml > ~/phpunit/junit.xml
- store_test_results:
    path: ~/phpunit
- store_artifacts:
    path: ~/phpunit

PHPUnitの--log-junitオプションによって、JUnitの形式でテスト結果ファイルが生成される。
Circle CI上でDockerを動かしていて、コンテナ内に生成されてしまうので、それをリダイレクションでホスト環境へ出している。

store_test_resultsstore_artifactsではテスト結果が配置されているディレクトリを指定してやれば良い。

JUnitの形式で出力できればどんなテストフレームワークでも使えそう。

前のステップが失敗していると、それ以降のステップは実行されなくなる

テストが失敗していようがいまいがテスト結果ファイルはほしい。

そういうときはwhen: alwaysとかを指定する。

.circleci/config.yml
- run:
    name: export test summary file
    when: always
    command: ...

あと、コマンドを複数行指定しているときも、途中で失敗するとそれ以降のコマンドは実行されなくなってしまう。

これを防ぐにはset +eするか、利用するシェルを上書き指定する。
シェルに対してデフォルトでset -eが指定されていて、これにより失敗すると止まってしまうらしい。

.circleci/config.yml
- run:
    shell: /bin/bash
    name: dont exit
    command: |
        echo 'hello world!'
        ...
- run:
    name: dont exit
    command: |
        set +e
        echo 'hello world!'
        ...

参考

いまさらだけどCircleCIに入門したので分かりやすくまとめてみた - Qiita
CircleCIでdocker-composeは最強 - Qiita

Circle CI 2.0でステップが失敗しても次のステップを実行したい
テストメタデータの収集 - CircleCI

わかってないこと

  • set -xって何
  • Dockerイメージをそのまま運用するベストプラクティスがわからない
    • この方法だと後々追加料金がかかるかもしれないらしい
    • node環境が欲しいだけならDockerfileをstepsにすればいい
    • コンテナを2つ動かしたいときとかどうするんだろう?
  1. 週に与えられるクレジットが2,500。マシンがSmallのときは5 credit/min、Mediumだと10 credit/min。料金プラン - CircleCI

5
5
2

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
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?