Help us understand the problem. What is going on with this article?

circleciを使って特定のbranchにデプロイ処理をさせる

More than 1 year has passed since last update.

はじめに

この記事はLIFULL Advent Calendar 2018 その3、22日目の記事です。

circleciを触る機会がありまして、
この記事の対象としては、circleciのドキュメント読みつつ、
まさに導入を考えている初学者向けです。

circleciについて

もはや僕から説明する必要がないほど、様々な記事で説明されている内容なので
省略します。
念のため公式サイトを貼ります。
https://circleci.com/

circleciを使ってやりたいこと

今回、ciを導入してやりたかったことは、
「特定のブランチにpushした時にのみデプロイする処理を行う」というシンプルな内容です。

具体的なデプロイ処理は今回省略します。
(後でcache指定の部分は触れます)

やったこと

今回の事例としては、あるbranch(deployブランチと仮に置く)にpushした時のみ、
デプロイする処理が動くという内容を書いてました。
以下が再現したconfig.ymlです。

# .circleci/config.yml
version: 2
jobs:
  deploy_job:
    # デプロイする処理

workflows:
  version: 2
  deploy:
    jobs:
      - deploy_job:
        filters:
          branches:
            only: deploy

このような設定で、deployというbranchにpushされた時のみ、
jobが走るようになります。

他のブランチにも走らせたい場合があると思いますので
branch指定子のリストを渡しておくことももちろんできます。

workflows:
  version: 2
  deploy:
    jobs:
      - deploy_job:
        filters:
          branches:
            only:
              - deploy
              - hoge_branch
              - foo_branch

複数のjobを特定のbranchで動かす前提だったため、
今回はworkflowsを利用しました。
もちろんjobごとに設定することも可能です。
https://circleci.com/docs/ja/2.0/configuration-reference/#branches

キャッシュ指定について

上の内容で特定のbranchに処理をすることはできました。
しかしデプロイ処理をcircleciでやる時、毎回bundleやらyarnやらをインストールすると
時間がかかってしまいます。
なので対策としてcacheを指定して時間を短縮しましょう。

以下はbundle installのサンプルコードです。

    - restore_cache:
        name: Restore bundle cache
        keys:
        - bundle-cache-{{ .Branch }}-{{ checksum "Gemfile.lock" }}
    - run:
        name: Bundle Install
        command: bundle install --path=vendor/bundle
    - save_cache:
        key: bundle-cache-{{ .Branch }}-{{ checksum "Gemfile.lock" }}
        paths:
        - vendor/bundle

まとめ

今回説明したのは

  • 特定のbranchにpushされた際に処理を行う
  • cache指定による時間短縮

です。
circleci2.1やGithub Actionsの件もありますし、
サービスに合った効率化を目指していきたいですね。

tkmoxu
lifull
日本最大級の不動産・住宅情報サイト「LIFULL HOME'S」を始め、人々の生活に寄り添う様々な情報サービス事業を展開しています。
https://lifull.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away