[RUBY] Incorporer circleCI dans l'application CircleCI Rails

Chose que tu veux faire

  1. Lorsqu'il est poussé, exécutez le test et notifiez Slack de la réussite ou de l'échec.
  2. Dans master, après avoir fait 1 lors de la fusion, exécutez le travail de déploiement et notifiez le succès ou l'échec de Slack

De quoi as-tu besoin

  1. Inscrivez-vous sur circleCI
  2. Définissez le référentiel que vous souhaitez placer sous la surveillance de circleCI
  3. Lors de la gestion des variables d'environnement à l'aide de credentials.yml Créez des variables d'environnement pour master.key dans circleCI
  4. Enregistrez la clé privée dans circleCI pour réaliser un flux de déploiement automatique par capistrano

Enregistrement de master.key see -> https://qiita.com/murata0705/items/9c99fc715d8b987a5b6e Enregistrement de la clé SSH see -> https://circleci.com/docs/ja/2.0/add-ssh-key/#%E6%89%8B%E9%A0%86

référence

yaml:.circleci/config.yml


version: 2.1
orbs:
  ruby: circleci/[email protected] 
  slack: circleci/[email protected]
jobs:
  build:
    docker:
      - image: circleci/ruby:2.5.1-node-browsers
        environment:
          RAILS_ENV: test
          BUNDLER_VERSION: 2.1.4
      - image: circleci/mysql:5.6.47-ram
    working_directory: ~/app
    steps:
      - checkout
      - run:  
          name: Install bundler 
          command: gem install bundler -v 2.1.4 
      - run:
          name: Which bundler?
          command: bundle -v
      - restore_cache:
          keys:
            - v1-dependencies-{{ checksum "Gemfile.lock" }}
            # fallback to using the latest cache if no exact match is found
            - v1-dependencies-
      - run:  
          name: Bundle Install  
          command: bundle install --jobs=4 --retry=3 --path vendor/bundle
      - save_cache:
          paths:
            - ./vendor/bundle
          key: v1-dependencies-{{ checksum "Gemfile.lock" }}
      - run:
          name: Wait for DB
          command: dockerize -wait tcp://127.0.0.1:3306 -timeout 120s

      # Database setup
      - run: bundle exec rake db:create
      - run: bundle exec rake db:schema:load

      # run tests!
      - run:
          name: run tests
          command: |
            mkdir /tmp/test-results
            TEST_FILES="$(circleci tests glob "spec/**/*_spec.rb" | circleci tests split --split-by=timings)"

            bundle exec rspec --format progress \
                            --format RspecJunitFormatter \
                            --out /tmp/test-results/rspec.xml \
                            --format progress \
                            $TEST_FILES
      # collect reports
      - store_test_results:
          path: /tmp/test-results
      - store_artifacts:
          path: /tmp/test-results
          destination: test-results
      # run rubocop
      - run:
          name: run rubocop
          command: bundle exec rubocop
      - slack/status:
          success_message: ':successcircleci:$CIRCLE_BRANCH Build Success\n:github: User:$CIRCLE_USERNAME'
          failure_message: ':failcircleci2:$CIRCLE_BRANCH Build Fail\n:github: User:$CIRCLE_USERNAME'
          webhook: '${SLACK_WEBHOOK}'
  deploy:
    docker:
      - image: circleci/ruby:2.5.1-node-browsers
        environment:
          BUNDLER_VERSION: 2.1.4
    working_directory: ~/app
    steps:
      - checkout
      - run:  
          name: Install bundler  
          command: gem update bundler 
      - run:
          name: Which bundler?
          command: bundle -v
      - restore_cache:
          keys:
            - v1-dependencies-{{ checksum "Gemfile.lock" }}
            # fallback to using the latest cache if no exact match is found
            - v1-dependencies-
      - run:  
          name: Bundle Install  
          command: bundle install --jobs=4 --retry=3 --path vendor/bundle
      - save_cache:
          paths:
            - ./vendor/bundle
          key: v1-dependencies-{{ checksum "Gemfile.lock" }}
      - add_ssh_keys:
          fingerprints:
            - 0f:2a:6c:6a:85:f7:b4:5a:18:95:9f:71:f3:14:d0:a8
      - run:
          name: caistrano deploy
          command: bundle exec cap production deploy
      - slack/status:
          success_message: ':successcircleci:$CIRCLE_BRANCH Deploy Success\n:github: User:$CIRCLE_USERNAME'
          failure_message: ':failcircleci2:$CIRCLE_BRANCH Deploy Fail\n:github: User:$CIRCLE_USERNAME'
          webhook: '${SLACK_WEBHOOK}'
workflows:
  version: 2.1
  build-deploy:
    jobs:
      - build
      - deploy:
          requires:
            - build
          filters:
            branches:
              only: master

Supplément

C'est étrange parce que je l'ai écrit sur Google sans aucune connaissance de CI / CD. C'était d'une soudaine motivation à essayer, alors ...

Lien de référence

https://qiita.com/AK4747471/items/882b70f663f4a80ae770

Recommended Posts

Incorporer circleCI dans l'application CircleCI Rails
Intégrez Docker à votre portefeuille Ruby on Rails!
[Core ML] Incorporez un modèle ML généré automatiquement dans l'application
Présentation de l'application de révision de livres Rails RSpec
Créer une nouvelle application avec Rails
Suivre les erreurs de l'application Rails avec Sentry