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.