Skip to content
Snippets Groups Projects
Commit 0b05ebf4 authored by nimrod's avatar nimrod
Browse files

Added Kubernetes deployment and GitLab CI/CD.

parent 1cd4e667
No related branches found
No related tags found
No related merge requests found
---
image: adarnimrod/ci-images:docker
stages:
- build
- test
- deploy
variables:
AWS_DEFAULT_REGION: us-east-1
AWS_ACCESS_KEY_ID: abc
#AWS_SECRET_ACCESS_KEY: Secret environment variable
POSTGRES_PASSWORD: password
POSTGRES_DB: myapp
build:
stage: build
script:
- docker login -u gitlab-ci-token -p "$CI_JOB_TOKEN" registry.example.com
- docker pull registy.example.com/$CI_PROJECT_PATH:latest || true
- docker build --pull --cache-from "registy.example.com/$CI_PROJECT_PATH:latest" -t "registy.example.com/$CI_PROJECT_PATH:$CI_PIPELINE_ID" ./
- docker push "registy.example.com/$CI_PROJECT_PATH:$CI_PIPELINE_ID"
- |
if [ "$CI_COMMIT_REF_NAME" = "master" ]
then
docker tag "registy.example.com/$CI_PROJECT_PATH:$CI_PIPELINE_ID" "registy.example.com/$CI_PROJECT_PATH:latest"
docker push "registy.example.com/$CI_PROJECT_PATH:latest"
fi
test:
stage: test
image:
name: "registy.example.com/$CI_PROJECT_PATH:$CI_PIPELINE_ID"
services:
- name: postgres:alpine
script:
- python3 manage.py migrate
- python3 manage.py test
staging:
stage: deploy
environment:
name: Staging
script:
- mkdir ~/.kube
- aws s3 cp s3://example-environments/$CI_ENVIRONMENT_SLUG/kube_config ~/.kube/config
- sed -i "s/latest/$CI_PIPELINE_ID/g" myapp-*.yaml
- kubectl apply -f myapp-migrate.yaml
- kubectl wait --for=condition=complete --timeout=120 job/myapp-migrate
- kubectl apply -f myapp-deployment.yaml
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: myapp
spec:
replicas: 1
strategy: {}
template:
metadata:
creationTimestamp: null
spec:
containers:
env:
- name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
name: postgres
image: registry.example.com/myapp:latest
name: myapp
ports:
- containerPort: 8000
resources: {}
restartPolicy: Always
status: {}
---
apiVersion: v1
kind: Service
metadata:
name: myapp
spec:
ports:
- name: "8000"
port: 8000
targetPort: 8000
status:
loadBalancer: {}
---
apiVersion: batch/v1
kind: Job
metadata:
name: myapp-migrate
spec:
template:
metadata:
name: myapp-migrate
spec:
containers:
- name: myapp-migrate
image: registry.example.com/myapp:latest
command: [ "python3", "manage.py", "migrate" ]
env:
- name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
name: postgres
restartPolicy: Never
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment