Skip to content

Commit e6db81c

Browse files
committed
Add job image definition
1 parent 90517c0 commit e6db81c

File tree

2 files changed

+100
-0
lines changed

2 files changed

+100
-0
lines changed

ops/job/Dockerfile

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
FROM python:3.6-alpine3.7
2+
# Specify label-schema specific arguments and labels.
3+
ARG BUILD_DATE
4+
ARG VCS_REF
5+
LABEL org.label-schema.build-date=$BUILD_DATE \
6+
org.label-schema.name="Gitcoin Job" \
7+
org.label-schema.description="The job image provides a utility for running administrative tasks in a deployment." \
8+
org.label-schema.url="https://gitcoin.co" \
9+
org.label-schema.vcs-ref=$VCS_REF \
10+
org.label-schema.vcs-url="https://github.com/gitcoinco/web" \
11+
org.label-schema.vendor="Gitcoin" \
12+
org.label-schema.schema-version="1.0"
13+
ENV LANG en_US.utf8
14+
RUN apk add --no-cache --update bash dumb-init postgresql-client py3-magic && \
15+
pip install awscli s3cmd && \
16+
mkdir -p /jobs/backups
17+
WORKDIR "/jobs"
18+
COPY entry.sh /bin/entry.sh
19+
ENTRYPOINT ["/usr/bin/dumb-init", "--"]
20+
CMD ["/bin/entry.sh"]

ops/job/entry.sh

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
#!/usr/bin/dumb-init /bin/bash
2+
export PGPASSWORD=${POSTGRES_PASSWORD}
3+
export PSQL_HOST=${POSTGRES_HOST}
4+
export PSQL_PORT="${POSTGRES_PORT:-5432}"
5+
export PSQL_USER=${POSTGRES_USER}
6+
export PSQL_DB=${POSTGRES_DATABASE}
7+
export ENV="${ENV:-manual}"
8+
export JOB_ID="${JOB_ID:-NA}"
9+
export DB_BACKUPS_BUCKET="${DB_BACKUPS_BUCKET:-gitcoinbackups}"
10+
export AWS_DEFAULT_REGION="${AWS_REGION:-us-west-2}"
11+
export AWS_ACCESS_KEY_ID=$S3_ACCESS_KEY_ID
12+
export AWS_SECRET_ACCESS_KEY=$S3_SECRET_ACCESS_KEY
13+
export GZIP="${GZIP:-on}"
14+
export DB_BACKUP_CLEANSE="${DB_BACKUP_CLEANSE:-off}"
15+
16+
"${JOB_TYPE:?You must set the JOB_TYPE environment variable}"
17+
18+
JOB_DESC="Job: ($JOB_ID) - Type: ($JOB_TYPE) - Environment: ($ENV) -"
19+
20+
echo "$JOB_DESC Started!"
21+
echo "$PSQL_HOST"
22+
date
23+
MONTH=$(date +"%m")
24+
DAY=$(date +"%d")
25+
YEAR=$(date +"%Y")
26+
27+
# PSQL_HOST_OPTS="-h $PSQL_HOST -p $PSQL_PORT -U $PSQL_USER"
28+
S3_DB_BACKUP_PATH="s3://$DB_BACKUPS_BUCKET/$ENV/$YEAR/$MONTH/$DAY"
29+
30+
gunzip_dump () {
31+
# If GZIP is enabled, compress dump.sql file.
32+
if [ "$GZIP" = "on" ]; then
33+
echo "GZip started!"
34+
gzip -f dump.sql > dump.sql.gz
35+
echo "GZip completed!"
36+
fi
37+
}
38+
39+
backup_db () {
40+
echo "Database backup started - Database: ($PSQL_DB)"
41+
# If DB_BACKUP_CLEANSE is enabled,
42+
if [ "$DB_BACKUP_CLEANSE" = "on" ]; then
43+
DUMP_OUT="| sed 's/[\\.a-zA-z0-9]*\\@/xxxxx@/g' | sed 's/\\@[\\.a-zA-z0-9]*/@DOMAIN.TLD/g' | sed 's/key=[\\.a-zA-z0-9]*/key=XXXX/g' > dump.sql"
44+
else
45+
DUMP_OUT="--file=dump.sql"
46+
fi
47+
pg_dump "$PSQL_DB" -h "$PSQL_HOST" -p "$PSQL_PORT" -U "$PSQL_USER" "$DUMP_OUT"
48+
echo "Backup completed! - Database: ($PSQL_DB)"
49+
gunzip_dump
50+
}
51+
52+
if [ "$JOB_TYPE" = "db-backup" ]; then
53+
backup_db
54+
echo "Upload started!"
55+
aws s3 cp dump.sql.gz "$S3_DB_BACKUP_PATH"/"$PSQL_DB".sql.gz
56+
echo "Upload completed!"
57+
elif [ "$JOB_TYPE" = "db-backup-all" ]; then
58+
echo "Dump started - All Databases"
59+
pg_dumpall "$PSQL_DB" -h "$PSQL_HOST" -p "$PSQL_PORT" --file=dump.sql
60+
echo "Dump completed! - All Databases"
61+
gunzip_dump
62+
echo "Upload started!"
63+
aws s3 cp dump.sql.gz s3://"$S3_DB_BACKUP_PATH"/all.sql.gz
64+
echo "Upload completed!"
65+
elif [ "$JOB_TYPE" = "db-restore" ]; then
66+
echo "Database restore started - Database: ($PSQL_DB)"
67+
RESTORATION_KEY=${DB_RESTORATION_KEY:-'stage/latest.sql.gz'}
68+
# Example: RESTORATION_KEY=stage/2018/04/05/gitcoin.sql.gz
69+
aws s3 cp s3://"$DB_BACKUPS_BUCKET"/"$RESTORATION_KEY" dump.sql.gz || exit 2
70+
gunzip -c dump.sql.gz | psql "$POSTGRES_HOST_OPTS" "$POSTGRES_DATABASE"
71+
echo "Restore from S3 completed!"
72+
elif [ "$JOB_TYPE" = "cf-bust" ]; then
73+
"${CF_DISTIBUTION_ID:?You must set the CF_DISTIBUTION_ID environment variable}"
74+
echo "Cloudfront cache busting started - Distribution ID: ($CF_DISTIBUTION_ID)"
75+
aws cloudfront create-invalidation --distribution-id "$CF_DISTIBUTION_ID" --invalidation-batch="Paths={Quantity=1,Items=["/*"]},CallerReference=$(date)"
76+
echo "Cloudfront cache busting completed - Distribution ID: ($CF_DISTIBUTION_ID)"
77+
else
78+
echo "No recognized job type specified!"
79+
fi
80+
echo "$JOB_DESC Completed!"

0 commit comments

Comments
 (0)