LoginSignup
3
3

More than 5 years have passed since last update.

【簡単?】CircleCI 1.0から2.0への移行

Posted at

結構前ですが、当社のサイトVegewelをElasticBeanstalkで自動デプロイするためにCIを導入したという話を書きました。CircleCIです。
https://qiita.com/hardreggaecafe/items/995ad9a278e80c903e42

このCircleCIですが、CircleCIの方に簡単に設定をした後にリポジトリのルートディレクトリにcircle.ymlを置くというものです。個人的にはJenkinsよりもユーザフレンドリーに感じています。

で、使っている人は既にご存知だと思いますが、2017年あたりからCircleCIの2.0が出てきて、こちらの方を推してくるようになり、ついには2018年8月31日までに移行せよという強制命令が出されるまでになりました。
1.0時代に悩みながら以下のようなyamlファイルを作った経験とDocker知識が必須となる2.0への抵抗感から避け続けてきたのですがそうも行かなくなったのでなんとか対応しました。

circle.yml
machine:
  python:
    version: 2.7.6

dependencies: # EB CLIをCircleCIサーバ上にインストール
  pre:
    - pip install awsebcli

database: # 勝手にCircleCIのデータベースへの操作が行われるような記載がされるのでなにもしないように以下を記入
  override:
    - exit 0

test: # 勝手にCircleCIのテストの操作が行われるような記載がされるのでなにもしないように以下を記入(テスト必要ならここに記載)
  override:
    - exit 0

deployment:
  staging:
    branch: staging # BitBucketブランチ名
    commands:
      - eb deploy vegewel-staging
  production:
    branch: master # BitBucketブランチ名
    commands:
      - eb deploy vegewel

CircleCIでは移行ツールというものを用意しています。ドキュメントはこちら。

基本的にcircle.ymlを.circleciというディレクトリを作成してその下にconfig.ymlを作った上で2.0に対応した設定を記述します。
この2.0に対応したconfig書くのが大変なのでツールがあるのですが、複雑な設定が書いてあったりするとあまり役には立たないようです。当方のcircle.ymlに関しては一見それらしいconfigが書かれて、これをリポジトリにあげてもエラーにならなかったけど、期待したデプロイ作業は行われず残念な結果となりました。

ちなみにツールの使い方としてはこちらです。
https://circleci.com/api/v1.1/project/github/bar/foo/config-translation
bar にはユーザー名、foo にはプロジェクト名を入れます。 vegewel の場合はbitbucket使ったので以下のようになります。
https://circleci.com/api/v1.1/project/bitbucket/frembassy/vegewel/config-translation

これで作成したconfigをガッツリ手直しして上記と同等の内容にしたのがこちらです。

.circleci/config.yml
version: 2
jobs:
  build:
    working_directory: ~/frembassy/vegewel
    parallelism: 1
    shell: /bin/bash --login
    environment:
      CIRCLE_ARTIFACTS: /tmp/circleci-artifacts
      CIRCLE_TEST_REPORTS: /tmp/circleci-test-results
    docker: # ここにDockerで作成するサーバ環境を記載(自動生成されるはず)
    - image: circleci/build-image:ubuntu-14.04-XXL-upstart-1189-5614f37
      command: /sbin/init
    steps:
      - run: mkdir -p $CIRCLE_ARTIFACTS $CIRCLE_TEST_REPORTS
      - run:
          working_directory: ~/frembassy/vegewel
          command: pip install awsebcli
      - run:
          working_directory: ~/frembassy/vegewel
          command: rm -f frembassy/vegewel/.rvmrc; echo 2.5.0 > frembassy/vegewel/.ruby-version; rvm use 2.5.0 --default
      - checkout # ソースのチェックアウトは必須(用意されているコマンドらしい)
      - run: # 以下デプロイ実行シェルでブランチ識別して動かしている
          name: Deploy
          command: |
            if [ "${CIRCLE_BRANCH}" == "master" ]; then
              echo "Deploy production"
              eb deploy vegewel
            else
              echo "Deploy staging"
              eb deploy vegewel-staging
            fi


workflows: # 実際のデプロイはこのセクションで行われる
  version: 2
  build-n-deploy:
    jobs:
      - build:
          filters: # ブランチ単位で実行可能にできる
            branches:
              only:
                - staging
                - master

大きく違うのはDockerでLinuxの仮想環境(テストなどを書くのであればDBの内容なども記載すべし)を記載するあたりかなと思います。自分のPCにDocker入って無くても問題ありません。
CircleCIにデプロイ準備のための仮想環境を作るという体裁にすることが大事なので、ローカル環境も合わせないといけないわけではないです。

以上、お役に立てば幸いです。

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