LoginSignup
7

More than 5 years have passed since last update.

CircleCI 2.0を使い始める前に知っておきたいこと

Last updated at Posted at 2018-02-02

ローカルでCircleCIのデバックを行う

前提: Dockerが入っているローカル環境

circleci-cliのインストール
$ curl -o /usr/local/bin/circleci https://circle-downloads.s3.amazonaws.com/releases/build_agent_wrapper/circleci && chmod +x /usr/local/bin/circleci
yamlのシンタックスチェック
$ circleci config validate -c .circleci/config.yml
CircleCiのビルド
$ circleci build

# エラーはこんな感じで見れる
+ tar -xz -C /tmp -f /tmp/docker-17.03.0-ce.tgz
+ sudo mv /tmp/docker/completion /tmp/docker/docker /tmp/docker/docker-containerd /tmp/docker/docker-containerd-ctr /tmp/docker/docker-containerd-shim /tmp/docker/docker-init /tmp/docker/docker-proxy /tmp/docker/docker-runc /tmp/docker/dockerd /usr/bin
====>> Install Docker Compose
  #!/bin/bash -eo pipefail
set -x
sudo curl -L https://github.com/docker/compose/releases/download/1.11.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

++ uname -s
++ uname -m
+ sudo curl -L https://github.com/docker/compose/releases/download/1.11.2/docker-compose-Linux-x86_64
/bin/bash: line 1: /usr/local/bin/docker-compose: Permission denied
Error: Exited with code 1
Step failed
Task failed

Dockerのキャッシュ

コンテナ起動までの時短

stepにsetup_remote_dockerを追加する際にキャッシュ指定をする
steps:
  - checkout
  - setup_remote_docker:
      docker_layer_caching: true

有料版のみ使える機能なので注意が必要

秘密鍵とHostの設定

ハマったので

秘密鍵

CircleCIのGUI経由で秘密鍵を保存し、finger printをコピーしておく
秘密鍵を使いたいstepの手前で以下のように呼び出せる

- add_ssh_keys:
  fingerprints:
      - "2b:d9:9d:c0:5f:96:3c:5e:de:b9:d3:7b:25:19:ce:12"

Host

調べた感じHostの記載があるconfigファイルをgit管理して追記するくらいしか見つからなかった

- checkout
- run:
  name: Install dependencies
  command: |
    cat ./.circleci/ssh.config >> $HOME/.ssh/config
    git submodule update --init
    composer install

共通部分をまとめる

jobsで定義するのではなくreferencesで定義を行いjobsで呼び出すことで共通するコードをまとめることができて可読性UP

環境の共通化

defaultsで環境の共通化ができる

宣言
references:
  defaults: &test
    docker:
    - image: asia.gcr.io/${GOOGLE_PROJECT_ID}/${IMAGE_NAME}:latest
      auth:
        username: _json_key
        password: $GCLOUD_SERVICE_KEY
    - image: mysql:5.6
      environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=db
呼び出し
jobs:
  test:
    <<: *test
    steps:
      - checkout
      - run: phpunit --no-coverage --testdox
  coverage:
    <<: *test
    steps:
      - checkout
      - run: phpunit --testdox

コマンドの共通化

commandsでsteps内で使用するコマンドの共通化ができる

宣言
references:
  commands:
    setup_test_db: &setup_test_db
      name: Setup test DB
      command: |
        apt-get update && apt-get install -y mysql-server
        mysql -u root -h 0.0.0.0 -proot -e "create database db_test"
呼び出し
jobs:
  test:
    <<: *test
    steps:
      - checkout
      - run: *setup_test_db
      - run: phpunit --no-coverage --testdox

定期的にCI

workflows:
  version: 2
  nightly:
    triggers:
      - schedule:
          cron: "0 0 * * *"
          filters:
            branches:
              only:
              - master
    jobs:
      - coverage

最新版のライブラリで動き続けるかのチェックを行って、失敗した際にslackに通知するとか仕込んでおけば、脆弱性への対策になるかもしれない(まだやっていない...

参考資料

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
7