diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index da3120b8b073fcf0fea4557bbbfad9422a082a61..2119b3163e60312db3071dfe8bc257cd5dccd221 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -2,6 +2,9 @@ stages:
   - test
   - deploy
 
+variables:
+  DB_ENGINE : django.db.backends.sqlite3
+
 before_script:
   - echo "preparing environment"
   - virtualenv env -p `which python3`
@@ -9,17 +12,17 @@ before_script:
   - pip install -r pip-packages.txt
   
   
-test:
+run_tests:
   stage: test
   script:
     - echo "Running tests"
+    - python src/manage.py test
 
-deploy_test:
+deploy_testing:
   stage: deploy
   tags:
     - test
   variables:
-    DB_ENGINE : django.db.backends.sqlite3
     DB_NAME : /var/www/test/$CI_COMMIT_REF_NAME/.db/members.db
     DEPLOY_HOST : $CI_COMMIT_REF_NAME.test.ucc.asn.au
   script:
@@ -38,3 +41,38 @@ deploy_test:
     url: https://$CI_COMMIT_REF_NAME.test.ucc.asn.au
   except:
       - master
+
+deploy_staging:
+  stage: deploy
+  tags:
+    - stage
+  variables:
+    DB_NAME : /var/www/stage/.db/members.db
+    DEPLOY_HOST : staging.test.ucc.asn.au
+  script:
+    - echo "Deploy to staging"
+    - rm -f /var/www/stage/$CI_PROJECT_NAME
+    - rm -f /etc/uwsgi/vassals/stage.ini
+    - ln -srT ./ /var/www/stage/$CI_PROJECT_NAME
+    - envsubst < src/gms/settings_local.example.py > src/gms/settings_local.py
+    - python src/manage.py collectstatic
+    - python src/manage.py makemigrations
+    - python src/manage.py migrate --run-syncdb
+    - ln -s /etc/uwsgi/vassals/stage.skel /etc/uwsgi/vassals/stage.ini
+  environment:
+    name: stage
+    url: https://stage.test.ucc.asn.au
+  only:
+      - master
+
+stop_test:
+  stage: deploy
+  variables:
+    GIT_STRATEGY: none
+  when: manual
+  environment:
+    name: test/$CI_COMMIT_REF_NAME
+    action: stop
+  script:
+    - rm -f /var/www/test/$CI_COMMIT_REF_NAME
+    - rm -f /etc/uwsgi/vassals/$CI_COMMIT_REF_NAME.ini
\ No newline at end of file