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
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.
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.