Skip to content
This repository was archived by the owner on Jun 2, 2019. It is now read-only.

Commit eba35e3

Browse files
committedSep 16, 2018
implement CD
1 parent e0e2cef commit eba35e3

File tree

6 files changed

+748
-22
lines changed

6 files changed

+748
-22
lines changed
 

‎.travis.yml

+12-2
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,29 @@ env:
55
- AWS_REGION=us-east-2
66
- REMOTE_IMAGE_URL=633607774026.dkr.ecr.us-east-2.amazonaws.com/pyback
77
- ECS_CLUSTER_MASTER=python-oc-services
8-
- ECS_SERVICE_MASTER=pybot-svc
8+
- ECS_SERVICE_MASTER=pyback-svc
99
- secure: iJv9zwNPA6EeLgTUhiaTq3YnoSPILqz5Oerl1XoAbL6F5kcXrtY1/mw8BnqdgM7QIr7Q6fi75L1Ts2jBsi0IU/4FtlhRKuaMqlmCBd8z52Mb+KEGP3YJhfPceq5raVqIjc5nHikd2CsGdtSr6gFfNaRITvHqwaUs8owF5eMQX6irxnnWVmz47mKwxZ251vGQGyEukAYQRcIwzjr2dnA94E+tj2pTaCXJO4sBc9BqeDO+rYQCWc1yivhHxx0Zr/JuR/jceNjNL2rZa41GmHMlHenFcnseH84OQ/+/c7AmPLHcYmiTJIL1yY+sMS/PRhLOGzQnxIQvaA1LD8gEAY+YLn3Q6AgHveV28udfU7jzKQmgRqS4OeM1OhykknBcAdLo8k2gbVx73pO32Lgse0JL2S2jmr/yWBpYGoXJ/LeB4x+YG5mookGktRbwtb/RyPI/+W4DE8mgD/d5b0u6zXCwIQ1Xe78Lr4k+uo3mWMnjcvix2gLkPDwlW4zZ8UGe7M9XCkKuZnhxGUV3ijBuecIMBfABi1wGstXQzHLNtiul0ZPWUAeQxDoN+lr94aw+R0U9DcTHWtM2QXY77+olV7D9pnbPZKXB2QRfOpvS2jDQo4nXGCVV/UmCrYgC9sDQQD5u8QXqgJRHTb7Rl+9AKwl1C5u60sBRRpaneQlRBLOjWlo=
1010
- secure: MZlr2GanK4Je41ncRFHwJm8SyJ1yjPI3gKFdXb5xoVMdsKBnYbouz+5PG73Ri9oDnOYsY6c9lv6HrSSo6fO0fc/lyhZeKu34F288rAYPGJdg/Qn0c0xYsKug2qPAn+Oyl0BWjnfR5nSP7cdhRVwca84kVVfOWer6DP+bZZ2tJda5xKqyRFgvZRWZnrUegY/ciXtwjLswnwOX9VE9x0un29acsZvWDCRoGFM0P6SeM/aVYp+o5iJyw6mD8wtmLcw4kI6q3r6S2MbGJ+fefiUW70Of3oUD721aW2DYVkMd5pRgW3/VvW5km+UNo8zD9pffZLGev68hdyEA0Rhrw/qX5DinoS46HnSVlyJWdDUselYELumHAKdIjuWYMaW0sboN89mfNX0H1KaXT2Gc1+eO6nlmJLKwK2KQYULgQXkKoOOhCvvvw+uhMaqxjMp+oLcvwHt6s96KjlRGn7dNDnDePpWH7Pht0L1cYg9xnaeTKJfQm2N6cOQtLKHO/rBHYiEItG6O/kaQytokrU1tLo6Y5o3+8dybvulFha3xgq39oI0Mtp5fVbMM3wZOLQ5UqedYATMaoy4LamEiP0cvThlP5X5/TvyFcQxBu39EYWmaBcSPooncQVPoGyLzVAcfBQp3hOe0XbYKoY0VjHVWYbO2ghVXVax8CDJZ2feE5ghsdMQ=
11+
1112
sudo: required
13+
1214
os: linux
15+
1316
language: python
17+
1418
python: 3.6
19+
20+
cache: pip
21+
1522
install:
1623
- pip install pipenv
1724
- pipenv install --system --deploy --dev
25+
1826
script:
1927
- pytest
28+
2029
services:
2130
- docker
31+
2232
after_success:
23-
- bash bin/docker_push.sh
33+
- bash bin/run.sh

‎bin/docker_push.sh

+15-20
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,20 @@
1-
#!/bin/bash
1+
#!/usr/bin/env bash
22

3-
# Push only if it's not a pull request
4-
if [ -z "$TRAVIS_PULL_REQUEST" ] || [ "$TRAVIS_PULL_REQUEST" == "false" ]; then
5-
# Push only if we're testing the master branch
6-
if [ "$TRAVIS_BRANCH" == "master" ]; then
3+
# import util functions
4+
source "${SCRIPTDIR}/../lib/util.sh"
75

8-
# This is needed to login on AWS and push the image on ECR
9-
# Change it accordingly to your docker repo
10-
pip install awscli
11-
export PATH=$PATH:$HOME/.local/bin
12-
eval $(aws ecr get-login --no-include-email --region $AWS_REGION)
6+
echo "Logging into ECR..."
7+
AWS_LOGIN=$(runCommand "aws ecr get-login --region $AWS_REGION --no-include-email")
138

14-
# Build and push
15-
docker build -t $IMAGE_NAME -f docker/Dockerfile .
16-
echo "Pushing $IMAGE_NAME:latest"
17-
docker tag $IMAGE_NAME:latest "$REMOTE_IMAGE_URL:latest"
18-
docker push "$REMOTE_IMAGE_URL:latest"
19-
echo "Pushed $IMAGE_NAME:latest"
9+
if [ "$?" = "0" ]; then
10+
eval $AWS_LOGIN || exit $?
11+
echo "Building Docker image..."
12+
runCommand "docker build -t $IMAGE_NAME -f docker/Dockerfile ." || exit $?
13+
echo "Pushing image $IMAGE_NAME:$TRAVIS_BRANCH"
14+
runCommand "docker tag $IMAGE_NAME:latest $REMOTE_IMAGE_URL:$TRAVIS_BRANCH" || exit $?
15+
runCommand "docker push $REMOTE_IMAGE_URL:$TRAVIS_BRANCH" || exit $?
16+
echo "Successfully built and pushed $REMOTE_IMAGE_URL:$TRAVIS_BRANCH"
2017
else
21-
echo "Skipping deploy because branch is not 'master'"
22-
fi
23-
else
24-
echo "Skipping deploy because it's a pull request"
18+
echo "Failed to log in to AWS, exiting"
19+
exit 1
2520
fi

‎bin/ecs_deploy.sh

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
#!/usr/bin/env bash
2+
3+
TRAVIS_BRANCH_UPPERCASE=$(echo $TRAVIS_BRANCH | awk '{print toupper($0)}')
4+
5+
CLUSTER_NAME=ECS_CLUSTER_${TRAVIS_BRANCH_UPPERCASE}
6+
SERVICE_NAME=ECS_SERVICE_${TRAVIS_BRANCH_UPPERCASE}
7+
8+
echo "Deploying $TRAVIS_BRANCH on service ${!SERVICE_NAME} on cluster ${!CLUSTER_NAME} with image $REMOTE_IMAGE_URL:$TRAVIS_BRANCH"
9+
bash ${SCRIPTDIR}/../lib/ecs-deploy -t 300 -n ${!SERVICE_NAME} -c ${!CLUSTER_NAME} -r $AWS_REGION -i $REMOTE_IMAGE_URL:$TRAVIS_BRANCH

‎bin/run.sh

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
#!/usr/bin/env bash
2+
3+
# Only process first job in matrix (TRAVIS_JOB_NUMBER ends with ".1")
4+
if [[ ! $TRAVIS_JOB_NUMBER =~ \.1$ ]]; then
5+
echo "Skipping deploy since it's not the first job in matrix"
6+
exit 0
7+
fi
8+
9+
# Don't process pull requests
10+
# $TRAVIS_PULL_REQUEST will be the PR number or "false" if not a PR
11+
if [[ -n "$TRAVIS_PULL_REQUEST" ]] && [[ "$TRAVIS_PULL_REQUEST" != "false" ]]; then
12+
echo "Skipping deploy because it's a pull request"
13+
exit 0
14+
fi
15+
16+
# Only process branches listed in DEPLOY_BRANCHES
17+
BRANCHES_TO_DEPLOY=($DEPLOY_BRANCHES)
18+
if [[ ! " ${BRANCHES_TO_DEPLOY[@]} " =~ " ${TRAVIS_BRANCH} " ]]; then
19+
# whatever you want to do when arr contains value
20+
echo "Skipping deploy, not a branch to be deployed"
21+
exit 0
22+
fi
23+
24+
pip install awscli -q
25+
26+
if [ $? = 0 ]; then
27+
AWSBIN=$(which aws)
28+
AWSPATH=$(dirname $AWSBIN)
29+
export PATH=$PATH:$AWSPATH
30+
31+
# Get absolute path of dir where run.sh is located
32+
SOURCE="${BASH_SOURCE[0]}"
33+
while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink
34+
DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
35+
SOURCE="$(readlink "$SOURCE")"
36+
[[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located
37+
done
38+
export SCRIPTDIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
39+
40+
bash ${SCRIPTDIR}/docker_push.sh &&
41+
bash ${SCRIPTDIR}/ecs_deploy.sh
42+
43+
else
44+
echo "Failed to install AWS CLI"
45+
exit 1
46+
fi

‎lib/ecs-deploy

+648
Large diffs are not rendered by default.

‎lib/util.sh

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
#!/usr/bin/env bash
2+
3+
function isDryRun {
4+
if [ "$DRYRUN" = "1" ]; then
5+
return 0
6+
else
7+
return 1
8+
fi
9+
}
10+
11+
function runCommand {
12+
if isDryRun; then
13+
echo $1;
14+
else
15+
eval $1
16+
return $?
17+
fi
18+
}

0 commit comments

Comments
 (0)
This repository has been archived.