Capistrano 배포를 CircleCI에서 시도했습니다.

마지막 기사



Rails5.1.2 + Webpacker + React를 Capstrano에 배포하는 절차 ①
Rails5.1.2 + Webpacker + React를 Capstrano에 배포하는 절차 ②

사전 쓰기



마지막으로 Rails 앱을 Capistrano에 배포하는 곳까지했습니다.
이번에는 CircleCI를 사용하여 Capistrano 배포를 수행하도록 시도했습니다.

CircleCi 설정



GUI 측 설정



GUI 측에서는 Capistrano가 SSH로 서버에 로그인하기 위해 Key를 설정합니다.

CircleCI 프로젝트 설정에서 SSH Permission 페이지로 이동합니다.
그래서 아래 화면이므로 Add SSH Key에서
연결 대상(도메인 또는 IP)과 SSH Key를 작성하고 저장합니다.



GUI 설정은 이상입니다.
저장이 완료되면 아래의 화면이 되므로, 거기의 fingerprints 항목에 표시되어 있는 문자열은 설정 파일로 이용합니다.



이 설정은 CircleCI Docker에 ~/.ssh/id_rsa로 SSH Key를 저장합니다.

설정 파일



최종적으로 할 수 있었던 설정 파일이 이하와 같습니다, 우선 이것으로 배포는 할 수 있었습니다.

# .circleci/config.yml
version: 2
jobs:
  build:
    docker:
      - image: ruby:2.3.1-alpine
    working_directory: /home/circleci/{{アプリ名}}
    steps:
      - setup_remote_docker:
          reusable: true
      - run:
          name: システム依存関係のインストール
          command: apk add --update --no-cache linux-headers git openssh-client tar gzip build-base tzdata mariadb-dev
      - checkout
      - restore_cache:
          name: Bundleキャッシュの復元
          keys:
            - gems-{{ .Environment.CACHE_KEY }}-{{ checksum "Gemfile.lock" }}
            - gems-{{ .Environment.CACHE_KEY }}-
      - run:
          name: Ruby依存関係のインストール
          command: bundle check || bundle install --jobs=4 --retry=3
      - save_cache:
          name: Bundleキャッシュの保存
          key: gems-{{ .Environment.CACHE_KEY }}-{{ checksum "Gemfile.lock" }}
          paths:
            - /usr/local/bundle
      - add_ssh_keys:
          fingerprints:
            - {{fingerprints}}
      - deploy:
         name: Capistranoデプロイ
         command:
           bundle exec cap production deploy

해설



Environment.CACHE_KEY는 여기가 자체적으로 CircleCI GUI에서 설정하는 환경 변수입니다.
특히, 빠진 포인트는 시스템 종속성 설치입니다.
mariadb-dev(구: mysql-dev)를 시스템 의존으로서 인스톨이 필요한 점이었습니다.

add_ssh_keys에 앞서 finderprints를 지정하면 SSH Key로 사용할 수 있습니다.

그 다음의 해머 포인트로서 Capistrano의 config/deploy/production.rb의 내용입니다.
열쇠의 위치를 ​​지정할 때, ~/.ssh/id_rsa로 갈 수 있다고 생각했습니다만, rsa의 뒤에 fingerprints의: 빼기의 기술이 필요했습니다.

구체적으로는 ~/.ssh/id_rsa_aa11111111111~~ 와 같이 키를 지정하면 Docker상에서 인식되어 Capistrano가 서버에 SSH 로그인 가능하게 됩니다.

이제 master로 푸시하면 CircleCI에서 구성 파일의 작업이 실행되고 궁극적으로 Capistrano 배포가 실행되고 서버에 배포됩니다.

서버의 스펙, 앱의 크기에 좌우될지도 모릅니다만, 대략, 2분 정도로 배포할 수 있었습니다.

후기



Capistrano 배포를 처음 할 때 CircleCI에서 키를 지정하는 방법을 고민했습니다.
CircleCI 설정 화면을 보면 열쇠를 저장할 장소가 있었기 때문에 생각보다 쉽게 ​​할 수있었습니다.
이제 master로 push하면 서버에 배포되고 앱 개발이 끝납니다.

※ 열쇠의 지정의 방법은, 그 밖에 좋은 쓰는 방법이 있을지도 모릅니다. . .

좋은 웹페이지 즐겨찾기