Skip to content
This repository was archived by the owner on Mar 13, 2025. It is now read-only.

Commit 0824a3d

Browse files
committed
Updates to match ragnar environment
1 parent d4518a0 commit 0824a3d

File tree

7 files changed

+256
-9
lines changed

7 files changed

+256
-9
lines changed

.circleci/circle.yml

Lines changed: 43 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,52 @@
11
version: 2
2+
23
jobs:
3-
build:
4+
"build-prod":
45
docker:
5-
- image: circleci/node:8.11-browsers
6-
working_directory: ~/repo
6+
- image: docker:17.06.1-ce-git
77
steps:
8+
# Initialization.
9+
- run:
10+
name: checking out build repo
11+
command: git clone --branch master https://github.com/topcoder-platform/tc-deploy-scripts ../buildscript
812
- checkout
13+
- setup_remote_docker
14+
- run:
15+
name: Installation of build dependencies.
16+
command: apk add --no-cache bash openssl
17+
18+
# Restoration of node_modules from cache.
919
- restore_cache:
10-
keys:
11-
- v1-dependencies-{{ checksum "package.json" }}
12-
- v1-dependencies-
13-
- run: npm install
20+
key: docker-tc-x-receiver-{{ checksum "package-lock.json" }}
21+
22+
# Build of Docker image.
23+
- run:
24+
name: Build of Docker image
25+
command: ./build.sh PROD
26+
27+
# Caching node modules.
1428
- save_cache:
29+
key: docker-tc-x-receiver-{{ checksum "package-lock.json" }}
1530
paths:
1631
- node_modules
17-
key: v1-dependencies-{{ checksum "package.json" }}
18-
- run: npm run lint
32+
33+
# Deployment.
34+
- run:
35+
name: Installing AWS client
36+
command: |
37+
apk add --no-cache jq py-pip sudo
38+
sudo pip install awscli --upgrade
39+
- deploy:
40+
command: |
41+
echo "ntegration testing"
42+
cp ./../buildscript/master_deploy.sh .
43+
./master_deploy.sh -d ECS -e PROD -t $CIRCLE_SHA1 -s GIT -p TDJSON
44+
workflows:
45+
version: 2
46+
build:
47+
jobs:
48+
# Production builds are executed on "master" branch only.
49+
- "build-prod":
50+
filters:
51+
branches:
52+
only: "circleCi"

.dockerignore

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
node_modules
2+
npm-debug.log
3+
Dockerfile*
4+
docker-compose*
5+
.dockerignore
6+
.git
7+
.gitignore
8+
README.md
9+
LICENSE
10+
.vscode

Dockerfile

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
FROM node:8.9-alpine
2+
WORKDIR /usr/src/app
3+
COPY ["package.json", "package-lock.json*", "npm-shrinkwrap.json*", "./"]
4+
RUN echo "installing packages"
5+
RUN npm install --silent
6+
COPY . .
7+
EXPOSE 80
8+
CMD npm start

build.sh

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
#!/bin/bash
2+
set -eo pipefail
3+
4+
# Builds Docker image of Topcoder-X Receiver application.
5+
# This script expects a single argument: NODE_ENV, which must be either
6+
# "development" or "production".
7+
8+
NODE_ENV=$1
9+
10+
ENV=$1
11+
12+
source buildvar.conf
13+
SECRET_FILE_NAME="${APPNAME}-buildsecvar.conf"
14+
cp ./../buildscript/$APPNAME/$SECRET_FILE_NAME.enc .
15+
#ccdecrypt -f $SECRET_FILE_NAME.cpt -K $SECPASSWD
16+
openssl enc -aes-256-cbc -d -in $SECRET_FILE_NAME.enc -out $SECRET_FILE_NAME -k $SECPASSWD
17+
source $SECRET_FILE_NAME
18+
19+
AWS_REGION=$(eval "echo \$${ENV}_AWS_REGION")
20+
AWS_ACCESS_KEY_ID=$(eval "echo \$${ENV}_AWS_ACCESS_KEY_ID")
21+
AWS_SECRET_ACCESS_KEY=$(eval "echo \$${ENV}_AWS_SECRET_ACCESS_KEY")
22+
AWS_ACCOUNT_ID=$(eval "echo \$${ENV}_AWS_ACCOUNT_ID")
23+
AWS_REPOSITORY=$(eval "echo \$${ENV}_AWS_REPOSITORY")
24+
25+
#App variables
26+
KAFKA_CLIENT_CERT=$(eval "echo \$${ENV}_KAFKA_CLIENT_CERT")
27+
KAFKA_CLIENT_CERT_KEY=$(eval "echo \$${ENV}_KAFKA_CLIENT_CERT_KEY")
28+
KAFKA_HOST=$(eval "echo \$${ENV}_KAFKA_URL")
29+
ZOO_KEEPER=$(eval "echo \$${ENV}_ZOO_KEEPER")
30+
TOPIC=$(eval "echo \$${ENV}_TOPIC")
31+
MONGODB_URI=$(eval "echo \$${ENV}_MONGODB_URI")
32+
33+
LOG_LEVEL=$(eval "echo \$${ENV}_LOG_LEVEL")
34+
NODE_ENV=$(eval "echo \$${ENV}_NODE_ENV")
35+
NODE_PORT=$(eval "echo \$${ENV}_NODE_PORT")
36+
JWKSURI=$(eval "echo \$${ENV}_JWKSURI")
37+
TEMPLATE_MAP=$(eval "echo \$${ENV}_TEMPLATE_MAP")
38+
39+
TAG=$AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/ragnar:$CIRCLE_SHA1
40+
41+
docker build -t $TAG .
42+
43+
# Copies "node_modules" from the created image, if necessary for caching.
44+
docker create --name app $TAG
45+
46+
if [ -d node_modules ]
47+
then
48+
# If "node_modules" directory already exists, we should compare
49+
# "package-lock.json" from the code and from the container to decide,
50+
# whether we need to re-cache, and thus to copy "node_modules" from
51+
# the Docker container.
52+
mv package-lock.json old-package-lock.json
53+
docker cp app:/usr/src/app/package-lock.json package-lock.json
54+
# docker cp .env app:/usr/src/app/
55+
set +eo pipefail
56+
UPDATE_CACHE=$(cmp package-lock.json old-package-lock.json)
57+
set -eo pipefail
58+
else
59+
# If "node_modules" does not exist, then cache must be created.
60+
UPDATE_CACHE=1
61+
fi
62+
63+
if [ "$UPDATE_CACHE" == 1 ]
64+
then
65+
docker cp app:/usr/src/app/node_modules .
66+
fi

buildvar.conf

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
APPNAME="topcoder-x-receiver"
2+
PROD_AWS_REGION="us-east-1"
3+
PROD_AWS_REPOSITORY="topcoder-x-receiver"
4+
PROD_AWS_ECS_CLUSTER="topcoder-x-receiver"
5+
PROD_AWS_ECS_SERVICE="topcoder-x-receiver-service"
6+
PROD_AWS_ECS_TASK_FAMILY="topcoder-x-receiver-task"
7+
PROD_AWS_ECS_CONTAINER_NAME="topcoder-x-receiver-container"
8+
PROD_AWS_ECS_TEMPLATE_UPDATE_SCRIPT="templateupdate.sh"
9+
PROD_AWS_ECS_TASKDEF_FILE="taskdef.json"
10+
PROD_AWS_ECS_VOLUMEDEF_FILE=""

container.template

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
{
2+
"family": "%s",
3+
"requiresCompatibilities": ["EC2", "FARGATE"],
4+
"networkMode": "awsvpc",
5+
"executionRoleArn": "arn:aws:iam::%s:role/ecsTaskExecutionRole",
6+
"cpu": "512",
7+
"memory": "1024",
8+
"containerDefinitions": [{
9+
"name": "%s",
10+
"memory": 1000,
11+
"cpu" : 0,
12+
"image": "%s.dkr.ecr.%s.amazonaws.com/%s:%s",
13+
"environment": [
14+
{
15+
"name" : "DEBUG",
16+
"value" : "%s"
17+
},
18+
{
19+
"name" : "KAFKA_CLIENT_CERT",
20+
"value" : "%s"
21+
},
22+
{
23+
"name" : "KAFKA_CLIENT_CERT_KEY",
24+
"value" : "%s"
25+
},
26+
{
27+
"name" : "KAFKA_HOST",
28+
"value" : "%s"
29+
},
30+
{
31+
"name" : "LOG_LEVEL",
32+
"value" : "%s"
33+
},
34+
{
35+
"name" : "MONGODB_URI",
36+
"value" : "%s"
37+
},
38+
{
39+
"name" : "TOPIC",
40+
"value" : "%s"
41+
},
42+
{
43+
"name" : "ZOO_KEEPER",
44+
"value" : "%s"
45+
},
46+
{
47+
"name" : "NODE_ENV",
48+
"value" : "%s"
49+
},
50+
{
51+
"name" : "NPM_CONFIG_PRODUCTION",
52+
"value" : "%s"
53+
},
54+
{
55+
"name" : "PAPERTRAIL_API_TOKEN",
56+
"value" : "%s"
57+
},
58+
{
59+
"name" : "WEBSITE",
60+
"value" : "%s"
61+
}
62+
],
63+
"portMappings": [
64+
{
65+
"hostPort": %s,
66+
"protocol": "tcp",
67+
"containerPort": %s
68+
}
69+
],
70+
"logConfiguration": {
71+
"logDriver": "awslogs",
72+
"options": {
73+
"awslogs-group": "/aws/ecs/%s",
74+
"awslogs-region": "%s",
75+
"awslogs-stream-prefix": "%s"
76+
}
77+
}
78+
}
79+
]
80+
}

templateupdate.sh

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
#!/bin/bash
2+
set -eo pipefail
3+
4+
# more bash-friendly output for jq
5+
JQ="jq --raw-output --exit-status"
6+
7+
ENV=$1
8+
TAG=$2
9+
PROVIDER=$3
10+
COUNTER_LIMIT=20
11+
# Counter limit will be caluculaed based on sleep seconds
12+
13+
if [[ -z "$ENV" ]] ; then
14+
echo "Environment should be set on startup with one of the below values"
15+
echo "ENV must be one of - DEV, QA, PROD or LOCAL"
16+
exit
17+
fi
18+
19+
AWS_REGION=$(eval "echo \$${ENV}_AWS_REGION")
20+
AWS_ACCESS_KEY_ID=$(eval "echo \$${ENV}_AWS_ACCESS_KEY_ID")
21+
AWS_SECRET_ACCESS_KEY=$(eval "echo \$${ENV}_AWS_SECRET_ACCESS_KEY")
22+
AWS_ACCOUNT_ID=$(eval "echo \$${ENV}_AWS_ACCOUNT_ID")
23+
AWS_REPOSITORY=$(eval "echo \$${ENV}_AWS_REPOSITORY")
24+
AWS_ECS_CLUSTER=$(eval "echo \$${ENV}_AWS_ECS_CLUSTER")
25+
AWS_ECS_SERVICE=$(eval "echo \$${ENV}_AWS_ECS_SERVICE")
26+
family=$(eval "echo \$${ENV}_AWS_ECS_TASK_FAMILY")
27+
AWS_ECS_CONTAINER_NAME=$(eval "echo \$${ENV}_AWS_ECS_CONTAINER_NAME")
28+
AWS_ECS_TASKDEF_FILE=$(eval "echo \$${ENV}_AWS_ECS_TASKDEF_FILE")
29+
30+
KAFKA_CLIENT_CERT=$(eval "echo \$${ENV}_KAFKA_CLIENT_CERT")
31+
KAFKA_CLIENT_CERT_KEY=$(eval "echo \$${ENV}_KAFKA_CLIENT_CERT_KEY")
32+
KAFKA_HOST=$(eval "echo \$${ENV}_KAFKA_HOST")
33+
LOG_LEVEL=$(eval "echo \$${ENV}_LOG_LEVEL")
34+
MONGODB_URI=$(eval "echo \$${ENV}_MONGODB_URI")
35+
TOPIC=$(eval "echo \$${ENV}_TOPIC")
36+
ZOO_KEEPER=$(eval "echo \$${ENV}_ZOO_KEEPER")
37+
38+
task_template=`cat container.template`
39+
task_def=$(printf "$task_template" $family $AWS_ACCOUNT_ID $AWS_ECS_CONTAINER_NAME $AWS_ACCOUNT_ID $AWS_REGION $AWS_REPOSITORY $TAG "$DEBUG" "$KAFKA_CLIENT_CERT" "$KAFKA_CLIENT_CERT_KEY" "$KAFKA_HOST" "$LOG_LEVEL" "$MONGODB_URI" "$TOPIC" "$ZOO_KEEPER" "$NODE_ENV" "$NPM_CONFIG_PRODUCTION" "$PAPERTRAIL_API_TOKEN" ""$WEBSITE" 8000 8000 $AWS_ECS_CLUSTER $AWS_REGION $ENV)

0 commit comments

Comments
 (0)