Deployment

SENG 365 — Software Engineering

Neil Ernst

University of Victoria

2026-08-05

Learning Objectives

  • Deploy a full-stack application to a cloud environment
  • Understand build, release, and run stages (CI/CD)
  • Reason about testing under load and where systems degrade
  • Consider operational concerns: monitoring, configuration, rollback

Topics to Develop

From Build to Release

  • Build: install dependencies, compile/bundle, and run tests from a clean checkout.
  • Release: produce a deployable artifact, container image, or static bundle.
  • Run: configure the environment, start the service, and verify it behaves correctly.
  • Keep configuration and secrets out of the repository.

GitLab CI/CD

  • Use .gitlab-ci.yml to run tests on every push.
  • Publish artifacts such as frontend bundles, coverage reports, or container images.
  • Use protected variables for secrets and deployment credentials.
  • Treat a passing pipeline as evidence, not proof: still inspect logs and test the deployed system.

Cloud Deployment

  • Choose the simplest approved target that supports the team’s architecture: GitLab Pages for static frontends, or a container-friendly host for full-stack services.
  • Use containers when they reduce environment mismatch between development, CI, and production.
  • Document the deployment path so another team can reproduce it.
  • Apply the relevant twelve-factor ideas: config in environment, disposability, logs as event streams, and dependency isolation.

Testing Under Load

  • Run end-to-end tests against the deployed URL, not only localhost.
  • Use a small k6 or locust scenario that matches a real user flow.
  • Report latency, error rate, and the first obvious bottleneck.

Operations

  • Add enough logging to explain failures without exposing secrets.
  • Know how to rollback or redeploy the previous working version.
  • Identify one useful health check.
  • Describe what you would monitor if the system had real users.

In-Class Activity

Deploy and Break It

  • Deploy the sample app through GitLab.
  • Verify the CI pipeline from a fresh push.
  • Run one end-to-end test against the deployed URL.
  • Run a small load test and identify where the system starts to degrade.
  • Apply the same checklist to M6.