-
Notifications
You must be signed in to change notification settings - Fork 1
/
.travis.yml
111 lines (103 loc) · 4.32 KB
/
.travis.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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
language: python
services:
- docker
addons:
apt:
packages:
- "python3"
- "python3-pip"
env:
global:
- IMAGE_NAME=reminder-service
stages:
- build
- name: push-dev-docker-image
if: branch = development AND type = push AND fork = false
- name: push-prod-docker-image
if: branch = production AND type = push AND fork = false
- name: deploy
if: (branch = development OR branch = production) AND type = push AND fork = false
install:
# Install NodeJS and Yarn
- nvm install 12.17.0
- npm install -g yarn
before_script:
# Move to source directory
- cd src
# Versioning
- VERSION="$(awk '$2 == "REMINDER_SERVICE_VERSION" { print $3; exit }' Dockerfile)"
jobs:
include:
- stage: build
name: "Build and Test"
script:
# Install dependencies
- yarn install
# Build source
- yarn build
# Run tests
- yarn test --passWithNoTests
- stage: push-dev-docker-image
name: "Push development docker image to Docker Hub"
script:
# Install dependencies
- yarn install
# Build source
- yarn build
# Build docker image
- docker build -t $IMAGE_NAME .
# List docker images
- docker images
# Push dev-docker image to dockerhub
- docker login -u "$DOCKER_USER" -p "$DOCKER_PASSWORD"
- docker tag $IMAGE_NAME:latest $DOCKER_USER/$IMAGE_NAME:$VERSION-dev
- docker push $DOCKER_USER/$IMAGE_NAME:$VERSION-dev
- stage: push-prod-docker-image
name: "Push production docker image to Docker Hub"
script:
# Install dependencies
- yarn install
# Build source
- yarn build
# Build docker image
- docker build -t $IMAGE_NAME .
# List docker images
- docker images
# Push prod-docker image to dockerhub
- docker login -u "$DOCKER_USER" -p "$DOCKER_PASSWORD"
- docker tag $IMAGE_NAME:latest $DOCKER_USER/$IMAGE_NAME:$VERSION-prod
- docker tag $IMAGE_NAME:latest $DOCKER_USER/$IMAGE_NAME:latest
- docker push $DOCKER_USER/$IMAGE_NAME:latest
- docker push $DOCKER_USER/$IMAGE_NAME:$VERSION-prod
- stage: deploy
name: "Deploy service to Kubernetes"
script:
# Debug
- which python
# Move to the project root directory
- cd ..
# Initialize Kubeconfig
- sed -i -e 's|K8S_CA_CERT|'"${K8S_CA_CERT}"'|g' .travis/ansible/config/kubeconfig
- sed -i -e 's|K8S_ENDPOINT|'"${K8S_ENDPOINT}"'|g' .travis/ansible/config/kubeconfig
- sed -i -e 's|K8S_ADMIN_CERT|'"${K8S_ADMIN_CERT}"'|g' .travis/ansible/config/kubeconfig
- sed -i -e 's|K8S_ADMIN_KEY|'"${K8S_ADMIN_KEY}"'|g' .travis/ansible/config/kubeconfig
- sed -i -e 's|K8S_USER_NAME|'"${K8S_USER_NAME}"'|g' .travis/ansible/config/kubeconfig
- sed -i -e 's|K8S_CLUSTER_NAME|'"${K8S_CLUSTER_NAME}"'|g' .travis/ansible/config/kubeconfig
# Install dependencies
- python -m pip install -r requirements.txt --upgrade
# List installed packages
- python -m pip list
# Confirm presence of ansible
- ansible-playbook --version
# Run master playbook
- cd .travis/ansible
- ansible-playbook site.yml -i config/hosts.yml --extra-vars "env=$TRAVIS_BRANCH version=$VERSION deployment_type=$TRAVIS_BRANCH" -vvv
notifications:
email: false
slack:
rooms:
secure: BSIHOTm2aPZUS05kBhPnYxjvx1ukrTf8vuzmRxTob5uoT5wEJtTK4J0oAj0OsCFl0rI5QogatsZl3qQJxH/wfyd1L6s32rZ/yrXuvTQGUFaalhj9BMMELUZzpr8egS2Amk4RV3DIfBjDqB08anSon9vjmLfz+HRqWzEXT/A0EvyLvmQq/Ykz5sEzZZIPCU4RPzJONXpA7/XWX6/R25wF7XYqgxWwP7MA8sQ6PnHXuq4qPUIIl+mFDzArwdKBdAY5UAPhcDsAEGnOXkRVHnjzU9DS2gEfsfLWbrO21dzOV6NyElJXGVh0JSR5tGlhq9GqmCHTFchpno4r7Lpp7WjNX59+rBzRLshChATqpNFP5uPqADEtDtlWOgV+iJ+CpVF9rcUYhmIjGiyBgMspzbz7ZaUv0n6kfmdaDl1/CkWuILMmAEB4Km76TNvgt5ft9Qo3sSxk9K3bTMmJz0h6p5QzDXpTl6qevRHL2NXnm67Ozo6CXx/MW+bLA52+IvFV7gm9JTdqBjQTY9fqTK1Dy+mmzwZvPIlqgq02v/jrumDLfVmjdYcx7DTCMC9kV42zlfxrBRxyt/NgRBswuWX5YJS4KrVtI19sp4Hf1wEhSl4NmyTWTy+BbJ7R+75g6KypxsNQ1v1l9F5fHBGSPAvZ0a3bTy00CJ+k5M98QCekgE/5jdU=
template:
- "`%{repository_slug}` \n*%{result}* build (<%{build_url}|#%{build_number}>) by %{author} for commit (<%{compare_url}|%{commit}>) on branch `%{branch}`."
- "Duration: *%{duration}*"
- "Message: %{message}"