首页 > 解决方案 > CircleCI 部署到 AWS EC2

问题描述

我找不到任何好的且易于理解的 CircleCI 配置示例来构建和部署到 AWS EC2 实例。这是我到目前为止所拥有的:

.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

到目前为止,整个构建步骤运行良好,成功进入部署步骤。但是,当正在构建的分支是时,如何将构建部署到我的 EC2 服务器上的文件夹master

标签: amazon-web-servicesamazon-ec2continuous-integrationyamlcircleci

解决方案


这篇文章中,你可以使用这个 config.yml 设置:

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

推荐阅读