-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathconfig.yml
61 lines (54 loc) · 2.46 KB
/
config.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
version: 2
jobs:
build:
docker:
- image: circleci/python:3
steps:
- checkout
- setup_remote_docker
- run: |
sudo pip install awscli
sudo apt-get install jq
# build docker image locally and tag it by repo name and commit hash
- run: |
docker build -t $CIRCLE_PROJECT_REPONAME:$CIRCLE_SHA1 .
- deploy:
name: Push and deploy docker application image
command: |
CLUSTER="$CIRCLE_PROJECT_REPONAME"
FAMILY="$CIRCLE_PROJECT_REPONAME"
DOCKER_IMAGE=$CIRCLE_PROJECT_REPONAME
TASK="$CIRCLE_PROJECT_REPONAME"
SERVICE="$CIRCLE_PROJECT_REPONAME-service"
# login to AWS ECR repo, this command is equialent of " docker login -u AWS -p HUGE_PASSWORD AMAZON_ID.dkr.ecr.AWS_REGION.amazonaws.com
eval "$(aws ecr get-login --region $AWS_DEFAULT_REGION | sed -e 's/-e none//g')"
# tag locally built image with repo name and commit hash
docker tag $CIRCLE_PROJECT_REPONAME:$CIRCLE_SHA1 $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CIRCLE_PROJECT_REPONAME:$CIRCLE_SHA1
# push tagged image to the repo
docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CIRCLE_PROJECT_REPONAME:$CIRCLE_SHA1
# create task for docker deploy
# "portMappings": [
# {
# "containerPort": 3000,
# "hostPort": 80
# }
# ],
# Describe task template and fill it
task_template='[
{
"name": "%s",
"image": "%s.dkr.ecr.%s.amazonaws.com/%s:%s",
"essential": true,
"memoryReservation": 10,
"environment" : [
{ "name" : "TOKEN_BOT", "value" : "%s" }
]
}
]'
task_def=$(printf "$task_template" $TASK $AWS_ACCOUNT_ID $AWS_DEFAULT_REGION $DOCKER_IMAGE $CIRCLE_SHA1 $TOKEN_BOT)
# Register task definition
json=$(aws ecs register-task-definition --container-definitions "$task_def" --family "$FAMILY")
# Grab revision # using regular bash and grep
revision=$(echo "$json" | grep -o '"revision": [0-9]*' | grep -Eo '[0-9]+')
# Deploy revision
aws ecs update-service --cluster "$CLUSTER" --service "$SERVICE" --task-definition "$TASK":"$revision"