简体   繁体   中英

CircleCI deploy to AWS EC2

I can't find any good and understandable examples of a CircleCI config to build and deploy to an AWS EC2 instance. Here's what I have so far:

.circleci/config.yml

version: 2
jobs:
    build:
        docker:
            - image: circleci/node:10.7
        steps:
            - checkout
            - restore_cache:
                keys:
                    - v1-dependencies-{{ checksum "package.json" }}
                    - v1-dependencies-
            - run:
                name: Install dependencies
                command: npm install
            - save_cache:
                key: v1-dependencies-{{ checksum "package.json" }}
                paths:
                    - node_modules
            - run:
                name: Lint code
                command: npm run lint
            - run:
                name: Build app
                command: npm run build
            - save_cache:
                key: v1-build-{{ .Environment.CIRCLE_BRANCH }}-{{ .Environment.CIRCLE_SHA1 }}
                paths:
                    - .next
    deploy:
        docker:
            - image: circleci/node:10.7
        steps:
            - run:
                name: Deploy production
                command: ?
workflows:
    version: 2
    build_and_deploy:
        jobs:
            - build
            - deploy:
                requires:
                    - build

So far, the entire build step works perfectly, which moves onto the deployment step successfully. But how do I deploy the the build to a folder on my EC2 server when the branch being built is master ?

From this article , you can use this config.yml setup:

version: 2
general:
  branches:
    only:
      - dev
      - staging
      - prod
jobs:
  build:
    docker:
      - image: circleci/openjdk:8-jdk
    steps:
      - checkout
      - run:
          name: Deploy
          command: |
            # 1- Install AWS CLI
            curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip"
            unzip awscli-bundle.zip
            ./awscli-bundle/install -b ~/bin/aws
            # 2- Get the public IP of the current CircleCI runner
            PUBLIC_IP=$(curl ipinfo.io/ip)
            # 3- Get AWS Region# TODO Don't forget to replcae by your own Region
            AWS_REGION=us-east-2
            # 4- Get SG ID# TODO Don't forget to replace by your own SG ID
            SG_ID=sg-XXXXXXXX
            # 5- Add an ingress rule to the security group
            ~/bin/aws ec2 authorize-security-group-ingress --region $AWS_REGION --group-id $SG_ID \
              --protocol tcp --port 22 --cidr $PUBLIC_IP/24
            # 6- Give the ingress rule some time to propogate
            sleep 5
            # 7- SSH to the server to deploy
            # TODO Change to your username
            EC2_USERNAME=ubuntu
            # TODO Change to your server's URL or public IP
            EC2_PUBLIC_DNS=application-server.example.com
            ssh -o StrictHostKeyChecking=no $EC2_USERNAME@$EC2_PUBLIC_DNS \
            # other commands
            # TODO Perform steps to deploy
            # .
            # .
            # .
            # 8- Remove the ingress rule
            ~/bin/aws ec2 revoke-security-group-ingress --region $AWS_REGION --group-id $SG_ID \
              --protocol tcp --port 22 --cidr $PUBLIC_IP/24

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM